OptionParser - no short options or incomplete options

B

Bryan Richardson

Hello all,

Is it possible to force only complete, long options to be used in
OptionParser? I'm wanting to force users to enter the entire option for
certain destructive actions...

I've tried only including a '--long_option' as one of the options, but
if I use '-l' or even '--lon' as the option it still executes the code
specified for '--long_option'.

Any and all help is appreciated!!!
 
7

7stud --

Bryan said:
Hello all,

Is it possible to force only complete, long options to be used in
OptionParser? I'm wanting to force users to enter the entire option for
certain destructive actions...

I've tried only including a '--long_option' as one of the options, but
if I use '-l' or even '--lon' as the option it still executes the code
specified for '--long_option'.

Any and all help is appreciated!!!


How about:


require 'optparse'

val_I_will_use_for_destructive_actions = nil

opts = OptionParser.new do |opts|
opts.on('--long_option') do |val|
val_I_will_use_for_destructive_actions = '--long_option'
end
end

opts.parse!

if val_I_will_use_for_destructive_actions
puts 'destroy stuff'
end
 
B

Bryan Richardson

[Note: parts of this message were removed to make it a legal post.]

Thanks for responding 7stud. However, I'm not clear on how this will solve
my problem. By typing -l, I'll still execute this option. I've also come
across the case where if I have an option for --migrate VERSION (required
input) and I use the option -m, I'll get an error because the version was
not included. However, if I use -mig, I get no error and a version value of
nil is passed...

Please help!
 
7

7stud --

Bryan said:
Thanks for responding 7stud. However, I'm not clear on how this will
solve
my problem. By typing -l, I'll still execute this option.

You've given no reason why forcing your users to type more than they
have to is required.
 
B

Bryan Richardson

[Note: parts of this message were removed to make it a legal post.]

I'd just hate for someone to fat-finger a simple option and end up deleting
an entire database worth of data. Am I overlooking something? Also, what
if I wanted -l to do one thing, and --long_option to do something
different? I'm not trying to get on anyone's nerves here, I'm just
wondering if forcing long options is doable...
 
7

7stud --

Bryan said:
I'd just hate for someone to fat-finger a simple option and end up
deleting
an entire database worth of data. Am I overlooking something? Also,
what
if I wanted -l to do one thing, and --long_option to do something
different? I'm not trying to get on anyone's nerves here, I'm just
wondering if forcing long options is doable...

Personally, I think all the optparse modules in any language are more
trouble than they are worth. Invariably, you can examine ARGV yourself
and come up with a solution quicker than trying to figure out how the
overly complex optparse modules work.

In particular, the ruby optparse module appears to have a design flaw:
it doesn't send the option that was actually entered to the on() method.


1) This seems to work:

require 'optparse'

opts = OptionParser.new do |opts|
opts.on('--long_option') do |val|
#destroy stuff
puts "in first on"
end

opts.on('--long_optio') do |val|
#do nothing
puts "in 2nd on"
end
end

opts.parse!


2) Or, you can always do this:

require 'optparse'

puts 'start:'
puts ARGV

prohibited = ['-l', '--l']

ARGV.delete_if do |str_in_argv|
prohibited.include?(str_in_argv)
end

puts 'end:'
puts ARGV

opts = OptionParser.new do |opts|
opts.on('--long_option') do |val|
#destroy stuff
puts "This won't output for -l or --l short form."
end
end

opts.parse!



Also, what
if I wanted -l to do one thing, and --long_option to
do something different?



require 'optparse'

opts = OptionParser.new do |opts|
opts.on('--long_option') do |val|
puts 'in first on'
end

opts.on('-l') do |val|
puts 'in 2nd on'
end
end

opts.parse!
 
B

Bryan Richardson

[Note: parts of this message were removed to make it a legal post.]

Thanks again 7stud. Your suggestions have answered my ultimate question,
which is "is it possible to have OptionParser only parse on fully matching
options." The answer obviously seems to be "no."

I'll be implementing your 2nd suggestion.

--
Bryan

Bryan said:
I'd just hate for someone to fat-finger a simple option and end up
deleting
an entire database worth of data. Am I overlooking something? Also,
what
if I wanted -l to do one thing, and --long_option to do something
different? I'm not trying to get on anyone's nerves here, I'm just
wondering if forcing long options is doable...

Personally, I think all the optparse modules in any language are more
trouble than they are worth. Invariably, you can examine ARGV yourself
and come up with a solution quicker than trying to figure out how the
overly complex optparse modules work.

In particular, the ruby optparse module appears to have a design flaw:
it doesn't send the option that was actually entered to the on() method.


1) This seems to work:

require 'optparse'

opts = OptionParser.new do |opts|
opts.on('--long_option') do |val|
#destroy stuff
puts "in first on"
end

opts.on('--long_optio') do |val|
#do nothing
puts "in 2nd on"
end
end

opts.parse!


2) Or, you can always do this:

require 'optparse'

puts 'start:'
puts ARGV

prohibited = ['-l', '--l']

ARGV.delete_if do |str_in_argv|
prohibited.include?(str_in_argv)
end

puts 'end:'
puts ARGV

opts = OptionParser.new do |opts|
opts.on('--long_option') do |val|
#destroy stuff
puts "This won't output for -l or --l short form."
end
end

opts.parse!



Also, what
if I wanted -l to do one thing, and --long_option to
do something different?



require 'optparse'

opts = OptionParser.new do |opts|
opts.on('--long_option') do |val|
puts 'in first on'
end

opts.on('-l') do |val|
puts 'in 2nd on'
end
end

opts.parse!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top