5

Quería crear un generador que creara archivos (y directorios, etc.) basados ​​en archivos ya existentes en la aplicación (por ejemplo, las vistas o los controladores). Así que si hubiéramos vistas configurar como estoRails Generator: generar archivos basados ​​en archivos de rieles ya existentes

-app 
    -views 
     - layouts 
      - application.html.erb 
     - users 
      - index.html.erb 
      - show.html.erb 
      - etc ... 

y quería crear archivos basados ​​en ellos que puedo hacer (con sólo rubí)

directories = Dir.entries("#{Rails.root}/app/views") 
directories.each do |directory| 
    unless directory == "." or directory == ".." 
    files = Dir.entries("#{Rails.root}/app/views/#{directory}") 
    files.each do |file| 
     unless file == "." or file == ".." 
     text = File.read("#{Rails.root}/app/views/#{directory}/#{file}")  
     something #=> whatever else needs to go here to edit the file 
     something else #=> output_file.puts whatever 
     end 
    end 
    end 
end 

por lo que este es básicamente lo que me gustaría hacer con un generador para poder convertir mi código en un complemento y usarlo para otras aplicaciones.

Primera pregunta, cómo puedo generar archivos arbitrarios (con nombres de archivo basados ​​en nombres de archivo existentes utilizando el generador. ¿Es apropiado para desplazarse por los directorios como lo hice anteriormente, agarrar el directorio/archivo y generar archivos? ¿Hay una manera de hacer lo que hice usando un método más simple (el mío parece fácilmente rompible).

Además, debería poner toda esa lectura/formato/escritura de código dentro del propio generador y sólo tiene que pasar una cadena en la "initialize content" sección de create_file o debería ponerlo en otro lugar. ¿O debería usar el generador para crear los archivos desnudos y popul comió con un guión de inicio?

¿Hay más carriles tipo de forma de llenar los archivos generados, o debería simplemente meter todo mi código de formato dentro del generador. Si es así, ¿cuál es la forma apropiada de abordar esto?

+0

Su pregunta termina abruptamente "Si es así, ¿cuál es la". ¿Tienes más para agregar? –

Respuesta

5

No estoy seguro de si desea saber cómo se generan los generadores en rails3 o no. El código que estás mostrando no es muy parecido a un generador. En los generadores puede usar todos los comandos de Thor, que le ofrece un conjunto de herramientas muy poderoso para manipular archivos e insertar código (cadenas) en clases o archivos.

Así que definitivamente llenaría sus archivos dentro de un generador, porque luego sucede a petición del usuario, y el usuario puede elegir si ciertos archivos necesitan o pueden sobrescribirse o no.

Dentro de su gema, tendrá una carpeta lib/generators, que contiene una carpeta templates, que contiene todos los archivos que desee colocar dentro de la aplicación de rieles.

De la documentación de Thor, aquí está a nice example para construir archivos en un generador.

Espero que esto ayude.

1

hay una API simple para usar generadores en Rails. aquí se puede encontrar una buena guía:

http://guides.rubyonrails.org/generators.html

si usted quiere comprobar algo de código:

https://github.com/coderloop/tamed_beast (yo soy el autor de sus generadores)

https://github.com/pilu/web-app-theme (otro ejemplo limpia)

+0

alguien ha votado negativamente mi respuesta. ¿Qué pasa con eso? –

+2

No fui yo quien votó negativamente su respuesta; sin embargo, sugeriría que se votó negativamente porque se trata de 3 enlaces a otros sitios sin contenido real propio. Con la naturaleza a veces transitoria de los enlaces externos, esta respuesta podría terminar como un conjunto de enlaces muertos. –

+0

@Steve: gracias por su explicación. no es mi costumbre pegar los enlaces. en este caso, considerando que la solución no es tan * fácil * de encajar en una respuesta completa, pegué una guía completa con algunos ejemplos reales (y simples) para mostrar cómo trabajar con generadores de rieles. Soy el autor de los generadores de tamed_beast, por lo que puedo brindar más ayuda si es necesario. –

Cuestiones relacionadas