Learn how to parse command line options in your Ruby scripts with the slop gem, an alternative to Ruby’s built-in OptionParser class.
Installing the slop gem
Make sure you have the slop gem installed:
gem install slop
Alternatively add the gem to your Gemfile and install it via bundler.
Parsing command line options
Start by requiring slop, and calling the Slop.parse
method with a block that defines which options your script accepts. For example:
require 'slop'
options = Slop.parse do |opts|
opts.bool '-i', '--include', 'Include protocol headers'
opts.bool '-v', '--verbose', 'Make the operation more talkative'
opts.string '-m', '--message', 'Use the given message'
end
Slop supports the same as OptionParser: single character "short" options (-i), multi-character "long" options (--include), multiple single character options specified together (-iv), negative forms of boolean options (--no-verbose), and both styles of options with arguments (either --message=Hey or --message Hello).
Unlike with OptionParser there’s no need to specify [no-]
or option arguments.
Result objects
Slop returns parsed options wrapped up in Slop::Result
objects.
# ruby script.rb --include foo bar
options[:include] # => true
options.verbose? # => false
options.arguments # => ["foo", "bar"]
As well as supporting hash-like key lookup these result objects provide some additional helper methods like query methods for boolean options, and an #arguments method which returns any remaining arguments that aren’t options.
Argument type coercion
Type coercion is supported by using the Slop::Options
type methods:
options = Slop.parse do |opts|
opts.integer '-p', '--port', 'Define the port'
opts.array '-n', '--names', 'Define the list of names'
end
With this example a port argument will be coerced into an integer, and a comma separated names argument will be coerced into an array of strings.
Slop supports string options, boolean options, integer options, float options, array options, regexp options, as well as custom options.
Displaying a help summary
Slop can be used to automatically generate a "help" or "usage" summary using the given argument descriptions. Simply define a help option and puts the Slop::Options
object, or puts the returned Slop::Result
object like this:
puts options
You can use Slop::Options#banner= to change the banner message.