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