标签: thor

将Thor用于Ruby gem中的生成器

如何设置gem以获得二进制命令,例如"project newProject"使用Thor的一组生成器命令来创建文件等?

一个好的答案将描述如何布置gem的骨架,当从命令行运行时,即"project newProject",在它运行的目录中创建一个名为"newProject.txt"的文件.

我已经看到Rails 3使用Thor为其发电机供电; 似乎是一个非常好的解决方案,我想在我正在研究的非Rails ruby​​ gem中使用类似的方法.尝试看Rails 3来源,但它有点迷宫,因此问题.

ruby rubygems thor

4
推荐指数
2
解决办法
2988
查看次数

在Rails生产环境中运行Thor

我想在生产中的rails 3上运行一些Thor任务,但我不知道如何设置它.以下代码不起作用

class CheckData < Thor
  require File.expand_path('config/environment.rb')
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails thor

4
推荐指数
1
解决办法
2719
查看次数

如何使用rspec测试CLI的stdin

我正在制作一个小型的Ruby程序,无法弄清楚如何编写模拟多个用户命令行输入的RSpec规范(功能本身可行).我认为这个StackOverflow的答案可能涵盖了最接近我的地方,但这并不是我需要的.我使用Thor作为命令行界面,但我不认为这是Thor的任何问题.

程序可以从文件或命令行读取命令,并且我已经能够成功编写测试以读取执行它们.这是一些代码:

cli.rb

class CLI < Thor
  # ...
  method_option :filename, aliases: ['-f'],
                desc: "name of the file containing instructions",
                banner: 'FILE'

  desc "execute commands", "takes actions as per commands"
  def execute
    thing = Thing.new
    instruction_set do |instructions|
      instructions.each do |instruction|
        command, args = parse_instruction(instruction) # private helper method
        if valid_command?(command, args) # private helper method
          response = thing.send(command, *args)
          puts format(response) if response
        end
      end
    end
  end

  # ...

  no_tasks do
    def instruction_set
      if options[:filename] …
Run Code Online (Sandbox Code Playgroud)

ruby stdin rspec command-line-interface thor

4
推荐指数
1
解决办法
5139
查看次数

如何在不需要Thor CLI应用程序的情况下使用Thor操作?

Thor :: Actions(http://textmate.rubyforge.org/thor/Thor/Actions.html)有一些很棒的帮助方法我想访问但是如果不使用Thor CLI应用程序我似乎无法使用它们.

我试过简单地说:

require "rubygems"
require "thor"

Thor::Actions.create_file "foo.txt", "contents"
Run Code Online (Sandbox Code Playgroud)

哪个投掷:

run.rb:4:in '<main>': undefined method 'create_file' for Thor::Actions:Module (NoMethodError)

我意识到我可能会遗漏一些非常简单的东西.谢谢.

ruby thor

4
推荐指数
2
解决办法
1797
查看次数

Thor阅读配置yaml文件以覆盖选项

我正在尝试使用Thor创建可执行的ruby脚本.

我已经为我的任务定义了选项.到目前为止,我有类似的东西

class Command < Thor

  desc "csv2strings CSV_FILENAME", "convert CSV file to '.strings' file"
  method_option :langs, :type => :hash, :required => true, :aliases => "-L", :desc => "languages to convert"
  ...
  def csv2strings(filename)
    ...
  end

  ...
  def config
    args = options.dup
    args[:file] ||= '.csvconverter.yaml'

    config = YAML::load File.open(args[:file], 'r')
  end
end
Run Code Online (Sandbox Code Playgroud)

csv2strings没有参数的情况下调用时,我希望调用配置任务,这将设置选项:langs.

我还没有找到一个很好的方法来做到这一点.

任何帮助将不胜感激.

ruby command-line thor

4
推荐指数
1
解决办法
1838
查看次数

使用 Thor 操作强制复制

我正在使用 Thor 内置操作“copy_file”从我的模板源复制文件,覆盖现有文件。

我总是想覆盖,不想交互确认。

该文档不建议在此操作的配置哈希中有强制选项,但http://textmate.rubyforge.org/thor/Thor/Actions.html确实表明 config[:behavior] 可以设置为强制,但我看不出如何做到这一点。

如果有人有这样做的例子可以分享,我将不胜感激。

谢谢。

ruby thor

4
推荐指数
1
解决办法
1077
查看次数

访问Thor Option哈希

我想将一个值合并到Thor选项哈希中.

如果我只是使用合并我得到一个错误,HashWithIndifferentAccess

我已阅读文档,但我很难理解如何使其工作.我想我希望这个问题可以帮助我找到关于如何将值合并到这种哈希中的问题的答案,并理解如何阅读文档.

p options.inspect 
#=> "{\"ruby\"=>\"/Users/work/.rbenv/versions/1.9.2-p290/bin/ruby\"}"
p options.merge!(:a => true)
#=> hash_with_indifferent_access.rb:26:in `[]=': can't modify frozen hash (RuntimeError)
Run Code Online (Sandbox Code Playgroud)

ruby thor

3
推荐指数
1
解决办法
1269
查看次数

使用Thor删除文件中的一行

是否可以使用Thor操作从文件中删除一行文本.例如,我想删除ruby评论.到目前为止,我已经找到了两个动作:comment_lines- 注释掉行,和gsub_file

谢谢

ruby-on-rails thor

3
推荐指数
1
解决办法
879
查看次数

如何使用 rake 检查特定软件包是否安装在 linux 上?

在我尝试在 ubuntu 上使用 rake 自动执行某些任务的过程中,我遇到了目标机器上可能不存在需要打包的场景。检查系统上是否已安装某些软件包并做出相应响应的好方法是什么?

例如,我想在某个任务中运行“npm start”,但我想知道系统上是否已经安装了 npm,从而为用户提供正确的错误消息。如果可能的话,我也可以和 thor 一起做。

ruby linux ubuntu rake thor

3
推荐指数
1
解决办法
974
查看次数

在 Ruby 的 Thor 上,如何显示应用程序内的命令用法

我正在使用 Ruby 和 Thor 构建 CLI,如果没有传递任何选项,我想在屏幕上打印命令用法。

下面的伪代码行中的一些内容:

Class Test < Thor
  desc 'test', 'test'
  options :run_command

  def run_command
    if options.empty?
      # Print Usage
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我目前正在使用以下 hack(我并不为此感到自豪!=P):

Class Test < Thor
  desc 'test', 'test'
  options :run_command

  def run_command
    if options.empty?
      puts `my_test_command help run_command`
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

执行此操作的正确方法是什么?

ruby thor

3
推荐指数
1
解决办法
746
查看次数