如何让Thor找到系统安装.thor文件的模板?

时间:2011-12-07 05:31:23

标签: ruby thor

我已经创建了一个.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

谢谢!

1 个答案:

答案 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>的路径。