Создание гема Ruby on Rails 3 с генератором (включая пространство имен)
Я пытаюсь создать драгоценный камень с генератором для Rails 3 (бета 4). Я следовал этим инструкциям, но не смог его запустить. Проблема в том, что когда я определяю модуль в файле генератора, генератор попадает в список с "rails generate", но не может быть запущен, потому что генератор не найден.
Из инструкции (не работает с 'rails generate my_gem:install'):
module MyGem
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path("../templates", __FILE__)
# all public methods in here will be run in order
def add_my_initializer
template "initializer.rb", "config/initializers/my_gem_initializer.rb"
end
end
end
Модифицировано (работает с 'rails generate install):
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path("../templates", __FILE__)
# all public methods in here will be run in order
def add_my_initializer
template "initializer.rb", "config/initializers/my_gem_initializer.rb"
end
end
Однако я хочу иметь пространства имен для генератора, например, company:gem_name:generator, для которого я должен использовать модульный подход (я думаю). Я предполагаю, что это как-то связано с поиском и структурой каталогов, но я не мог понять, как. Я попробовал пару подходов:
lib
-generators
--my_gem.rb
lib
-generators
--company
---my_gem.rb
lib
-generators
--company
---my_gem_name
----my_gem.rb
но ничего не помогло. Я также нашел довольно много в Интернете, но не показал, что мне нужно.
3 ответа
(Я понимаю, что этому посту уже почти год, но, надеюсь, это будет, по крайней мере, полезным для людей, приходящих сюда из поиска.)
Я реализовал генератор пространства имен для (автономного) гема SugarCRM Ruby и написал пост в блоге об этой конкретной проблеме здесь: http://davidsulc.com/blog/2011/05/22/adding-a-namespaced-rails-generator-to-a-standalone-ruby-gem/
Кроме того, вы можете просто посмотреть на код драгоценного камня здесь: https://github.com/chicks/sugarcrm/commit/183c1b193e6620431826c3b594c568d4592fb0af
Я знаю, что в геме rspec-rails есть генератор с именем "rspec:install", который является только одним пространством имен, но, возможно, это начало. Так что посмотрите их исходное дерево на github https://github.com/rspec/rspec-rails
Похоже, структура файла:
lib
└ generators
├ rspec.rb
└ rspec
└ install
└ install_generator.rb
Я надеюсь, что это поможет вам найти решение! Дайте нам знать, что вы найдете
Каталог для вашего генератора пространства имен должен быть: lib/generators/my_gem
Предполагается, что название вашего драгоценного камня "my-gem" или "my_gem". Это может относиться и к другим символам, которые не являются буквенно-цифровыми. Если есть дефис, он будет заменен подчеркиванием.
Это заняло у меня около 4 часов, чтобы выяснить.