我已经创建了一个.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文件,我就无法找到找到模板目录的好方法。 Install将.thor文件的副本粘贴到~/.thor中,但是忽略了template/目录,因此不再找到模板。

我不想对source_root路径进行硬编码,也不想手动将模板目录复制到~/.thor。有内置的东西可以处理安装模板以及.thor文件吗?如果可以在安装时将它们打包在一起,那就太好了。

如果没有,解决这个问题的最好方法是什么?当然,在某些使用模板文件的任务中已经安装了系统。你是怎么做到的?我想我可以绕过thor install并将其作为gem提供(尽管这似乎有些过分),或者咬住子弹并将所有模板定义内联在一个巨大的.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

谢谢!

最佳答案

如果您像这样设置.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>的安装路径。

10-04 19:19