Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No way to pass in a blank array? #266

Closed
jrimmer-housecallpro opened this issue May 19, 2021 · 7 comments · Fixed by #267
Closed

No way to pass in a blank array? #266

jrimmer-housecallpro opened this issue May 19, 2021 · 7 comments · Fixed by #267

Comments

@jrimmer-housecallpro
Copy link

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.

@leejarvis
Copy link
Owner

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?

@jrimmer-housecallpro
Copy link
Author

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

@leejarvis
Copy link
Owner

leejarvis commented May 21, 2021

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.

@leejarvis leejarvis reopened this May 21, 2021
@leejarvis
Copy link
Owner

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.

@jrimmer-housecallpro
Copy link
Author

Yay! I'm not a total buffoon!

leejarvis added a commit that referenced this issue May 27, 2021
This is especially useful when your default option value is a non-blank
value and you want users to be able to overwrite it with a blank value

Closes #266
@leejarvis
Copy link
Owner

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

@jrimmer-housecallpro
Copy link
Author

Works like a charm. Thanks, @leejarvis !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants