OptParser не возвращает параметры
У меня есть этот пример кода:
#!/usr/bin/env ruby
require_relative File.expand_path('../../lib/argosnap', __FILE__)
require 'optparse'
options = {}
opt_parser = OptionParser.new do |opt|
opt.banner = "argosnap #{Argosnap::VERSION} ( http://github/atmosx/argosnap )\nUsage: argosnap [OPTIONS]"
opt.separator ""
opt.separator " version: dislay version"
opt.separator " install: installs 'config.yml' and launchd script"
opt.separator " balance: check picodollars"
opt.separator ""
opt.on("-v","--version","display version") do |version|
options[:version] = version
end
opt.on("-c","--config [TYPE]", String, "install configuration files") do |config|
options[:config] = config
end
opt.on("-b","--balance","executes 'argosnap' and displayes notifications") do |balance|
options[:balance] = balance
end
opt.on("-h","--help","help") do
puts opt_parser
end
end
begin
opt_parser.parse!
rescue OptionParser::InvalidOption => e
puts "No such option! Type 'argosnap -h' for help!"
exit
end
case ARGV[0]
when "version"
puts Argosnap::VERSION
when "config"
Argosnap::Install.new.config
when "balance"
b = Argosnap::Fetch.new.balance
puts "Current balance (picodollars): #{b}"
else
puts "Type: 'argosnap -h' for help!"
end
Моя проблема в том что options
хеш пуст Это как если он не принимает options[:var] = var
определенный внутри класса OptParser. Я хотел бы использовать -v
а также --version
в моей программе, чтобы сделать его более Unix-подобным.
я использую ruby-2.0
,
ОБНОВЛЕНИЕ: как это код works
Я пытался изменить when "version"
с when '-v'
или же when options[:version]
который казался мне лучшим подходом, но ничего не получалось.
1 ответ
Решение
Когда ты пишешь дело ARGV[0]
вы полностью игнорируете opt_parser...ARGV[0]
это первое слово в командной строке. Весь смысл opt_parser в том, что вы не смотрите на ARGV
:
if options[:version]
puts Argosnap::VERSION
elsif options[:config]
Argosnap::Install.new.config
elsif options[:balance]
b = Argosnap::Fetch.new.balance
puts "Current balance (picodollars): #{b}"
else
puts "Type: 'argosnap -h' for help!"
end