2011-12-07 23 views
5

Stworzyłem skrypt .thor do skonfigurowania nowego projektu ruby ​​tak, jak lubię. Używam polecenia Thor :: Actions directory do zbudowania aplikacji w całości ze struktury katalogu szablonów, w przeciwieństwie do definiowania ich za pomocą heredoc. Katalog skrypt wygląda tak:Jak sprawić, by Thor znalazł szablony dla zainstalowanych systemów. Plików?

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

Działa to naprawdę świetne, i pozwala mi łatwo wizualizować i zmieniać poszczególne części szablonu jako moich zmian smakowych.

Ale nie mogę znaleźć dobrego sposobu na znalezienie katalogu szablonów po zainstalowaniu systemu .thor przy użyciu thor install rubynu.thor. Zainstaluj kije z pliku .thor w ~/.thor, ale ignoruje katalog template/, a więc szablony nie są już znalezione.

Nie chcę kodem źródłowym ścieżki source_root lub ręcznie skopiować katalogu szablonu do ~/.thor. Czy jest coś wbudowanego w system, który obsługuje instalowanie szablonów wraz z plikiem .thor? Byłoby wspaniale, gdyby można je było spakować razem po zainstalowaniu.

Jeśli nie, jaki jest najmilszy sposób obejścia tego? Na pewno są instalowane przez system zadania typu thor, które używają plików szablonów. Jak to zrobiłeś? Przypuszczam, że mogłem ominąć thor install i zapewnić to jako klejnot (choć wydaje się to przesadą), lub ugryźć kulę i wbić wszystkie definicje szablonów w plik gigantyczny .thor (mniej przyjemny do wprowadzenia zmian w konstrukcji później).

Dla porównania, tutaj jest prosta .thor plik używam:

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 

Dzięki!

Odpowiedz

6

Jeśli skonfigurować plik .thor takiego:

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

thor install <my_thor_command> będzie szukał pliku o nazwie main.thor, a następnie zainstalować go i nic innego w <my_thor_command>. Po tym, można polegać na:

def self.source_root 
    File.dirname(__FILE__) 
end 

który daje ścieżkę do <my_thor_command> jak to zostało zainstalowane.

+0

Dokładnie to miałem nadzieję usłyszeć. Działa idealnie, dzięki człowieku! – Mitch