choice 0.1.3 → 0.1.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.
data/README CHANGED
@@ -68,13 +68,15 @@ programs utilizing the library have been placed. Here's a snippet:
68
68
  end
69
69
  end
70
70
 
71
- puts 'port: ' + Choice.choices[:port]
71
+ puts 'port: ' + Choice[:port]
72
72
 
73
73
  Notice the last line. For free, you will be given a <tt>Choice.choices</tt>
74
- hash which contain, at runtime, the options found and their values.
74
+ hash which contain, at runtime, the options found and their values.
75
+
76
+ <tt>Choice[:key]</tt> is a shortcut for <tt>Choice.choices[:key]</tt>.
75
77
 
76
78
  Because we gave option <tt>:port</tt> a default of 21,
77
- <tt>Choice.choices[:port]</tt> should be 21 if we run ftpd.rb with no options.
79
+ <tt>Choice[:port]</tt> should be 21 if we run ftpd.rb with no options.
78
80
  Let's see.
79
81
 
80
82
  $ ruby ftpd.rb
@@ -89,7 +91,7 @@ Alright. And, of course, there is the hard way of doing things.
89
91
 
90
92
  $ ruby ftpd.rb --port=2100
91
93
  port: 2100
92
-
94
+
93
95
  That <tt>:version</tt> option looks pretty interesting, huh? I wonder what it
94
96
  does...
95
97
 
@@ -36,26 +36,36 @@ module Choice
36
36
  @@options << [name.to_s, option]
37
37
  end
38
38
  end
39
+
40
+ # Return an array representing the rest of the command line arguments
41
+ def rest
42
+ @@rest
43
+ end
39
44
 
40
45
  # Returns a hash representing options passed in via the command line.
41
46
  def choices
42
47
  @@choices
43
48
  end
44
49
 
50
+ # Shortcut access to Choice.choices
51
+ def [](choice)
52
+ choices[choice]
53
+ end
54
+
45
55
  # Defines an option.
46
56
  def option(opt, options = {}, &block)
47
57
  # Notice: options is maintained as an array of arrays, the first element
48
58
  # the option name and the second the option object.
49
59
  @@options << [opt.to_s, Option.new(options, &block)]
50
60
  end
51
-
61
+
52
62
  # Separators are text displayed by --help within the options block.
53
63
  def separator(str)
54
- # We store separators as simple strings in the options array to maintain
64
+ # We store separators as simple strings in the options array to maintain
55
65
  # order. They are ignored by the parser.
56
66
  @@options << str
57
67
  end
58
-
68
+
59
69
  # Define the banner, header, footer methods. All are just getters/setters
60
70
  # of class variables.
61
71
  %w[banner header footer].each do |method|
@@ -80,7 +90,8 @@ module Choice
80
90
  begin
81
91
  # Delegate parsing to our parser class, passing it our defined
82
92
  # options and the passed arguments.
83
- @@choices = LazyHash.new(Parser.parse(@@options, @@args))
93
+ @@choices, @@rest = Parser.parse(@@options, @@args)
94
+ @@choices = LazyHash.new(@@choices)
84
95
  rescue Choice::Parser::ParseError
85
96
  # If we get an expected exception, show the help file.
86
97
  help
@@ -18,6 +18,9 @@ module Choice
18
18
  # Return empty hash if the parsing adventure would be fruitless.
19
19
  return {} if options.nil? || !options || args.nil? || !args.is_a?(Array)
20
20
 
21
+ # Operate on a copy of the inputs
22
+ args = args.dup
23
+
21
24
  # If we are passed an array, make the best of it by converting it
22
25
  # to a hash.
23
26
  options = options.inject({}) do |hash, value|
@@ -83,53 +86,53 @@ module Choice
83
86
  # is definitely required.
84
87
  required[name] = true if obj['valid']
85
88
  end
86
-
89
+
90
+ rest = []
91
+
87
92
  # Go through the arguments and try to figure out whom they belong to
88
93
  # at this point.
89
- args.each_with_index do |arg, i|
94
+ while arg = args.shift
90
95
  if hashes['shorts'].value?(arg)
91
96
  # Set the value to the next element in the args array since
92
97
  # this is a short.
93
- value = args[i+1]
94
98
 
95
- # If the next element doesn't exist or starts with a -, make this
96
- # value true.
97
- value = true if !value || value =~ /^-/
99
+ # If the next argument isn't a value, set this value to true
100
+ if args.empty? || args.first.match(/^-/)
101
+ value = true
102
+ else
103
+ value = args.shift
104
+ end
98
105
 
99
106
  # Add this value to the choices hash with the key of the option's
100
107
  # name. If we expect an array, tack this argument on.
101
108
  name = hashes['shorts'].index(arg)
102
109
  if arrayed[name]
103
110
  choices[name] ||= []
104
- choices[name] += arrayize_arguments(name, args[i+1..-1])
111
+ choices[name] << value unless value.nil?
112
+ choices[name] += arrayize_arguments(args)
105
113
  else
106
114
  choices[name] = value
107
115
  end
108
116
 
109
- elsif /^(--[^=]+)=?/ =~ arg && longs.value?($1)
117
+ elsif (m = arg.match(/^(--[^=]+)=?/)) && longs.value?(m[1])
110
118
  # The joke here is we always accept both --long=VALUE and --long VALUE.
111
119
 
112
120
  # Grab values from --long=VALUE format
113
- if arg =~ /=/ && longs.value?((longed = arg.split('=')).first)
114
- name = longs.index(longed.shift)
115
- value = longed * '='
116
- # For the arrayed options.
117
- potential_args = args[i+1..-1]
118
- else
121
+ name, value = arg.split('=', 2)
122
+ name = longs.index(name)
123
+
124
+ if value.nil? && args.first !~ /^-/
119
125
  # Grab value otherwise if not in --long=VALUE format. Assume --long VALUE.
120
- name = longs.index(arg)
121
126
  # Value is nil if we don't have a = and the next argument is no good
122
- value = args[i+1] =~ /^-/ ? nil : args[i+1]
123
- # For the arrayed options.
124
- potential_args = args[i+2..-1]
127
+ value = args.shift
125
128
  end
126
129
 
127
130
  # If we expect an array, tack this argument on.
128
- if arrayed[name] && !value.nil?
131
+ if arrayed[name]
129
132
  # If this is arrayed and the value isn't nil, set it.
130
133
  choices[name] ||= []
131
- choices[name] << value
132
- choices[name] += arrayize_arguments(name, potential_args)
134
+ choices[name] << value unless value.nil?
135
+ choices[name] += arrayize_arguments(args)
133
136
  else
134
137
  # If we set the value to nil, that means nothing was set and we
135
138
  # need to set the value to true. We'll find out later if that's
@@ -139,7 +142,11 @@ module Choice
139
142
 
140
143
  else
141
144
  # If we're here, we have no idea what the passed argument is. Die.
142
- raise UnknownOption if arg =~ /^-/
145
+ if arg =~ /^-/
146
+ raise UnknownOption
147
+ else
148
+ rest << arg
149
+ end
143
150
  end
144
151
  end
145
152
 
@@ -159,10 +166,10 @@ module Choice
159
166
 
160
167
  # Make sure the argument is valid
161
168
  raise InvalidArgument unless value.to_a.all? { |v| hashes['valids'][name].include?(v) } if hashes['valids'][name]
162
-
169
+
163
170
  # Cast the argument using the method defined in the constant hash.
164
171
  value = value.send(CAST_METHODS[hashes['casts'][name]]) if hashes['casts'].include?(name)
165
-
172
+
166
173
  # Run the value through a filter and re-set it with the return.
167
174
  value = hashes['filters'][name].call(value) if hashes['filters'].include?(name)
168
175
 
@@ -186,19 +193,18 @@ module Choice
186
193
  choices[name] = value unless choices[name]
187
194
  end
188
195
 
189
- # Return the choices hash.
190
- choices
196
+ # Return the choices hash and the rest of the args
197
+ [ choices, rest ]
191
198
  end
192
199
 
193
200
  private
194
201
  # Turns trailing command line arguments into an array for an arrayed value
195
- def arrayize_arguments(name, args)
202
+ def arrayize_arguments(args)
196
203
  # Go through trailing arguments and suck them in if they don't seem
197
204
  # to have an owner.
198
205
  array = []
199
- potential_args = args.dup
200
- until (arg = potential_args.shift) =~ /^-/ || arg.nil?
201
- array << arg
206
+ until args.empty? || args.first.match(/^-/)
207
+ array << args.shift
202
208
  end
203
209
  array
204
210
  end
@@ -2,7 +2,7 @@ module Choice
2
2
  module Version #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 3
5
+ TINY = 4
6
6
  STRING = [MAJOR, MINOR, TINY] * '.'
7
7
  end
8
8
  end
@@ -32,27 +32,30 @@ class TestChoice < Test::Unit::TestCase
32
32
  footer ""
33
33
  footer "--help This message"
34
34
  end
35
-
35
+
36
36
  band = 'LedZeppelin'
37
37
  animal = 'Reindeer'
38
-
38
+
39
39
  args = ['-b', band, "--animal=#{animal}"]
40
40
  Choice.args = args
41
-
41
+
42
42
  assert_equal band, Choice.choices['band']
43
43
  assert_equal animal, Choice.choices[:animal]
44
44
  assert_equal ["Tell me about yourself?", ""], Choice.header
45
45
  assert_equal ["", "--help This message"], Choice.footer
46
+
47
+ assert_equal Choice.choices['band'], Choice['band']
48
+ assert_equal Choice.choices[:animal], Choice[:animal]
46
49
  end
47
-
50
+
48
51
  def test_failed_parse
49
52
  assert Hash.new, Choice.parse
50
53
  end
51
-
54
+
52
55
  HELP_STRING = ''
53
56
  def test_help
54
57
  Choice.output_to(HELP_STRING)
55
-
58
+
56
59
  Choice.options do
57
60
  banner "Usage: choice [-mu]"
58
61
  header ""
@@ -7,7 +7,7 @@ class TestParser < Test::Unit::TestCase
7
7
  def setup
8
8
  @options = {}
9
9
  end
10
-
10
+
11
11
  def test_parse_options
12
12
  @options['band'] = Choice::Option.new do
13
13
  short '-b'
@@ -20,36 +20,36 @@ class TestParser < Test::Unit::TestCase
20
20
  long '--animal=ANIMAL'
21
21
  cast String
22
22
  desc 'Your favorite animal.'
23
- end
23
+ end
24
24
  band = 'Led Zeppelin'
25
25
  animal = 'Reindeer'
26
-
26
+
27
27
  args = ['-b', band, "--animal=#{animal}"]
28
-
29
- choices = Choice::Parser.parse(@options, args)
30
-
28
+
29
+ choices, rest = Choice::Parser.parse(@options, args)
30
+
31
31
  assert_equal band, choices['band']
32
32
  assert_equal animal, choices['animal']
33
33
  end
34
-
34
+
35
35
  def test_parse_no_options
36
36
  assert_equal Hash.new, Choice::Parser.parse(nil, nil)
37
37
  end
38
-
38
+
39
39
  def test_parse_default
40
40
  @options['soda'] = Choice::Option.new do
41
41
  short '-s'
42
42
  long '--soda=SODA'
43
43
  default 'PibbJr'
44
44
  end
45
-
45
+
46
46
  args = []
47
-
48
- choices = Choice::Parser.parse(@options, args)
49
-
47
+
48
+ choices, rest = Choice::Parser.parse(@options, args)
49
+
50
50
  assert_equal 'PibbJr', choices['soda']
51
51
  end
52
-
52
+
53
53
  def test_parse_options_with_filters
54
54
  @options['host'] = Choice::Option.new do
55
55
  short '-h'
@@ -57,27 +57,27 @@ class TestParser < Test::Unit::TestCase
57
57
  opt.gsub!(/[^\w]/, '')
58
58
  opt = opt.sub(/k/, 'c')
59
59
  end
60
- end
60
+ end
61
61
  host = 'de.fun.kt'
62
62
  args = ['-h', host]
63
- choices = Choice::Parser.parse(@options, args)
64
-
63
+ choices, rest = Choice::Parser.parse(@options, args)
64
+
65
65
  assert_equal 'defunct', choices['host']
66
- end
67
-
66
+ end
67
+
68
68
  def test_casting
69
69
  @options['port'] = Choice::Option.new do
70
70
  short '-p'
71
71
  cast Integer
72
72
  end
73
-
73
+
74
74
  port = '3000'
75
75
  args = ['-p', port]
76
- choices = Choice::Parser.parse(@options, args)
77
-
76
+ choices, rest = Choice::Parser.parse(@options, args)
77
+
78
78
  assert_equal port.to_i, choices['port']
79
79
  end
80
-
80
+
81
81
  def test_text_required
82
82
  @options['name'] = Choice::Option.new do
83
83
  short '-n'
@@ -88,29 +88,29 @@ class TestParser < Test::Unit::TestCase
88
88
  long 'age[=AGE]'
89
89
  cast Integer
90
90
  end
91
-
91
+
92
92
  args = ['-n', '-a', '21']
93
-
93
+
94
94
  assert_raise(Choice::Parser::ArgumentRequired) do
95
- choices = Choice::Parser.parse(@options, args)
95
+ choices, rest = Choice::Parser.parse(@options, args)
96
96
  end
97
97
  end
98
-
98
+
99
99
  def test_text_optional
100
100
  @options['color'] = Choice::Option.new do
101
101
  short '-c'
102
102
  long '--color[=COLOR]'
103
103
  end
104
-
104
+
105
105
  args = ['-c']
106
- choices = Choice::Parser.parse(@options, args)
107
-
106
+ choices, rest = Choice::Parser.parse(@options, args)
107
+
108
108
  assert choices['color']
109
-
109
+
110
110
  color = 'ladyblue'
111
111
  args = ['-c', color]
112
- choices = Choice::Parser.parse(@options, args)
113
-
112
+ choices, rest = Choice::Parser.parse(@options, args)
113
+
114
114
  assert_equal color, choices['color']
115
115
  end
116
116
 
@@ -119,38 +119,38 @@ class TestParser < Test::Unit::TestCase
119
119
  short '-c'
120
120
  long '--color=[COLOR]'
121
121
  end
122
-
122
+
123
123
  args = ['-c']
124
- choices = Choice::Parser.parse(@options, args)
125
-
124
+ choices, rest = Choice::Parser.parse(@options, args)
125
+
126
126
  assert choices['color']
127
-
127
+
128
128
  color = 'ladyblue'
129
129
  args = ['-c', color]
130
- choices = Choice::Parser.parse(@options, args)
131
-
130
+ choices, rest = Choice::Parser.parse(@options, args)
131
+
132
132
  assert_equal color, choices['color']
133
133
  end
134
-
134
+
135
135
  def test_ignore_separator
136
136
  options = []
137
137
  options << ['keyboard', Choice::Option.new do
138
138
  short '-k'
139
139
  long '--keyboard=BOARD'
140
140
  end]
141
-
141
+
142
142
  options << ['mouse', Choice::Option.new do
143
143
  short '-m'
144
144
  long '--mouse=MOUSE'
145
145
  end]
146
-
146
+
147
147
  args = ['-m', 'onebutton']
148
- choices = Choice::Parser.parse([options.first, '----', options.last], args)
149
-
148
+ choices, rest = Choice::Parser.parse([options.first, '----', options.last], args)
149
+
150
150
  assert choices['mouse']
151
151
  assert_equal 1, choices.size
152
152
  end
153
-
153
+
154
154
  def test_long_as_switch
155
155
  @options['chunky'] = Choice::Option.new do
156
156
  short '-b'
@@ -158,11 +158,11 @@ class TestParser < Test::Unit::TestCase
158
158
  end
159
159
 
160
160
  args = ['--bacon']
161
- choices = Choice::Parser.parse(@options, args)
162
-
161
+ choices, rest = Choice::Parser.parse(@options, args)
162
+
163
163
  assert choices['chunky']
164
164
  end
165
-
165
+
166
166
  def test_validate_regexp
167
167
  @options['email'] = Choice::Option.new do
168
168
  short '-e'
@@ -171,20 +171,20 @@ class TestParser < Test::Unit::TestCase
171
171
  validate /^[a-z0-9_.-]+@[a-z0-9_.-]+\.[a-z]{2,4}$/i
172
172
  end
173
173
 
174
- email_bad = 'this will@neverwork'
174
+ email_bad = 'this will@neverwork'
175
175
  email_good = 'chris@ozmm.org'
176
-
176
+
177
177
  args = ['-e', email_bad]
178
178
  assert_raise(Choice::Parser::ArgumentValidationFails) do
179
- choices = Choice::Parser.parse(@options, args)
179
+ choices, rest = Choice::Parser.parse(@options, args)
180
180
  end
181
181
 
182
182
  args = ['-e', email_good]
183
- choices = Choice::Parser.parse(@options, args)
184
-
183
+ choices, rest = Choice::Parser.parse(@options, args)
184
+
185
185
  assert_equal email_good, choices['email']
186
186
  end
187
-
187
+
188
188
  def test_validate_block
189
189
  @options['file'] = Choice::Option.new do
190
190
  short '-f'
@@ -197,15 +197,15 @@ class TestParser < Test::Unit::TestCase
197
197
 
198
198
  file_bad = 'not_a_file.rb'
199
199
  file_good = __FILE__
200
-
200
+
201
201
  args = ['-f', file_bad]
202
202
  assert_raise(Choice::Parser::ArgumentValidationFails) do
203
- choices = Choice::Parser.parse(@options, args)
203
+ choices, rest = Choice::Parser.parse(@options, args)
204
204
  end
205
205
 
206
206
  args = ['-f', file_good]
207
- choices = Choice::Parser.parse(@options, args)
208
-
207
+ choices, rest = Choice::Parser.parse(@options, args)
208
+
209
209
  assert_equal file_good, choices['file']
210
210
  end
211
211
 
@@ -215,10 +215,10 @@ class TestParser < Test::Unit::TestCase
215
215
  long '--cd=CD'
216
216
  desc 'A CD you like.'
217
217
  end
218
-
218
+
219
219
  args = ['-c', 'BestOfYanni', '--grace']
220
220
  assert_raise(Choice::Parser::UnknownOption) do
221
- choices = Choice::Parser.parse(@options, args)
221
+ choices, rest = Choice::Parser.parse(@options, args)
222
222
  end
223
223
  end
224
224
 
@@ -232,15 +232,15 @@ class TestParser < Test::Unit::TestCase
232
232
 
233
233
  suit_good = 'club'
234
234
  suit_bad = 'joker'
235
-
235
+
236
236
  args = ['-s', suit_bad]
237
237
  assert_raise(Choice::Parser::InvalidArgument) do
238
- choices = Choice::Parser.parse(@options, args)
238
+ choices, rest = Choice::Parser.parse(@options, args)
239
239
  end
240
240
 
241
241
  args = ['-s', suit_good]
242
- choices = Choice::Parser.parse(@options, args)
243
-
242
+ choices, rest = Choice::Parser.parse(@options, args)
243
+
244
244
  assert_equal suit_good, choices['suit']
245
245
  end
246
246
 
@@ -251,10 +251,10 @@ class TestParser < Test::Unit::TestCase
251
251
  valid %w[jeans slacks trunks boxers]
252
252
  desc "Your preferred type of pants."
253
253
  end
254
-
254
+
255
255
  args = ['-p']
256
256
  assert_raise(Choice::Parser::ArgumentRequiredWithValid) do
257
- choices = Choice::Parser.parse(@options, args)
257
+ choices, rest = Choice::Parser.parse(@options, args)
258
258
  end
259
259
  end
260
260
 
@@ -268,19 +268,19 @@ class TestParser < Test::Unit::TestCase
268
268
  mediums = %w[canvas stone steel]
269
269
 
270
270
  args = ['-m', mediums.first, '-m', mediums[1], '-m', mediums.last]
271
- choices = Choice::Parser.parse(@options, args)
271
+ choices, rest = Choice::Parser.parse(@options, args)
272
272
  assert_equal mediums, choices['medium']
273
273
 
274
274
  args = ['-m', mediums.first, mediums[1], mediums.last]
275
- choices = Choice::Parser.parse(@options, args)
275
+ choices, rest = Choice::Parser.parse(@options, args)
276
276
  assert_equal mediums, choices['medium']
277
277
 
278
278
  args = ["--medium=#{mediums.first}", "--medium=#{mediums[1]}", "--medium=#{mediums.last}"]
279
- choices = Choice::Parser.parse(@options, args)
279
+ choices, rest = Choice::Parser.parse(@options, args)
280
280
  assert_equal mediums, choices['medium']
281
281
 
282
282
  args = ["--medium=#{mediums.first}", mediums[1], mediums.last]
283
- choices = Choice::Parser.parse(@options, args)
283
+ choices, rest = Choice::Parser.parse(@options, args)
284
284
  assert_equal mediums, choices['medium']
285
285
  end
286
286
 
@@ -293,14 +293,15 @@ class TestParser < Test::Unit::TestCase
293
293
 
294
294
  instruments = %w[xylophone guitar piano]
295
295
 
296
- args = ["--instruments=#{instruments.first}", "--instruments=#{instruments[1]}",
296
+ args = ["--instruments=#{instruments.first}",
297
+ "--instruments=#{instruments[1]}",
297
298
  "--instruments=#{instruments.last}"]
298
- choices = Choice::Parser.parse(@options, args)
299
+ choices, rest = Choice::Parser.parse(@options, args)
299
300
  assert_equal instruments, choices['instruments']
300
301
 
301
302
  args = %w[--instruments]
302
- choices = Choice::Parser.parse(@options, args)
303
- assert_equal true, choices['instruments']
303
+ choices, rest = Choice::Parser.parse(@options, args)
304
+ assert_equal [], choices['instruments']
304
305
  end
305
306
 
306
307
  def test_long_as_array_with_valid
@@ -314,13 +315,13 @@ class TestParser < Test::Unit::TestCase
314
315
  suits = %w[spade heart]
315
316
 
316
317
  args = ['-s', suits.first, suits.last]
317
- choices = Choice::Parser.parse(@options, args)
318
-
318
+ choices, rest = Choice::Parser.parse(@options, args)
319
+
319
320
  assert_equal suits, choices['suits']
320
-
321
+
321
322
  args = ['-s', suits.first, 'notasuit']
322
323
  assert_raise(Choice::Parser::InvalidArgument) do
323
- choices = Choice::Parser.parse(@options, args)
324
+ choices, rest = Choice::Parser.parse(@options, args)
324
325
  end
325
326
  end
326
327
 
@@ -334,8 +335,8 @@ class TestParser < Test::Unit::TestCase
334
335
  donut = 'long-john'
335
336
 
336
337
  args = ['--donut', donut]
337
- choices = Choice::Parser.parse(@options, args)
338
-
338
+ choices, rest = Choice::Parser.parse(@options, args)
339
+
339
340
  assert_equal donut, choices['donut']
340
341
  end
341
342
 
@@ -349,11 +350,11 @@ class TestParser < Test::Unit::TestCase
349
350
  donut = 'chocolate'
350
351
 
351
352
  args = ['--donut', donut]
352
- choices = Choice::Parser.parse(@options, args)
353
+ choices, rest = Choice::Parser.parse(@options, args)
353
354
  assert_equal donut, choices['donut']
354
355
 
355
356
  args = ['--donut']
356
- choices = Choice::Parser.parse(@options, args)
357
+ choices, rest = Choice::Parser.parse(@options, args)
357
358
  assert_equal true, choices['donut']
358
359
  end
359
360
 
@@ -367,7 +368,22 @@ class TestParser < Test::Unit::TestCase
367
368
  donuts = %w[glazed cream-filled]
368
369
 
369
370
  args = ['--donuts', donuts.first, donuts.last]
370
- choices = Choice::Parser.parse(@options, args)
371
+ choices, rest = Choice::Parser.parse(@options, args)
371
372
  assert_equal donuts, choices['donuts']
372
373
  end
374
+
375
+ def test_long_with_rest
376
+ @options['donut'] = Choice::Option.new do
377
+ short '-d'
378
+ long '--donut [DONUT]'
379
+ desc "Your favorite donut style."
380
+ end
381
+
382
+ donut = 'chocolate'
383
+
384
+ args = ['eat', '--donut', donut]
385
+ choices, rest = Choice::Parser.parse(@options, args)
386
+ assert_equal donut, choices['donut']
387
+ assert_equal ['eat'], rest
388
+ end
373
389
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: choice
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wanstrath
@@ -9,7 +9,7 @@ autorequire: choice
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-19 00:00:00 -07:00
12
+ date: 2009-10-03 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -25,7 +25,6 @@ files:
25
25
  - README
26
26
  - CHANGELOG
27
27
  - LICENSE
28
- - lib/choice
29
28
  - lib/choice/lazyhash.rb
30
29
  - lib/choice/option.rb
31
30
  - lib/choice/parser.rb
@@ -39,8 +38,10 @@ files:
39
38
  - test/test_writer.rb
40
39
  - examples/ftpd.rb
41
40
  - examples/gamble.rb
42
- has_rdoc: false
41
+ has_rdoc: true
43
42
  homepage: http://choice.rubyforge.org/
43
+ licenses: []
44
+
44
45
  post_install_message:
45
46
  rdoc_options: []
46
47
 
@@ -61,9 +62,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
62
  requirements: []
62
63
 
63
64
  rubyforge_project:
64
- rubygems_version: 1.3.1
65
+ rubygems_version: 1.3.5
65
66
  signing_key:
66
- specification_version: 2
67
+ specification_version: 3
67
68
  summary: Choice is a command line option parser.
68
69
  test_files: []
69
70