1.2.3

## 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” поля, пожалуйста, дополните их.)

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

- Тикеты могут состоять просто из набора спецификаций.
- Патчи должны быть снабжены спецификациями в случае их отсутствия.
- Релевантную часть вывода спецификации и точный вывод ‘bin/mspec’, вызванной с существующей или добавленной спецификацией перед исправлением.
- Вывод спецификации и вывод ‘bin/mspec’ показывающий успех после исправления.
- Дополнительное описание вашего патча и того, как он исправляет проблему. В частности, что касается новой функциональности, пожалуйста, указывайте обсуждалось ли это уже на #rubinius или ruby-dev.

Если возможно, пожалуйста, используйте ‘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)