Skip to content

Commit b76f2c0

Browse files
authored
Merge pull request #679 from deivid-rodriguez/fix_skip_args_issue
Fix `--skip-foo` switches when there's a trailing non-switch
2 parents cf2df70 + bdb43eb commit b76f2c0

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

lib/thor/parser/options.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,18 +196,21 @@ def parsing_options?
196196
# Parse boolean values which can be given as --foo=true, --foo or --no-foo.
197197
#
198198
def parse_boolean(switch)
199-
if current_is_value?
199+
no_or_skip = no_or_skip?(switch)
200+
if no_or_skip
201+
@switches.key?(switch) || !no_or_skip
202+
elsif current_is_value?
200203
if ["true", "TRUE", "t", "T", true].include?(peek)
201204
shift
202205
true
203206
elsif ["false", "FALSE", "f", "F", false].include?(peek)
204207
shift
205208
false
206209
else
207-
!no_or_skip?(switch)
210+
!no_or_skip
208211
end
209212
else
210-
@switches.key?(switch) || !no_or_skip?(switch)
213+
@switches.key?(switch) || !no_or_skip
211214
end
212215
end
213216

spec/parser/options_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,10 @@ def remaining
337337
expect(parse("--skip-foo")["foo"]).to eq(false)
338338
end
339339

340+
it "accepts --[skip-]opt variant, setting false for value, even if there's a trailing non-switch" do
341+
expect(parse("--skip-foo", "asdf")["foo"]).to eq(false)
342+
end
343+
340344
it "will prefer 'no-opt' variant over inverting 'opt' if explicitly set" do
341345
create "--no-foo" => true
342346
expect(parse("--no-foo")["no-foo"]).to eq(true)
@@ -347,6 +351,11 @@ def remaining
347351
expect(parse("--skip-foo")["skip-foo"]).to eq(true)
348352
end
349353

354+
it "will prefer 'skip-opt' variant over inverting 'opt' if explicitly set, even if there's a trailing non-switch" do
355+
create "--skip-foo" => true
356+
expect(parse("--skip-foo", "asdf")["skip-foo"]).to eq(true)
357+
end
358+
350359
it "accepts inputs in the human name format" do
351360
create :foo_bar => :boolean
352361
expect(parse("--foo-bar")["foo_bar"]).to eq(true)

0 commit comments

Comments
 (0)