我已经创建了一个.thor
脚本,用于按照我喜欢的方式设置新的ruby项目。我使用Thor :: Actions directory
命令完全从模板目录结构构建应用程序,而不是使用heredocs内联定义它们。脚本目录如下所示:
rubynu.thor
template/
bin/
lib/
%app_name%.rb.tt
%app_name%
README.markdown
.gitignore
...
这非常棒,让我可以随着口味的变化轻松地想象和更改模板的各个部分。
但是,使用.thor
系统安装thor install rubynu.thor
文件后,我无法找到一个很好的方法来查找模板目录。安装将.thor
文件的副本粘贴到~/.thor
但忽略template/
目录,因此不再找到模板。
我不想对source_root
路径进行硬编码或手动将模板目录复制到~/.thor
。是否内置了一些内容来处理安装模板和.thor
文件?如果它们在安装时可以打包在一起会很棒。
如果没有,最好的解决方法是什么?当然,在某处使用模板文件的系统安装了thor任务。你过得怎么样?我想我可以绕过thor install
并将其作为一个宝石提供(虽然这看起来有点过分),或者咬紧牙关并将所有模板定义内联在一个巨大的.thor
文件中(不太令人愉快地进行更改)以后的结构。)
供参考,这是我正在使用的简单.thor
文件:
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
谢谢!
答案 0 :(得分:6)
如果您设置.thor
这样的文件:
<my_thor_commands>/
templates/
bin/
lib/
...
main.thor
thor install <my_thor_command>
会查找名为main.thor
的文件,然后在<my_thor_command>
中安装它和其他任何内容。在那之后,你可以依靠:
def self.source_root
File.dirname(__FILE__)
end
将为您提供安装<my_thor_command>
的路径。