2010-06-22 8 views
17

Estoy tratando de crear una gema con un generador para Rails 3 (beta 4). Seguí these instructions, pero no pude hacerlo funcionar. El problema es que cuando estoy definiendo un módulo en el archivo del generador, el generador se enumera con 'rails generate', pero no se puede ejecutar porque no se encuentra el generador.Creando una gema de Ruby on Rails 3 con un generador (espacio de nombres incluido)

De las instrucciones (no funciona con 'rieles generan my_gem: instalar'):

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 

Modificado (funciona con 'rieles generan instalar):

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 

Sin embargo, quiero tener espacios de nombres para el generador, por ejemplo compañía: gem_name: generator, para lo cual tengo que usar el enfoque de módulo (creo). Supongo que tiene algo que ver con la búsqueda y la estructura del directorio, pero no pude entender cómo. Intenté un par de enfoques:

lib 
-generators 
--my_gem.rb 

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

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

pero nada ayudó. También encontré bastante en Internet, pero no si mostraba lo que necesitaba.

Respuesta

13

(me di cuenta que este post es de casi un año de edad, pero espero que esto al menos será útil para las personas que vienen aquí de una búsqueda.)

he implementado un generador de espacio de nombres para el (independiente) joya SugarCRM Ruby y escribió una entrada de blog sobre este tema específico aquí: http://davidsulc.com/blog/2011/05/22/adding-a-namespaced-rails-generator-to-a-standalone-ruby-gem/

Como alternativa, puede simplemente mirar el código de la joya aquí: https://github.com/chicks/sugarcrm/commit/183c1b193e6620431826c3b594c568d4592fb0af

4

Sé que la gema rspec-rails tiene un generador llamado "rspec: install", que es solo un espacio de nombres, pero tal vez sea un comienzo. Así que echa un vistazo a su árbol de código fuente en GitHub https://github.com/rspec/rspec-rails

se parece a la estructura de archivos es:

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

espero que esto le ayuda a conducir a una solución! Háganos saber lo que encuentre

+0

¡Esto funciona perfecto! No es necesario anidar en otra carpeta 'carriles' como en la respuesta de David Sulc. –

0

el directorio para su generador de espacio de nombres debe ser: lib/generators/my_gem

Esto supone que el nombre de su gema es 'mi-gema' o 'mi_gema'. Esto puede aplicarse a otros personajes que no son alfanuméricos también. Si hay un guión, será reemplazado por un guión bajo.

Esto me llevó aproximadamente 4 horas averiguarlo.

Cuestiones relacionadas