Назад: How-To Выше: Содержание Вперед: Написание Ruby спецификации

How-To - Создание тикета

Трекер Rubinius-а расположен по адресу https://github.com/rubinius/rubinius/issues.

Тикеты должны быть краткими, предметными и осуществимыми. В противном случае тикет будет подолгу весеть в трекере и мешаться. Поэтому тикеты должны соответствовать одной или нескольким следующим категориям:

  1. Конкретная строка из терминала, с помощью которой можно установить и вызвать программу, а также стектрейс исключения.
  2. Небольшой кусок кода иллюстрирующий проблему, а также командная строка для его вызова.
  3. Патч, вместе со спецификацией, если ее еще нет, а также результат выполнения спецификации до и после патча.

Если ваш задача не подпадает ни в одну из категорий, это не означает что она некорректна. Это просто означает, что она не подходит для тикета.

  1. Если вы хотите добавить новую функциональность, попробуйте обсудить это в мейллисте. Также вы можете попытаться реализовать ее и показать насколько она полезна.
  2. Если у вас есть библиотека или гем, которые не работают, попробуйте разобраться почему и попытайтесь сделать более маленький кусок кода, воспроизводящий проблему и создайте тикет вместе с ним.

Общая процедура добавления тикета

  1. Проверьте несколько раз.

    1. Полностью пересоберите Rubinius ('rake clean; rake') после 'git pull' или нового git clone.
    2. Прочтите Разрешение проблем, возможно это поможет решить вашу проблему.
    3. Прочтите Спецификации.
  2. Дайте вашему тикету конкретный, желательно короткий заголовок.

  3. Снабдите тикет соответствующими тегами.

  4. Добавьте в тикет достаточно информации:

    • Команду в терминале, с помощью которой можно вызвать программу
    • Стектрейс или результат программы вместе с ожидаемым результатом.
    • Информацию о вашей машине. uname -a обычно достаточно (если в ней присутствуют "unknown" поля, пожалуйста, дополните их.)

Дополнительные указания для тикетов с патчами

Если возможно, пожалуйста, используйте 'git-format-path' для создания набора патчей. Это и упрощает применение патча и сохраняет его атрибуты. В противном случае используйте унифицированный diff.

Пример отправки патча

Предположим следующая спецификация существует и не работает:

describe "Kernel.format" do
  it "is accessible as a module function" do
    Kernel.format("%s", "hello").should == "hello"
  end
end
  1. Заголовок тикета:

    "[PATCH] No method 'format' on Kernel (Module)"

  2. Теги:

    "patch core spec"

  3. Текст в тикете:

    The method 'format' is not available as a module function of Kernel.

    $ bin/mspec spec/ruby/core/kernel/format_spec.rb
    Started
    .E
    
    1)
    Kernel.format is accessible as a module function ERROR
    No method 'format' on Kernel (Module):
    

    The method 'format' already exists but has not been set as a module function. This patch does so.

    After the patch is applied:

    $ bin/mspec spec/ruby/core/kernel/format_spec.rb
    Started
    ..
    
    Finished in 0.016031 seconds
    
    2 examples, 2 expectations, 0 failures, 0 errors
    
  4. Приложение:

Наконец, поместите ваш патч в gist и добавьте ссылку на него в тикет. Ниже приведен патч для целостности картины:

From c61cecce6442347ebbdf1ded7a5c0832c97582c1 Mon Sep 17 00:00:00 2001
From: Brian Ford <bford@engineyard.com>
Date: Sat, 19 Jan 2008 17:48:19 -0800
Subject: [PATCH] Set Kernel#format as a module function.


diff --git a/kernel/core/kernel.rb b/kernel/core/kernel.rb
index 2d2e508..f2a382e 100644
--- a/kernel/core/kernel.rb
+++ b/kernel/core/kernel.rb
@@ -150,6 +150,7 @@ module Kernel
   end
   alias_method :format, :sprintf
   module_function :sprintf
+  module_function :format
   module_function :abort

   def puts(*a)
Назад: How-To Выше: Содержание Вперед: Написание Ruby спецификации

Tweet at @rubinius on Twitter or email community@rubini.us. Please report Rubinius issues to our issue tracker.