Создание Рубина на рельсах 3 gem с генератором (ВКЛ. пространство имен)

Я пытаюсь создать драгоценный камень с генератором для Rails 3 (beta 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 установить):

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 gem и написал сообщение в блоге об этой конкретной проблеме здесь: 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 часов, чтобы выяснить.