Last active
May 27, 2018 07:44
-
-
Save hoomand/c37cd72b765f2731b77f7265cf276a38 to your computer and use it in GitHub Desktop.
Ruby OptParse example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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