генератор обезьяньих патчей rails3

Я хочу исправить генератор rspec-rails для создания шаблона _form.html_spec.rb. Я знаю, как это сделать, но я не знаю, куда я должен поставить этот патч!

Что я наделал:

# rspec_generator_patch.rb
module Rspec
  module Generators
    class ScaffoldGenerator < Base
      def generate_views_specs_with_form *args, &block
        generate_views_specs_without_form
        copy_view :_form
      end
      alias_method_chain :generate_views_specs, :form
    end
  end
end

Куда я положил этот файл? Спасибо.

РЕДАКТИРОВАТЬ:

Ок, думаю проблема почти решена. Вместо monkey-patch я унаследовал определенные генераторы и отредактировал метод. Есть решение:

# lib/generators/rspec_modded/scaffold/scaffold_generator.rb
require 'generators/rspec/scaffold/scaffold_generator.rb'
module RspecModded
  module Generators
    class ScaffoldGenerator < Rspec::Generators::ScaffoldGenerator
      def generate_view_specs
        super
        copy_view :_form
      end
    end
  end
end

Если я сделаю rails g rspec_modded: скаффолд появится в списке и действительно сработает, если вызвать его вручную (rails g rspec_modded:scaffold test).

# config/application.rb
# ...
config.generators do |g|
  g.test_framework :rspec_modded, :fixture => false, fixture_replacement: nil
  g.fallbacks[:rspec_modded] = :rspec
end

Насколько я знаю, каждый hook_for :test_framework должен вызывать генератор rspec_modded, а rspec должен управлять остальными (резервными вариантами). Но это не работает: почему-то срабатывает генератор unit_test! В чем дело? Я действительно не понимаю...


person Iazel    schedule 17.02.2013    source источник


Ответы (1)


Вы можете разместить свой патч для обезьян где угодно, пока он загружается. С рельсами вы обычно кладете его в папку /lib.

person Speed    schedule 17.02.2013
comment
Это проблема. Какие файлы загружаются при запуске генератора скаффолдов? - person Iazel; 18.02.2013
comment
Я думаю, что он загружает базовую среду (script/rails). Но вы должны знать, что /lib не загружается по умолчанию, и если вы установите для него автоматическую загрузку, то он, вероятно, никогда не загрузится. Итак, вам нужно явно указать требование где-то - person Speed; 18.02.2013