2010-06-22 18 views
17

J'essaye de créer une gemme avec un générateur pour Rails 3 (beta 4). J'ai suivi these instructions, mais je ne pouvais pas le faire fonctionner. Le problème est que lorsque je définis un module dans le fichier du générateur, le générateur est listé avec 'rails generate', mais ne peut pas être exécuté car le générateur n'est pas trouvé.Créer une gemme Ruby on Rails 3 avec un générateur (y compris l'espace de noms)

à partir des instructions (ne fonctionne pas avec les 'rails génèrent 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 

modifié (fonctionne avec « rails génèrent installation):

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 

Cependant, je veux avoir des espaces de noms pour le générateur, par exemple company: gem_name: générateur, pour lequel je dois utiliser l'approche du module (je pense). Ma conjecture est que cela a quelque chose à voir avec la recherche et la structure du répertoire, mais je ne pouvais pas comprendre comment. J'ai essayé quelques approches:

lib 
-generators 
--my_gem.rb 

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

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

mais rien n'a aidé. J'ai également trouvé un peu sur Internet, mais non si montré ce dont j'avais besoin.

Répondre

13

(Je sais que ce poste est près d'un an, mais nous espérons que ce sera au moins utile pour les gens qui viennent ici d'une recherche.)

I mis en œuvre un générateur espaces de noms pour le (autonome) bijou SugarCRM Ruby et a écrit un blog sur cette question spécifique ici: http://davidsulc.com/blog/2011/05/22/adding-a-namespaced-rails-generator-to-a-standalone-ruby-gem/

Alternativement, vous pouvez simplement regarder le code de la pierre précieuse ici: https://github.com/chicks/sugarcrm/commit/183c1b193e6620431826c3b594c568d4592fb0af

4

Je sais que le gems rspec-rails a un générateur nommé "rspec: install" qui est un seul espace de noms mais c'est peut-être un début. Donc, vérifier leur arbre source sur GitHub https://github.com/rspec/rspec-rails

On dirait que la structure du fichier est:

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

J'espère que cela vous aide à conduire à une solution! Faites-nous savoir ce que vous trouvez

+0

Cela fonctionne parfaitement! Pas besoin de nicher dans un autre dossier 'rails' comme dans la réponse de David Sulc. –

0

le répertoire de votre générateur des espaces de noms devrait être: lib/générateurs/my_gem

Cela suppose que le nom de votre gemme est 'my-gem' ou 'my_gem'. Cela peut également s'appliquer à d'autres caractères non alphanumériques. S'il y a un trait d'union, il sera remplacé par un trait de soulignement.

Cela m'a pris environ 4 heures pour comprendre.