ARGVのparser
optparseの使い方を覚えきれない
http://www.ruby-lang.org/ja/man/html/optparse_A5C1A5E5A1BCA5C8A5EAA5A2A5EB.html
というか引数と処理を結びつけないで、ただスイッチが入っているか・値が渡されているかを読みとりたいだけなので作った
今気づいたがcooloptions使えば良かったかも http://rubyforge.org/projects/cooloptions/
ArgsParser.rb
class ArgsParser def params @params end def initialize @binds = Hash.new end def parse(argv) # parse @params = Hash.new for i in 0...argv.size do if argv[i].match(/-+.+/) term = argv[i].match(/-+(.+)/)[1].to_sym if i == argv.size-1 || argv[i+1].match(/-+.+/) @params[term] = true # option else @params[term] = argv[i+1] # param end end end @binds.keys.each{|name| fullname = @binds[name] if @params[fullname] == nil && @params[name] != nil @params[fullname] = @params[name] @params.delete(name) end } return @params end def bind(fullname, name) @binds[name.to_sym] = fullname.to_sym end end
使う
require 'ArgsParser' parser = ArgsParser.new parser.bind(:frame, :f) parser.bind(:motion, :m) # MotionEffect parser.bind(:source, :s) parser.bind(:output, :o) parser.bind(:theme, :t) params = parser.parse(ARGV)
実行例
ruby test.rb -t testtheme -s /Users/sho/images/ -o /tmp/out/ -preview
hashにシンボルでアクセスすると値を取り出せる
puts params[:theme] # => testtheme puts params[:source] # => /Users/sho/images/ puts params[:preview] # => true