Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby + Option parser

Tags:

ruby

I am learning option parsing in ruby by referring this and this. This is my test code:

#!/usr/bin/ruby
require "optparse"

options = {}

optparse = OptionParser.new do |opts|
  opts.banner = "Learning Option parsing in Ruby"

  opts.on("-i", "--ipaddress", "IP address of the server") do |ipaddr|
    options[:ipaddress] =  ipaddr
  end

    opts.on("-u", "--username", "username to log in") do |user|
      options[:username] = user
    end

    opts.on("-p", "--password", "password of the user") do |pass|
      options[:password] = pass
    end
end

optparse.parse!

puts "the IPaddress is #{options[:ipaddress]}" if options[:ipaddress]
puts "the username is #{options[:username]}" if options[:username]
puts "the password is #{options[:password]}" if options[:password]

My intention is to print the opton that I am passing to the script. However, it doens't print the option that I pass, instead just says true:

# ruby getops.rb  --ipaddress 1.1.1.1
the IPaddress is true
# ruby getops.rb  --username user1
the username is true
# ruby getops.rb  --password secret
the password is true

Where am I going wrong? I tried with the short options as well , but the result is same.

like image 305
slayedbylucifer Avatar asked Dec 19 '22 20:12

slayedbylucifer


1 Answers

What if you change it to:

opts.on("-i", "--ipaddress IPADDRESS", "IP address of the server") do |ipaddr|
  options[:ipaddress] =  ipaddr
end

Note the IPADDRESS in the second argument.

like image 163
zwippie Avatar answered Jan 03 '23 22:01

zwippie