Создание гема Ruby on Rails 3 с генератором (включая пространство имен) - PullRequest
17 голосов
/ 22 июня 2010

Я пытаюсь создать гем с генератором для 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

Однако я хочу иметь пространства имен для генератора, например, компания: gem_name: генератор, для которого я должен использовать модульный подход (я думаю). Я предполагаю, что это как-то связано с поиском и структурой каталогов, но я не мог понять, как. Я попробовал пару подходов:

lib
-generators
--my_gem.rb

lib
-generators
--company
---my_gem.rb

lib
-generators
--company
---my_gem_name
----my_gem.rb

но ничего не помогло. Я также нашел немного в Интернете, но не показывал, что мне нужно.

Ответы [ 3 ]

13 голосов
/ 22 мая 2011

(я понимаю, что этому посту уже почти год, но, надеюсь, это будет, по крайней мере, полезно для людей, приходящих сюда из поиска.)

Я реализовал генератор пространства имен для (автономного) гема 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

4 голосов
/ 31 января 2011

Я знаю, что в геме rspec-rails есть генератор с именем "rspec: install", который является только одним пространством имен, но, возможно, это начало.Так что посмотрите их исходное дерево на github https://github.com/rspec/rspec-rails

Похоже, структура файла выглядит так:

lib
 └ generators
    ├ rspec.rb
    └ rspec
       └ install
          └ install_generator.rb

Надеюсь, это поможет вам найти решение!Дайте нам знать, что вы найдете

0 голосов
/ 11 июля 2013

каталог для вашего генератора пространства имен должен быть: Библиотека / генераторы / my_gem

Предполагается, что название вашего драгоценного камня - my-gem или my_gem. Это может относиться и к другим символам, которые не являются буквенно-цифровыми. Если есть дефис, он будет заменен подчеркиванием.

Мне потребовалось около 4 часов, чтобы понять.

...