slop 3.4.2 → 3.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES.md +5 -0
- data/lib/slop.rb +3 -2
- data/slop.gemspec +1 -1
- data/test/commands_test.rb +11 -123
- data/test/slop_test.rb +17 -17
- metadata +1 -1
data/CHANGES.md
CHANGED
data/lib/slop.rb
CHANGED
@@ -4,7 +4,7 @@ require 'slop/commands'
|
|
4
4
|
class Slop
|
5
5
|
include Enumerable
|
6
6
|
|
7
|
-
VERSION = '3.4.
|
7
|
+
VERSION = '3.4.3'
|
8
8
|
|
9
9
|
# The main Error class, all Exception classes inherit from this class.
|
10
10
|
class Error < StandardError; end
|
@@ -226,7 +226,8 @@ class Slop
|
|
226
226
|
end
|
227
227
|
|
228
228
|
if cmd = @commands[items[0]]
|
229
|
-
|
229
|
+
items.shift
|
230
|
+
return cmd.parse! items
|
230
231
|
end
|
231
232
|
|
232
233
|
items.each_with_index do |item, index|
|
data/slop.gemspec
CHANGED
data/test/commands_test.rb
CHANGED
@@ -3,136 +3,24 @@ require 'helper'
|
|
3
3
|
class CommandsTest < TestCase
|
4
4
|
|
5
5
|
def setup
|
6
|
-
@
|
7
|
-
on
|
8
|
-
|
9
|
-
on
|
6
|
+
@opts = Slop.new do |o|
|
7
|
+
o.on :v, :version
|
8
|
+
o.command :add do |add|
|
9
|
+
add.on :v, 'verbose mode'
|
10
10
|
end
|
11
|
-
|
12
|
-
on 'version' do
|
13
|
-
add_callback(:empty) { 'version 1' }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
@empty_commands = Slop::Commands.new do
|
18
|
-
default do
|
19
|
-
end
|
20
|
-
|
21
|
-
global do
|
22
|
-
end
|
23
|
-
|
24
|
-
on 'verbose'
|
25
11
|
end
|
26
12
|
end
|
27
13
|
|
28
|
-
test "
|
29
|
-
|
30
|
-
@
|
31
|
-
end
|
32
|
-
|
33
|
-
test "accessing Slop instances via get/[]" do
|
34
|
-
assert_kind_of Slop, @commands['new']
|
35
|
-
assert_kind_of Slop, @commands[:new]
|
36
|
-
assert_nil @commands[:unknown]
|
37
|
-
assert_equal 'Force creation', @commands[:new].fetch_option(:force).description
|
38
|
-
end
|
39
|
-
|
40
|
-
test "checking for a command presence" do
|
41
|
-
@commands.parse %w( new --force )
|
42
|
-
assert @commands.present?(:new)
|
43
|
-
refute @commands.present?(:version)
|
44
|
-
end
|
45
|
-
|
46
|
-
test "to_hash" do
|
47
|
-
assert_equal({
|
48
|
-
:new => { :force => nil, :outdir => nil },
|
49
|
-
:version => {}
|
50
|
-
}, @commands.to_hash)
|
51
|
-
end
|
52
|
-
|
53
|
-
test "raising on unknown commands with :strict => true" do
|
54
|
-
cmds = Slop::Commands.new(:strict => true)
|
55
|
-
assert_raises(Slop::InvalidCommandError) { cmds.parse %w( abc ) }
|
56
|
-
end
|
57
|
-
|
58
|
-
test "adding global options" do
|
59
|
-
cmds = Slop::Commands.new { global { on '--verbose' } }
|
60
|
-
cmds.parse %w( --verbose )
|
61
|
-
assert cmds[:global].verbose?
|
62
|
-
end
|
63
|
-
|
64
|
-
test "global options are always executed" do
|
65
|
-
@commands.global { on 'foo=' }
|
66
|
-
@commands.parse %w( new --force --foo bar )
|
67
|
-
assert_equal 'bar', @commands[:global][:foo]
|
68
|
-
end
|
69
|
-
|
70
|
-
test "default options are only executed when there's nothing else" do
|
71
|
-
@commands.default { on 'foo=' }
|
72
|
-
@commands.parse %w( new --force --foo bar )
|
73
|
-
assert_nil @commands[:default][:foo]
|
74
|
-
end
|
75
|
-
|
76
|
-
test "adding default options" do
|
77
|
-
cmds = Slop::Commands.new { default { on '--verbose' } }
|
78
|
-
cmds.parse %w( --verbose )
|
79
|
-
assert cmds[:default].verbose?
|
80
|
-
end
|
81
|
-
|
82
|
-
test "on/global and default all return newly created slop instances" do
|
83
|
-
assert_kind_of Slop, @commands.on('foo')
|
84
|
-
assert_kind_of Slop, @commands.default
|
85
|
-
assert_kind_of Slop, @commands.global
|
86
|
-
end
|
87
|
-
|
88
|
-
test "empty default/global blocks don't add their titles in the help output" do
|
89
|
-
assert_empty @empty_commands.to_s
|
90
|
-
end
|
91
|
-
|
92
|
-
test "parse does nothing when there's nothing to parse" do
|
93
|
-
assert @commands.parse []
|
94
|
-
end
|
95
|
-
|
96
|
-
test "parse returns the original array of items" do
|
97
|
-
items = %w( foo bar baz )
|
98
|
-
assert_equal items, @commands.parse(items)
|
99
|
-
|
100
|
-
items = %w( new file --force )
|
101
|
-
assert_equal items, @commands.parse(items)
|
102
|
-
end
|
103
|
-
|
104
|
-
test "parse! removes options/arguments" do
|
105
|
-
items = %w( new file --outdir foo )
|
106
|
-
@commands.parse!(items)
|
14
|
+
test "parse! removes the command AND its options" do
|
15
|
+
items = %w'add -v'
|
16
|
+
@opts.parse! items
|
107
17
|
assert_equal [], items
|
108
18
|
end
|
109
19
|
|
110
|
-
test "command
|
111
|
-
items = %w
|
112
|
-
@
|
113
|
-
assert_equal
|
114
|
-
end
|
115
|
-
|
116
|
-
test "context and return value of constructor block" do
|
117
|
-
peep = nil
|
118
|
-
ret = Slop::Commands.new { peep = self }
|
119
|
-
assert_same ret, peep
|
120
|
-
assert !equal?(peep)
|
121
|
-
|
122
|
-
peep = nil
|
123
|
-
ret = Slop::Commands.new { |a| peep = self }
|
124
|
-
assert !peep.equal?(ret)
|
125
|
-
assert_same peep, self
|
126
|
-
|
127
|
-
peep = nil
|
128
|
-
ret = Slop::Commands.new { |a, b| peep = self }
|
129
|
-
assert_same ret, peep
|
130
|
-
assert !equal?(peep)
|
131
|
-
|
132
|
-
peep = nil
|
133
|
-
ret = Slop::Commands.new { |a, *rest| peep = self }
|
134
|
-
assert_same ret, peep
|
135
|
-
assert !equal?(peep)
|
20
|
+
test "parse does not remove the command or its options" do
|
21
|
+
items = %w'add -v'
|
22
|
+
@opts.parse items
|
23
|
+
assert_equal ['add', '-v'], items
|
136
24
|
end
|
137
25
|
|
138
26
|
end
|
data/test/slop_test.rb
CHANGED
@@ -289,23 +289,23 @@ class SlopTest < TestCase
|
|
289
289
|
assert opts.foo_bar?
|
290
290
|
end
|
291
291
|
|
292
|
-
test "parsing an optspec and building options" do
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
end
|
292
|
+
# test "parsing an optspec and building options" do
|
293
|
+
# optspec = <<-SPEC
|
294
|
+
# ruby foo.rb [options]
|
295
|
+
# --
|
296
|
+
# v,verbose enable verbose mode
|
297
|
+
# q,quiet enable quiet mode
|
298
|
+
# n,name= set your name
|
299
|
+
# p,pass=? set your password
|
300
|
+
# SPEC
|
301
|
+
# opts = Slop.optspec(optspec.gsub(/^\s+/, ''))
|
302
|
+
# opts.parse %w[ --verbose --name Lee ]
|
303
|
+
|
304
|
+
# assert_equal 'Lee', opts[:name]
|
305
|
+
# assert opts.present?(:verbose)
|
306
|
+
# assert_equal 'enable quiet mode', opts.fetch_option(:quiet).description
|
307
|
+
# assert opts.fetch_option(:pass).accepts_optional_argument?
|
308
|
+
# end
|
309
309
|
|
310
310
|
test "ensure negative integers are not processed as options" do
|
311
311
|
items = %w(-1)
|