如何命名不存在于Gem中的生成器

时间:2013-12-02 14:33:49

标签: ruby-on-rails thor rails-generate

我很困惑。

我使用的一个名为railsy_backbone的gem提供了甜蜜的命名空间生成器。从命令行我可以调用它们,

$ rails g backbone:model widget

现在,是时候制作甜蜜的发电机了,但我在使用命名空间时遇到了麻烦。我完成了我的研究,我读过thisthis,甚至this。我最终得到的结构是:

lib/generators/
└── marionette
    └── model
        ├── model_generator.rb
        ├── templates
        └── USAGE

model_generator.rb的内容是,

module Marionette
  module Generators
    class ModelGenerator < Rails::Generators::NamedBase
      source_root File.expand_path('../templates', __FILE__)
    end
  end
end

这反映了我读过的所有例子。为了比较,这里是lib/generators railsy_backbone宝石的部分树:{/ p>

generators/
└── backbone
    ├── bob
    │   ├── bob_generator.rb
    │   └── templates
    │       └── model.coffee
    ├── helpers.rb
    ├── model
    │   ├── model_generator.rb
    │   └── templates
    │       └── model.coffee

我实际上自己添加了backbone:bob,当我运行rails g sans参数时,它随后显示在命名空间主干下的生成器列表中。这里也是model_generator.rb

的内容
require 'generators/backbone/helpers'

module Backbone
  module Generators
    class ModelGenerator < Rails::Generators::NamedBase
      include Backbone::Generators::Helpers

      source_root File.expand_path("../templates", __FILE__)

      // the implementation

    end
  end
end

我能在代码和他们的代码之间看到的唯一区别是,他们已经将他们的生成器打包在一个gem中。我的发电机住在我正在研究的导轨应用程序中。现在我已经放弃了,我只是要制作一堆顶级发电机。最终,当我准备好使用它们时,我会将它们打包为宝石并安装它。我希望这会奏效。但是,我真的很想知道如何命名生成器而不让它们存在于gem中。任何人都有相关经历吗?

1 个答案:

答案 0 :(得分:2)

使用:

$ rails generate generator your_gem_name/generator_name

然后检查:

$ rails generate your_gem_name:generator_name --help