leejarvis / slop

Simple Lightweight Option Parsing - ✨ new contributors welcome ✨

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

No way to pass in a blank array?

jrimmer-housecallpro opened this issue · comments

If I have an array option with a default, e.g.

opts = Slop.parse do |o|
  o.array '-f', '--foo', 'Fro the bozzle', default: ['frobozzle']
end

While I can certainly replace the default array elements, I can't replace it with an empty array.

Using this code, I can pass in --foo "" and the array will be empty. What is it you're expecting in this scenario? Or are you trying something else?

I'm an idiot. I was trying to do --foo="" and it was arguing with me. That works. Thanks!

Actually, I would expect your example to work the same way as without the =, so I do think that's a bug. It works for strings, for example:

opts = Slop.parse do |o|
  o.string "-s", "--str"
  o.array "-a", "--arr", default: ["default"]
end

p opts.to_h
ruby example.rb --arr "" --str="foo"
{:str=>"foo", :arr=>[]}

But with the = it raises an error:

ruby example.rb --arr=""
Traceback (most recent call last):
	7: from example.rb:6:in `<main>'
	6: from /Users/lee/code/slop/lib/slop.rb:23:in `parse'
	5: from /Users/lee/code/slop/lib/slop/options.rb:72:in `parse'
	4: from /Users/lee/code/slop/lib/slop/parser.rb:49:in `parse'
	3: from /Users/lee/code/slop/lib/slop/parser.rb:49:in `each_with_index'
	2: from /Users/lee/code/slop/lib/slop/parser.rb:49:in `each'
	1: from /Users/lee/code/slop/lib/slop/parser.rb:59:in `block in parse'
/Users/lee/code/slop/lib/slop/parser.rb:131:in `try_process': unknown option `--arr=' (Slop::UnknownOption)

This will need to be looked into.

Actually, it doesn't work for blank strings either:

ruby example.rb --str=""  
Traceback (most recent call last):
	7: from example.rb:6:in `<main>'
	6: from /Users/lee/code/slop/lib/slop.rb:23:in `parse'
	5: from /Users/lee/code/slop/lib/slop/options.rb:72:in `parse'
	4: from /Users/lee/code/slop/lib/slop/parser.rb:49:in `parse'
	3: from /Users/lee/code/slop/lib/slop/parser.rb:49:in `each_with_index'
	2: from /Users/lee/code/slop/lib/slop/parser.rb:49:in `each'
	1: from /Users/lee/code/slop/lib/slop/parser.rb:60:in `block in parse'
/Users/lee/code/slop/lib/slop/parser.rb:132:in `try_process': unknown option `--str=' (Slop::UnknownOption)

So there's clearly a problem when parsing an array of options that includes an argument with an empty string when using the opt=arg variant.

Yay! I'm not a total buffoon!

@jrimmer-housecallpro Could you check your code against #268 and let me know how it goes?

Works like a charm. Thanks, @leejarvis !