ejt_command_line 0.0.3 → 0.0.4

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzFiZTljMTMyMDIwOWU5MTUxN2UwOTc2OTNkNGQzN2ZlMTE3ZTc1OQ==
4
+ ZTM3ZWUyYmQzMjg2YzRlMjI0MmExY2VhZjUzNGQ5ZTRjNDVkNGQ0Yg==
5
5
  data.tar.gz: !binary |-
6
- ZjU1MmE5YjczNmViMmUwNDEyN2ViNmFmMDNhOWIyNjllY2EwMTMzYw==
6
+ Y2M5OGYyY2YwZjRkNDA2NTVhN2U0N2EyNjMxMjA2ODYzYmFhMDBiMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTA1YTcwYjQ4YTE5YWQzNTRkMzcxMGVmZDk1NTA5NDUyMmQ1YTJhZWU1YTIz
10
- YjQ3ZGMwNmNmODY2OWYzNGYyNTUyMDllZjg2ZDIyZjNhNDZlNDAwNGM1OWZk
11
- OTRhYzRmZjBjNWViNDRmNDllYWU1ZDhmYzZjYTY1NTgwMjFmZjY=
9
+ MmFjNDQ5N2E2NThkMmNjODAxMGY3YmFjYjA1NGQyYmRhYWFkZTI2NTA5MmNk
10
+ YzIxYTRjOWEyNTZkYTdlMDc2YjVkNTE4YzBmNTk3ZTk2NmNlMDc2ZDhlY2Zi
11
+ MjM4NmQ2YmViZjllOTdmZWQwMDMxOWZmNzY0NTIwM2E3OWNkZDc=
12
12
  data.tar.gz: !binary |-
13
- MzIyM2RkNmQwNTk3N2QxNWEwZGY2ZGQ1YTY2MGY3MDlhZGQxMGU0NjcxYTlj
14
- ZjQyZjEzMjc0MzZiNmRiZDk3NjdlNzJiYmZiZGFhYTVhNTdiYzZlNTM1MTZm
15
- Y2NkOTk4Y2ZjYzc4ZmEzODJhZDQxNzNhOTdmMjBmYjA0OTVjNjE=
13
+ ZWExNWYzYjU2ZDM2NjFjYzVmN2VlYmFjNTM3YTc5MmFkOGIxNzJiZWFmMzVk
14
+ MWRhMDIwNGFmN2NiYjJjZTMyZTliZDBjMjFhNTVhNjI3OWQxNTYyYTZiZGFl
15
+ ZmZkODVmZjJiYzQ3MjZiZGJiYjhjNjhhZDFjNTI0ZjcwMmYyMzA=
@@ -25,14 +25,13 @@ module CommandLine
25
25
 
26
26
  #----------------------------------------------------------------
27
27
 
28
- ValueType = Struct.new(:parser, :multi)
29
-
30
28
  class Switch
31
- attr_reader :flags, :value_type
29
+ attr_reader :flags, :parser, :multi
32
30
 
33
- def initialize(flags, value_type = nil)
31
+ def initialize(flags, parser = nil, multi = false)
34
32
  @flags = flags
35
- @value_type = value_type
33
+ @parser = parser
34
+ @multi = multi
36
35
  end
37
36
 
38
37
  def has_flag?(flag)
@@ -125,15 +124,7 @@ module CommandLine
125
124
  raise ConfigureError, "duplicate value type '#{sym}'"
126
125
  end
127
126
 
128
- @value_types[sym] = ValueType.new(parser, false)
129
- end
130
-
131
- def multivalue_type(sym, &parser)
132
- if @value_types.member?(sym)
133
- raise ConfigureError, "duplicate value type '#{sym}'"
134
- end
135
-
136
- @value_types[sym] = ValueType.new(parser, true)
127
+ @value_types[sym] = parser
137
128
  end
138
129
 
139
130
  def simple_switch(sym, *flags)
@@ -141,7 +132,11 @@ module CommandLine
141
132
  end
142
133
 
143
134
  def value_switch(sym, value_sym, *flags)
144
- @switches[sym] = Switch.new(flags, get_value_type(value_sym))
135
+ @switches[sym] = Switch.new(flags, get_value_parser(value_sym))
136
+ end
137
+
138
+ def multivalue_switch(sym, value_sym, *flags)
139
+ @switches[sym] = Switch.new(flags, get_value_parser(value_sym), true)
145
140
  end
146
141
 
147
142
  def global(&block)
@@ -184,23 +179,19 @@ module CommandLine
184
179
  end
185
180
 
186
181
  private
187
- def parse_value(arg, s, args, old_value)
188
- if s.value_type
182
+ def parse_value(arg, s, args, old_value = nil)
183
+ if s.parser
189
184
  if args.size == 0
190
185
  raise ParseError, "no value specified for switch '#{arg}'"
191
186
  end
192
187
 
193
188
  value = args.shift
194
189
  begin
195
- v = s.value_type.parser.call(value)
196
- if s.value_type.multi
197
- if old_value.nil?
198
- [v]
199
- else
200
- old_value << v
201
- end
202
- else
190
+ v = s.parser.call(value)
191
+ if old_value.nil?
203
192
  v
193
+ else
194
+ old_value << v
204
195
  end
205
196
  rescue => e
206
197
  raise ParseError, "couldn't parse value '#{arg}=#{value}'\n#{e}"
@@ -222,7 +213,12 @@ module CommandLine
222
213
 
223
214
  if arg =~ /^-/
224
215
  sym, s = find_switch(valid_switches, arg)
225
- opts[sym] = parse_value(arg, s, args, opts[sym])
216
+
217
+ if s.multi
218
+ opts[sym] = parse_value(arg, s, args, opts[sym] || [])
219
+ else
220
+ opts[sym] = parse_value(arg, s, args)
221
+ end
226
222
 
227
223
  else
228
224
  cmd = arg.intern
@@ -261,9 +257,12 @@ module CommandLine
261
257
  end
262
258
  end
263
259
 
264
- def get_value_type(sym)
265
- raise ConfigureError, "unknown value type '#{sym}'" unless @value_types.member?(sym)
266
- @value_types[sym]
260
+ def get_value_parser(sym)
261
+ if @value_types.member?(sym)
262
+ @value_types[sym]
263
+ else
264
+ raise ConfigureError, "unknown value type '#{sym}'"
265
+ end
267
266
  end
268
267
 
269
268
  def bracket_(release)
@@ -1,3 +1,3 @@
1
1
  module EjtCommandLine
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -54,32 +54,6 @@ describe "Parser" do
54
54
  end
55
55
  end
56
56
 
57
- describe "multi value types" do
58
- it "should allow you to register new multi value types" do
59
- @clh.configure do
60
- multivalue_type :string do |str|
61
- str
62
- end
63
-
64
- multivalue_type :int do |str|
65
- str.to_i
66
- end
67
- end
68
- end
69
-
70
- it "should fail it you try and define a duplicate value type" do
71
- @clh.value_type :string do |str|
72
- str
73
- end
74
-
75
- expect do
76
- @clh.value_type :string do |str|
77
- str
78
- end
79
- end.to raise_error(ConfigureError, /string/)
80
- end
81
- end
82
-
83
57
  describe "switches are defined separately from commands" do
84
58
  it "should let you define binary switch" do
85
59
  help_switch
@@ -98,6 +72,16 @@ describe "Parser" do
98
72
  value_switch :resize_to, :volume_size, '--resize-to'
99
73
  end
100
74
  end
75
+
76
+ it "should let you define an option that can occur multiple times" do
77
+ @clh.configure do
78
+ value_type :filter do |str|
79
+ str
80
+ end
81
+
82
+ multivalue_switch :test_class, :filter, '--test-class'
83
+ end
84
+ end
101
85
  end
102
86
 
103
87
  describe "global switches" do
@@ -213,23 +197,24 @@ describe "Parser" do
213
197
  @clh.parse(handler, 'one', '-c', '17', 'two')
214
198
  end
215
199
 
216
- it "should handle multivalued switches" do
200
+ it "should handle multivalue switches" do
217
201
  handler = double()
218
202
 
219
203
  @clh.configure do
220
- multivalue_type :ints do |str|
204
+ value_type :int do |str|
221
205
  str.to_i
222
206
  end
223
207
 
224
- value_switch :counts, :ints, '--count'
208
+ multivalue_switch :port, :int, '--port', '-p'
209
+
225
210
  global do
226
- switches :counts
211
+ switches :port
227
212
  end
228
213
  end
229
214
 
230
215
  handler.should_receive(:global_command).
231
- with({:counts => [1, 3, 5]}, ['one', 'two'])
232
- @clh.parse(handler, 'one', '--count', '1', 'two', '--count', '3', '--count', '5')
216
+ with({:port => [8080, 8081]}, ['one', 'two'])
217
+ @clh.parse(handler, *%w[-p 8080 one -p 8081 two])
233
218
  end
234
219
 
235
220
  it "should raise an ArgumentError if no value is given for a valued switch" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ejt_command_line
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Thornber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-13 00:00:00.000000000 Z
11
+ date: 2014-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler