Skip to content

Instantly share code, notes, and snippets.

@hoomand
Last active May 27, 2018 07:44
Show Gist options
  • Save hoomand/c37cd72b765f2731b77f7265cf276a38 to your computer and use it in GitHub Desktop.
Save hoomand/c37cd72b765f2731b77f7265cf276a38 to your computer and use it in GitHub Desktop.
Ruby OptParse example
#!/usr/bin/env ruby
# A sample use of optparse to parse command line arguments/flags
# Sample run:
# $> ./db_backup.rb -u bijan.hoomand --password blahblah -s local --verbosity 3
# {:user=>"bijan.hoomand", :password=>"blahblah", :server=>"127.0.0.1", :verbosity=>3}
#
# $> ./db_backup.rb -u bijan --password blahblah --server dev -v 5 --iteration
# ./db_backup.rb:40:in `<main>': invalid argument: -u bijan (OptionParser::InvalidArgument)
# If you want to have mandatory arguments, without any - or --, have a look at:
# https://stackoverflow.com/questions/2449171/how-to-parse-an-argument-without-a-name-with-rubys-optparse
require 'optparse'
servers = {
local: '127.0.0.1',
dev: '192.168.1.10',
prod: '52.40.42.5'
}.freeze
options = {}
op = OptionParser.new do |opts|
opts.banner = 'Usage: db_backup.rb [options]'
# create a switch
opts.on('-i', '--iteration', 'end of iteration?') do
options[:iteration] = true
end
# create a flag with validation
# raises exception if username is not like firstname.lastname
opts.on('-u', '--user USER', /^.+\..+$/, "server's username") do |user|
options[:user] = user
end
opts.on('-p', '--password PASSWORD', "server's password") do |password|
options[:password] = password
end
# user can enter '-s dev' and it translates to servers[dev]
opts.on('-s', '--server SERVER', servers, 'server to connect to') do |server|
options[:server] = server
end
# built in converstion to given class
# LEVEL given will be converted to Integer
opts.on('-v', '--verbosity LEVEL', Integer, 'verbosity level') do |level|
options[:verbosity] = level
end
end
op.parse!
puts options.inspect
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment