Slop is a simple option parser with an easy to remember syntax and friendly API.
This README is targeted at Slop v3.
gem install slop
git clone git://github.com/injekt/slop.git
gem build slop.gemspec
gem install slop-<version>.gem
# parse assumes ARGV, otherwise you can pass it your own Array
opts = Slop.parse do
banner "ruby foo.rb [options]\n"
on :name=, 'Your name'
on :p, :password, 'Your password', :argument => :optional
on :v, :verbose, 'Enable verbose mode'
end
# if ARGV is `--name Lee -v`
opts.verbose? #=> true
opts.password? #=> false
opts[:name] #=> 'lee'
Slop supports several methods of writing options:
# These options all do the same thing
on '-n', '--name', 'Your name', :argument => true
on 'n', :name=, 'Your name'
on :n, '--name=', 'Your name'
# As do these
on 'p', '--password', 'Your password', :argument => :optional
on :p, :password, 'Your password', :optional_argument => true
on '-p', 'password=?', 'Your password'
You can also return your options as a Hash:
opts.to_hash #=> { :name => 'lee', :verbose => true, :password => nil }
Slop attempts to build a good looking help string to print to your users. You
can see this by calling opts.help
or simply puts opts
.
All of these options can be sent to Slop.new
or Slop.parse
in Hash form.
strict
- Enable strict mode. When processing unknown options, Slop will raise anInvalidOptionError
. default: false.help
- Automatically add the--help
option. default: false.banner
- Set this options banner text. default: nil.ignore_case
- When enabled,-A
will look for the-a
option if-A
does not exist. default: false.autocreate
- Autocreate options on the fly. default: false.arguments
- Force all options to expect arguments. default: false.optional_arguments
- Force all options to accept optional arguments. default: false.multiple_switches
- When disabled, Slop will parse-abc
as the optiona
with the argumentbc
rather than 3 separate options. default: true.longest_flag
- The longest string flag, used to aid configuring help text. default: 0.
Check out the following wiki pages for more features:
I'm not, honestly! I love OptionParser. I really do, it's a fantastic library. So why did I build Slop? Well, I find myself using OptionParser to simply gather a bunch of key/value options, usually you would do something like this:
require 'optparse'
things = {}
opt = OptionParser.new do |opt|
opt.on('-n', '--name NAME', 'Your name') do |name|
things[:name] = name
end
opt.on('-a', '--age AGE', 'Your age') do |age|
things[:age] = age.to_i
end
# you get the point
end
opt.parse
things #=> { :name => 'lee', :age => 105 }
Which is all great and stuff, but it can lead to some repetition. The same thing in Slop:
require 'slop'
opts = Slop.parse do
on :n, :name=, 'Your name'
on :a, :age=, 'Your age', :as => :int
end
opts.to_hash #=> { :name => 'lee', :age => 105 }