如何设置gem以获得二进制命令,例如"project newProject"使用Thor的一组生成器命令来创建文件等?
一个好的答案将描述如何布置gem的骨架,当从命令行运行时,即"project newProject",在它运行的目录中创建一个名为"newProject.txt"的文件.
我已经看到Rails 3使用Thor为其发电机供电; 似乎是一个非常好的解决方案,我想在我正在研究的非Rails ruby gem中使用类似的方法.尝试看Rails 3来源,但它有点迷宫,因此问题.
我想在生产中的rails 3上运行一些Thor任务,但我不知道如何设置它.以下代码不起作用
class CheckData < Thor
require File.expand_path('config/environment.rb')
end
Run Code Online (Sandbox Code Playgroud) 我正在制作一个小型的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) 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)
我意识到我可能会遗漏一些非常简单的东西.谢谢.
我正在尝试使用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.
我还没有找到一个很好的方法来做到这一点.
任何帮助将不胜感激.
我正在使用 Thor 内置操作“copy_file”从我的模板源复制文件,覆盖现有文件。
我总是想覆盖,不想交互确认。
该文档不建议在此操作的配置哈希中有强制选项,但http://textmate.rubyforge.org/thor/Thor/Actions.html确实表明 config[:behavior] 可以设置为强制,但我看不出如何做到这一点。
如果有人有这样做的例子可以分享,我将不胜感激。
谢谢。
我想将一个值合并到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) 是否可以使用Thor操作从文件中删除一行文本.例如,我想删除ruby评论.到目前为止,我已经找到了两个动作:comment_lines- 注释掉行,和gsub_file
谢谢
在我尝试在 ubuntu 上使用 rake 自动执行某些任务的过程中,我遇到了目标机器上可能不存在需要打包的场景。检查系统上是否已安装某些软件包并做出相应响应的好方法是什么?
例如,我想在某个任务中运行“npm start”,但我想知道系统上是否已经安装了 npm,从而为用户提供正确的错误消息。如果可能的话,我也可以和 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)
执行此操作的正确方法是什么?