He creado una secuencia de comandos .thor
para configurar un nuevo proyecto de ruby de la manera que me gusta. Estoy usando el comando Thor :: Actions directory
para construir la aplicación completamente desde una estructura de directorio de plantillas, en lugar de definirlas en línea con heredocs. El directorio de la escritura es como la siguiente:¿Cómo hacer que Thor encuentre plantillas para archivos .thor instalados en el sistema?
rubynu.thor
template/
bin/
lib/
%app_name%.rb.tt
%app_name%
README.markdown
.gitignore
...
Esto funciona muy bien, y me permite fácilmente visualizar y cambiar partes individuales de la plantilla como mis cambios en el gusto.
Pero no puedo encontrar una buena manera de conseguir que thor encuentre el directorio de la plantilla una vez que el archivo .thor
está instalado en el sistema usando thor install rubynu.thor
. Install almacena una copia del archivo .thor
en ~/.thor
pero ignora el directorio template/
, por lo que las plantillas ya no se encuentran.
No quiero codificar la ruta source_root
ni copiar manualmente sobre el directorio de la plantilla al ~/.thor
. ¿Hay algo incorporado en thor que maneja la instalación de plantillas junto con el archivo .thor
? Sería genial si pudieran empaquetarse juntos cuando se instalan.
Si no, ¿cuál es la mejor manera de evitar esto? Seguramente hay tareas thor instaladas en el sistema en alguna parte que usan archivos de plantilla. ¿Cómo lo hiciste? Supongo que podría pasar por alto thor install
y proporcionar esto como una gema (aunque eso parece exagerado), o morder la viñeta y pegar todas las definiciones de plantilla en línea en un archivo .thor
gigante (menos placentero hacer cambios en la estructura más adelante).
Para referencia, aquí es el simple archivo .thor
que estoy usando:
class Rubynu < Thor::Group
include Thor::Actions
argument :app_name
def self.source_root
File.dirname(__FILE__)
end
def apply_directory_template
directory 'template', app_name
end
end
Gracias!
Eso es exactamente lo que esperaba escuchar. Funciona perfectamente, gracias hombre! – Mitch