applix

Building command line apps like:

Defaults = { :verbose => false }

Applix.main(ARGV, Defaults) do 
    handle(:one) do |*args, opts|
        if opts[:verbose]
            puts "arguments: #{args.inspect}"
            puts "options: #{opts.inspect}"
        end
    end

    handle(:two) do |*args, opts|
        if opts[:verbose]
            puts "arguments: #{args.inspect}"
            puts "options: #{opts.inspect}"
        end
    end
end

can be called like:

$ app --verbose one 1234 x y z
arguments: ["1234", "x", "y", "z"]
options: {:verbose => true}
$

Command line options will be processed with Hash#from_argv. Hash#from_argv builds a hash from ARGV like argument vector according to following examples:

'-f'                  --> { :f      => true }
'--flag'              --> { :flag   => true }
'--flag:false'        --> { :flag   => false }
'--flag=false'        --> { :flag   => 'false' }
'--option=value'      --> { :option => "value" }
'--int=1'             --> { :int    => "1" }
'--float=2.3'         --> { :float  => "2.3" }
'--float:2.3'         --> { :float  => 2.3 }
'--txt="foo bar"'     --> { :txt    => "foo bar" }
'--txt:\'"foo bar"\'' --> { :txt    => "foo bar" }
'--txt:%w{foo bar}'   --> { :txt    => ["foo", "bar"] }
'--now:Time.now'      --> { :now    => #<Date: 3588595/2,0,2299161> }

Remaining arguments(non flag/options) are inserted as [:args], eg:

Hash.from_argv %w(--foo --bar=loo 123 now)

becomes:

{ :foo => true, :bar => 'loo', :args => ["123", "now"] }

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don’t break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright (c) 2009/11 dirk luesebrink. See LICENSE for details.