2011-12-07 13 views
5

Ho creato uno script .thor per l'impostazione di un nuovo progetto di rubino nello stesso modo in cui mi piace. Sto utilizzando il comando Thor :: Actions directory per creare l'app interamente da una struttura di directory del modello, anziché definirli in linea con heredocs. La directory di script simile a questa:Come rendere Thor trovare i modelli per i file installati .thor del sistema?

rubynu.thor 
template/ 
    bin/ 
    lib/ 
    %app_name%.rb.tt 
    %app_name% 
    README.markdown 
    .gitignore 
    ... 

questo funziona davvero grande, e mi permette di visualizzare e modificare le singole parti del modello come il mio gusto cambia facilmente.

Ma non riesco a trovare un modo carino per ottenere thor per trovare la directory dei modelli una volta che il file .thor è stato installato utilizzando thor install rubynu.thor. Installa una copia del file .thor in ma ignora la directory template/ e quindi i modelli non vengono più trovati.

Non voglio hardcodificare il percorso source_root o copiare manualmente la directory modello su ~/.thor. C'è qualcosa di integrato in thor che gestisce l'installazione di modelli insieme al file .thor? Sarebbe bello se potessero essere confezionati insieme quando installati.

In caso contrario, qual è il modo migliore per aggirare questo? Sicuramente ci sono compiti di sistema installati da qualche parte che usano i file modello. Come hai fatto? Suppongo di poter aggirare lo thor install e fornire questo come un gioiello (anche se sembra eccessivo), o mordere il proiettile e incollare tutte le definizioni del modello in linea in un gigantesco file .thor (meno piacevole apportare modifiche alla struttura in un secondo momento).

Per riferimento, ecco la semplice file .thor sto 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 

Grazie!

risposta

6

Se si imposta il file .thor in questo modo:

<my_thor_commands>/ 
    templates/ 
    bin/ 
    lib/ 
    ... 
    main.thor 

thor install <my_thor_command> cercherà un file chiamato main.thor, e poi installarlo e qualsiasi altra cosa nella <my_thor_command>. Dopo di che, si può contare su:

def self.source_root 
    File.dirname(__FILE__) 
end 

che vi darà il percorso del <my_thor_command> come è stato installato.

+0

Questo è esattamente quello che speravo di sentire. Funziona perfettamente, grazie amico! – Mitch

Problemi correlati