【问题标题】:How to make Thor find templates for system installed .thor files?如何让 Thor 找到系统安装的 .thor 文件的模板?
【发布时间】:2011-12-07 05:31:23
【问题描述】:

我创建了一个.thor 脚本,用于按照我喜欢的方式设置一个新的 ruby​​ 项目。我正在使用 Thor::Actions directory 命令完全从模板目录结构构建应用程序,而不是使用 heredocs 内联定义它们。脚本目录如下所示:

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

这真的很棒,让我可以轻松地可视化并随着我的口味变化而更改模板的各个部分。

但是,一旦使用thor install rubynu.thor 系统安装了.thor 文件,我想不出一个好方法让thor 找到模板目录。安装将.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

谢谢!

【问题讨论】:

    标签: ruby thor


    【解决方案1】:

    如果您像这样设置.thor 文件:

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

    thor install &lt;my_thor_command&gt; 将查找名为main.thor 的文件,然后将其安装到&lt;my_thor_command&gt; 中。之后,您可以依赖:

    def self.source_root
      File.dirname(__FILE__)
    end
    

    这将为您提供&lt;my_thor_command&gt; 的安装路径。

    【讨论】:

    • 这正是我希望听到的。效果很好,谢谢伙计!
    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2014-09-14
    • 2011-08-09
    相关资源
    最近更新 更多