slop 1.7.0 → 1.8.0

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/.yardopts CHANGED
@@ -1,6 +1,6 @@
1
- --hide-void-return
1
+ --hide-void-return
2
2
  -m markdown
3
3
  --title "Slop - Option gathering made easy"
4
4
  lib/**/*.rb
5
5
  --no-private
6
- --main README.md
6
+ --readme README.md
data/CHANGES.md CHANGED
@@ -1,3 +1,15 @@
1
+ 1.8.0 (2011-06-12)
2
+ ------------------
3
+
4
+ * Added `execute` method to Slop for commands. This block will be invoked
5
+ when a specific command is used. The Slop object will be yielded to the
6
+ block
7
+ * Allow passing a class name to `on` to be used as an `:as` option. ie:
8
+ `on :people, 'Some people', Array`
9
+ * Get smart with parsing options optparse style: `on '--name NAME'` and
10
+ `on 'password [OPTIONAL]'`
11
+ * Feature: `:arguments` setting to enable argument passing for all options
12
+
1
13
  1.7.0 (2011-06-06)
2
14
  ------------------
3
15
 
data/README.md CHANGED
@@ -20,7 +20,7 @@ Usage
20
20
  -----
21
21
  # parse assumes ARGV, otherwise you can pass it your own Array
22
22
  opts = Slop.parse do
23
- on :v, :verbose, 'Enable verbose mode' # boolean value
23
+ on :v, :verbose, 'Enable verbose mode' # boolean value
24
24
  on :n, :name, 'Your name', true # option requires a compulsory argument
25
25
  on :s, :sex, 'Your sex', :optional => false # the same thing
26
26
  on '-a', '--age', 'Your age', :optional => true # optional argument
@@ -33,6 +33,10 @@ Usage
33
33
  opts.age? #=> false
34
34
  opts[:age] #=> nil
35
35
 
36
+ For more information about creating options, see the
37
+ [Creating Options](https://github.com/injekt/slop/wiki/Creating-Options)
38
+ wiki page.
39
+
36
40
  You can also return your options as a Hash
37
41
 
38
42
  opts.to_hash #=> {'name' => 'Lee Jarvis', 'verbose' => true, 'age' => nil, 'sex' => 'male'}
@@ -51,19 +55,10 @@ Will output something like
51
55
 
52
56
  You can also add a banner using the `banner` method
53
57
 
54
- opts = Slop.parse
55
- opts.banner = "Usage: foo.rb [options]"
56
-
57
- or
58
-
59
58
  opts = Slop.parse do
60
59
  banner "Usage: foo.rb [options]"
61
60
  end
62
61
 
63
- or
64
-
65
- opts = Slop.new "Usage: foo.rb [options]"
66
-
67
62
  Helpful Help
68
63
  ------------
69
64
 
@@ -196,26 +191,6 @@ You can of course also parse lists into options. Here's how:
196
191
  Slop supports a few styles of list parsing. Check out
197
192
  [this wiki page](https://github.com/injekt/slop/wiki/Lists) for more info.
198
193
 
199
- Smart
200
- -----
201
-
202
- Slop is pretty smart when it comes to building your options, for example if you
203
- want your option to have a flag attribute, but no `--option` attribute, you
204
- can do this:
205
-
206
- on :n, "Your name"
207
-
208
- and Slop will detect a description in place of an option, so you don't have to
209
- do this:
210
-
211
- on :n, nil, "Your name", true
212
-
213
- You can also try other variations:
214
-
215
- on :name, "Your name"
216
- on :n, :name
217
- on :name, true
218
-
219
194
  Strict Mode
220
195
  -----------
221
196
 
@@ -225,41 +200,6 @@ when an invalid option is found (`false` by default):
225
200
  Slop.new(:strict => true).parse(%w/--foo/)
226
201
  # => Slop::InvalidOptionError: Unknown option -- 'foo'
227
202
 
228
- Commands
229
- --------
230
-
231
- Slop allows you to nest more instances of Slop inside of `commands`. These
232
- instances will then be used to parse arguments if they're called upon.
233
-
234
- Slop will use the first argument in the list of items passed to `parse` to
235
- check if it is a `command`.
236
-
237
- Slop.parse ['foo', '--bar', 'baz']
238
-
239
- Slop will look to see if the `foo` command exists, and if it does, it'll pass
240
- the options `['--bar', 'baz']` to the instance of Slop that belongs to `foo`.
241
- Here's how commands might look:
242
-
243
- opts = Slop.new do
244
- command :foo do
245
- on :b, :bar, 'something', true
246
- end
247
-
248
- command :clean do
249
- on :v, :verbose, do
250
- puts 'Enabled verbose mode for clean'
251
- end
252
- end
253
-
254
- # non-command specific options
255
- on :v, :version do
256
- puts 'version 1'
257
- end
258
- end
259
-
260
- * `run.rb -v #=> version 1`
261
- * `run.rb clean -v #=> Enabled verbose mode for clean`
262
-
263
203
  Features
264
204
  --------
265
205
 
@@ -267,6 +207,7 @@ Check out the following wiki pages for more features:
267
207
 
268
208
  * [Ranges](https://github.com/injekt/slop/wiki/Ranges)
269
209
  * [Auto Create](https://github.com/injekt/slop/wiki/Auto-Create)
210
+ * [Commands](https://github.com/injekt/slop/wiki/Commands)
270
211
 
271
212
  Woah woah, why you hating on OptionParser?
272
213
  ------------------------------------------
data/lib/slop.rb CHANGED
@@ -16,9 +16,9 @@ class Slop
16
16
  class InvalidOptionError < RuntimeError; end
17
17
 
18
18
  # @return [String] The current version string
19
- VERSION = '1.7.0'
19
+ VERSION = '1.8.0'
20
20
 
21
- # Parses the items from a CLI format into a friendly object.
21
+ # Parses the items from a CLI format into a friendly object
22
22
  #
23
23
  # @param [Array] items Items to parse into options.
24
24
  # @example Specifying three options to parse:
@@ -27,15 +27,15 @@ class Slop
27
27
  # on :n, :name, 'Your name'
28
28
  # on :a, :age, 'Your age'
29
29
  # end
30
- # @return [Slop] Returns an instance of Slop.
30
+ # @return [Slop] Returns an instance of Slop
31
31
  def self.parse(items=ARGV, options={}, &block)
32
32
  initialize_and_parse items, false, options, &block
33
33
  end
34
34
 
35
35
  # Identical to {Slop.parse}, but removes parsed options from the
36
- # original Array.
36
+ # original Array
37
37
  #
38
- # @return [Slop] Returns an instance of Slop.
38
+ # @return [Slop] Returns an instance of Slop
39
39
  def self.parse!(items=ARGV, options={}, &block)
40
40
  initialize_and_parse items, true, options, &block
41
41
  end
@@ -54,25 +54,43 @@ class Slop
54
54
  # @return [Integer] The length of the longest flag slop knows of
55
55
  attr_accessor :longest_flag
56
56
 
57
- # @param [Hash] options
58
- # @option opts [Boolean] :help Automatically add the `help` option
59
- # @option opts [Boolean] :strict Strict mode raises when a non listed
60
- # option is found, false by default
61
- # @option opts [Boolean] :multiple_switches Allows `-abc` to be processed
62
- # as the options 'a', 'b', 'c' and will force their argument values to
63
- # true. By default Slop with parse this as 'a' with the argument 'bc'
64
- # @option opts [String] :banner The banner text used for the help
65
- # @option opts [Proc, #call] :on_empty Any object that respondes to `call`
66
- # which is executed when Slop has no items to parse
67
- # @option opts [IO, #puts] :io ($stderr) An IO object for writing to when
68
- # :help => true is used
69
- # @option opts [Boolean] :exit_on_help (true) When false and coupled with
70
- # the :help option, Slop will not exit inside of the `help` option
71
- # @option opts [Boolean] :ignore_case (false) Ignore options case
72
- # @option opts [Proc, #call] :on_noopts Trigger an event when no options
73
- # are found
74
- # @option opts [Boolean] :autocreate (false) Autocreate options depending
75
- # on the Array passed to {parse}
57
+ # @option opts [Boolean] :help
58
+ # * Automatically add the `help` option
59
+ #
60
+ # @option opts [Boolean] :strict
61
+ # * Raises when a non listed option is found, false by default
62
+ #
63
+ # @option opts [Boolean] :multiple_switches
64
+ # * Allows `-abc` to be processed as the options 'a', 'b', 'c' and will
65
+ # force their argument values to true. By default Slop with parse this
66
+ # as 'a' with the argument 'bc'
67
+ #
68
+ # @option opts [String] :banner
69
+ # * The banner text used for the help
70
+ #
71
+ # @option opts [Proc, #call] :on_empty
72
+ # * Any object that respondes to `call` which is executed when Slop has
73
+ # no items to parse
74
+ #
75
+ # @option opts [IO, #puts] :io ($stderr)
76
+ # * An IO object for writing to when :help => true is used
77
+ #
78
+ # @option opts [Boolean] :exit_on_help (true)
79
+ # * When false and coupled with the :help option, Slop will not exit
80
+ # inside of the `help` option
81
+ #
82
+ # @option opts [Boolean] :ignore_case (false)
83
+ # * Ignore options case
84
+ #
85
+ # @option opts [Proc, #call] :on_noopts
86
+ # * Trigger an event when no options are found
87
+ #
88
+ # @option opts [Boolean] :autocreate (false)
89
+ # * Autocreate options depending on the Array passed to {#parse}
90
+ #
91
+ # @option opts [Boolean] :arguments (false)
92
+ # * Set to true to enable all specified options to accept arguments
93
+ # by default
76
94
  def initialize(*opts, &block)
77
95
  sloptions = opts.last.is_a?(Hash) ? opts.pop : {}
78
96
  sloptions[:banner] = opts.shift if opts[0].respond_to? :to_str
@@ -80,6 +98,7 @@ class Slop
80
98
 
81
99
  @options = Options.new
82
100
  @commands = {}
101
+ @execution_block = nil
83
102
 
84
103
  @longest_flag = 0
85
104
  @invalid_options = []
@@ -89,6 +108,7 @@ class Slop
89
108
  @ignore_case = sloptions[:ignore_case]
90
109
  @multiple_switches = sloptions[:multiple_switches]
91
110
  @autocreate = sloptions[:autocreate]
111
+ @arguments = sloptions[:arguments]
92
112
  @on_empty = sloptions[:on_empty]
93
113
  @on_noopts = sloptions[:on_noopts] || sloptions[:on_optionless]
94
114
  @sloptions = sloptions
@@ -105,27 +125,27 @@ class Slop
105
125
  end
106
126
  end
107
127
 
108
- # Set or return banner text.
128
+ # Set or return banner text
109
129
  #
110
- # @param [String] text Displayed banner text.
130
+ # @param [String] text Displayed banner text
111
131
  # @example
112
132
  # opts = Slop.parse do
113
133
  # banner "Usage - ruby foo.rb [arguments]"
114
134
  # end
115
- # @return [String] The current banner.
135
+ # @return [String] The current banner
116
136
  def banner(text=nil)
117
137
  @banner = text if text
118
138
  @banner
119
139
  end
120
140
 
121
- # Parse a list of options, leaving the original Array unchanged.
141
+ # Parse a list of options, leaving the original Array unchanged
122
142
  #
123
143
  # @param [Array] items A list of items to parse
124
144
  def parse(items=ARGV, &block)
125
145
  parse_items items, &block
126
146
  end
127
147
 
128
- # Parse a list of options, removing parsed options from the original Array.
148
+ # Parse a list of options, removing parsed options from the original Array
129
149
  #
130
150
  # @param [Array] items A list of items to parse
131
151
  def parse!(items=ARGV, &block)
@@ -137,7 +157,7 @@ class Slop
137
157
  @options.each(&block)
138
158
  end
139
159
 
140
- # @param [Symbol] key Option symbol.
160
+ # @param [Symbol] key Option symbol
141
161
  # @example
142
162
  # opts[:name] #=> "Emily"
143
163
  # opts.get(:name) #=> "Emily"
@@ -149,7 +169,7 @@ class Slop
149
169
  end
150
170
  alias :get :[]
151
171
 
152
- # Specify an option with a short or long version, description and type.
172
+ # Specify an option with a short or long version, description and type
153
173
  #
154
174
  # @param [*] args Option configuration.
155
175
  # @option args [Symbol, String] :short_flag Short option name.
@@ -173,7 +193,8 @@ class Slop
173
193
  def option(*args, &block)
174
194
  options = args.last.is_a?(Hash) ? args.pop : {}
175
195
 
176
- short, long, desc, arg = clean_options args
196
+ short, long, desc, arg, extras = clean_options args
197
+ options.merge!(extras)
177
198
  option = Option.new self, short, long, desc, arg, options, &block
178
199
  @options << option
179
200
 
@@ -240,7 +261,31 @@ class Slop
240
261
  end
241
262
  alias :on_optionless :on_noopts
242
263
 
243
- # Returns the parsed list into a option/value hash.
264
+ # Add an execution block (for commands)
265
+ #
266
+ # @example
267
+ # opts = Slop.new do
268
+ # command :foo do
269
+ # on :v, :verbose
270
+ #
271
+ # execute { |o| p o.verbose? }
272
+ # end
273
+ # end
274
+ # opts.parse %w[foo --verbose] #=> true
275
+ #
276
+ # @param [Object, #call] obj The object to be triggered when this command
277
+ # is invoked
278
+ # @since 1.8.0
279
+ # @yields [Slop] an instance of Slop for this command
280
+ def execute(obj=nil, &block)
281
+ if obj || block_given?
282
+ @execution_block = obj || block
283
+ elsif @execution_block.respond_to?(:call)
284
+ @execution_block.call(self)
285
+ end
286
+ end
287
+
288
+ # Returns the parsed list into a option/value hash
244
289
  #
245
290
  # @example
246
291
  # opts.to_hash #=> { 'name' => 'Emily' }
@@ -253,7 +298,8 @@ class Slop
253
298
  end
254
299
  alias :to_h :to_hash
255
300
 
256
- # Allows you to check whether an option was specified in the parsed list.
301
+ # Allows you to check whether an option was specified in the parsed list
302
+ #
257
303
  # Merely sugar for `present?`
258
304
  #
259
305
  # @example
@@ -267,8 +313,10 @@ class Slop
267
313
  present? meth.to_s.chomp '?'
268
314
  end
269
315
 
270
- # Check if an option is specified in the parsed list. Does the same as
271
- # Slop#option? but a convenience method for unacceptable method names.
316
+ # Check if an option is specified in the parsed list
317
+ #
318
+ # Does the same as Slop#option? but a convenience method for unacceptable
319
+ # method names
272
320
  #
273
321
  # @param [Object] The object name to check
274
322
  # @since 1.5.0
@@ -277,7 +325,7 @@ class Slop
277
325
  !!get(option_name)
278
326
  end
279
327
 
280
- # Returns the banner followed by available options listed on the next line.
328
+ # Returns the banner followed by available options listed on the next line
281
329
  #
282
330
  # @example
283
331
  # opts = Slop.parse do
@@ -342,11 +390,17 @@ class Slop
342
390
 
343
391
  if option.expects_argument? || option.accepts_optional_argument?
344
392
  argument ||= items.at(index + 1)
345
- check_valid_argument!(option, argument)
346
393
  trash << index + 1
347
394
 
395
+ if !option.accepts_optional_argument? && flag?(argument)
396
+ raise MissingArgumentError, "'#{option.key}' expects an argument, none given"
397
+ end
398
+
348
399
  if argument
349
- check_matching_argument!(option, argument)
400
+ if option.match && !argument.match(option.match)
401
+ raise InvalidArgumentError, "'#{argument}' does not match #{option.match.inspect}"
402
+ end
403
+
350
404
  option.argument_value = argument
351
405
  option.call option.argument_value unless option.omit_exec?(items)
352
406
  else
@@ -367,18 +421,6 @@ class Slop
367
421
  items
368
422
  end
369
423
 
370
- def check_valid_argument!(option, argument)
371
- if !option.accepts_optional_argument? && flag?(argument)
372
- raise MissingArgumentError, "'#{option.key}' expects an argument, none given"
373
- end
374
- end
375
-
376
- def check_matching_argument!(option, argument)
377
- if option.match && !argument.match(option.match)
378
- raise InvalidArgumentError, "'#{argument}' does not match #{option.match.inspect}"
379
- end
380
- end
381
-
382
424
  def check_optional_argument!(option, flag)
383
425
  if option.accepts_optional_argument?
384
426
  option.call
@@ -389,8 +431,7 @@ class Slop
389
431
 
390
432
  def raise_if_invalid_options!
391
433
  return if !@strict || @invalid_options.empty?
392
- message = "Unknown option"
393
- message << 's' if @invalid_options.size > 1
434
+ message = "Unknown option#{'s' if @invalid_options.size > 1}"
394
435
  message << ' -- ' << @invalid_options.map { |o| "'#{o}'" }.join(', ')
395
436
  raise InvalidOptionError, message
396
437
  end
@@ -400,9 +441,8 @@ class Slop
400
441
  if option = @options[switch]
401
442
  if option.expects_argument?
402
443
  raise MissingArgumentError, "'-#{switch}' expects an argument, used in multiple_switch context"
403
- else
404
- option.argument_value = true
405
444
  end
445
+ option.argument_value = true
406
446
  else
407
447
  raise InvalidOptionError, "Unknown option '-#{switch}'" if @strict
408
448
  end
@@ -439,7 +479,7 @@ class Slop
439
479
  items.shift
440
480
  opts = @commands[command]
441
481
  delete ? opts.parse!(items) : opts.parse(items)
442
- true
482
+ opts.execute
443
483
  end
444
484
  end
445
485
 
@@ -452,6 +492,10 @@ class Slop
452
492
 
453
493
  def clean_options(args)
454
494
  options = []
495
+ extras = {}
496
+ extras[:as] = args.find {|c| c.is_a? Class }
497
+ args.delete(extras[:as])
498
+ extras.delete(:as) unless extras[:as]
455
499
 
456
500
  short = args.first.to_s.sub(/\A--?/, '')
457
501
  if short.size == 1
@@ -463,14 +507,20 @@ class Slop
463
507
 
464
508
  long = args.first
465
509
  boolean = [true, false].include? long
466
- if !boolean && long.to_s =~ /\A(?:--?)?[a-zA-Z][a-zA-Z0-9_-]+\z/
510
+ if !boolean && long.to_s =~ /\A(?:--?)?[a-z_-]+\s[A-Z\s\[\]]+\z/
511
+ arg, help = args.shift.split(/ /, 2)
512
+ options.push arg.sub(/\A--?/, '')
513
+ extras[:optional] = help[0, 1] == '[' && help[-1, 1] == ']'
514
+ extras[:help] = help
515
+ elsif !boolean && long.to_s =~ /\A(?:--?)?[a-zA-Z][a-zA-Z0-9_-]+\z/
467
516
  options.push args.shift.to_s.sub(/\A--?/, '')
468
517
  else
469
518
  options.push nil
470
519
  end
471
520
 
472
521
  options.push args.first.respond_to?(:to_sym) ? args.shift : nil
473
- options.push args.shift ? true : false # force true/false
522
+ options.push @arguments ? true : (args.shift ? true : false)
523
+ options.push extras
474
524
  end
475
525
 
476
526
  def flag?(str)
data/lib/slop/option.rb CHANGED
@@ -195,11 +195,10 @@ class Slop
195
195
  def build_longest_flag
196
196
  if @long_flag && @long_flag.size > @slop.longest_flag
197
197
  if @help.respond_to? :to_str
198
- size = @long_flag.size + @help.size
198
+ @slop.longest_flag = @long_flag.size + @help.size
199
199
  else
200
- size = @long_flag.size
200
+ @slop.longest_flag = @long_flag.size
201
201
  end
202
- @slop.longest_flag = size
203
202
  end
204
203
  end
205
204
  end
data/slop.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'slop'
3
- s.version = '1.7.0'
3
+ s.version = '1.8.0'
4
4
  s.summary = 'Option gathering made easy'
5
5
  s.description = 'A simple DSL for gathering options and parsing the command line'
6
6
  s.author = 'Lee Jarvis'
@@ -69,4 +69,21 @@ class CommandsTest < TestCase
69
69
  assert incmd
70
70
  refute inslop
71
71
  end
72
+
73
+ test 'executing blocks' do
74
+ foo = bar = nil
75
+ slop = Slop.new
76
+ slop.command :foo do
77
+ on :v, :verbose
78
+ execute { |o| foo = o.verbose? }
79
+ end
80
+ slop.command :bar do
81
+ on :v, :verbose
82
+ execute { |o| bar = o.verbose? }
83
+ end
84
+ slop.parse %w[ foo --verbose ]
85
+
86
+ assert foo
87
+ refute bar
88
+ end
72
89
  end
data/test/slop_test.rb CHANGED
@@ -184,32 +184,45 @@ class SlopTest < TestCase
184
184
 
185
185
  test 'the shit out of clean_options' do
186
186
  assert_equal(
187
- ['s', 'short', 'short option', false],
187
+ ['s', 'short', 'short option', false, {}],
188
188
  clean_options('-s', '--short', 'short option')
189
189
  )
190
190
 
191
191
  assert_equal(
192
- [nil, 'long', 'long option only', true],
192
+ [nil, 'long', 'long option only', true, {}],
193
193
  clean_options('--long', 'long option only', true)
194
194
  )
195
195
 
196
196
  assert_equal(
197
- ['S', 'symbol', 'symbolize', false],
197
+ ['S', 'symbol', 'symbolize', false, {}],
198
198
  clean_options(:S, :symbol, 'symbolize')
199
199
  )
200
200
 
201
201
  assert_equal(
202
- ['a', nil, 'alphabetical only', true],
202
+ ['a', nil, 'alphabetical only', true, {}],
203
203
  clean_options('a', 'alphabetical only', true)
204
204
  )
205
205
 
206
206
  assert_equal( # for description-less options
207
- [nil, 'optiononly', nil, false],
207
+ [nil, 'optiononly', nil, false, {}],
208
208
  clean_options('--optiononly')
209
209
  )
210
210
 
211
- assert_equal(['c', nil, nil, true], clean_options(:c, true))
212
- assert_equal(['c', nil, nil, false], clean_options(:c, false))
211
+ assert_equal(
212
+ ['f', 'foo', 'some description', false, {:optional => false, :help => 'BAR'}],
213
+ clean_options(:f, 'foo BAR', 'some description')
214
+ )
215
+
216
+ assert_equal(
217
+ [nil, 'bar', nil, false, {:optional => true, :help => '[STUFF]'}],
218
+ clean_options('bar [STUFF]')
219
+ )
220
+
221
+ assert_equal([nil, 'foo', nil, false, {:as => Array}], clean_options(:foo, Array, false))
222
+ assert_equal([nil, 'foo', nil, false, {:as => Array}], clean_options(Array, :foo, false))
223
+
224
+ assert_equal(['c', nil, nil, true, {}], clean_options(:c, true))
225
+ assert_equal(['c', nil, nil, false, {}], clean_options(:c, false))
213
226
  end
214
227
 
215
228
  test '[] returns an options argument value or a command or nil (in that order)' do
@@ -407,4 +420,35 @@ class SlopTest < TestCase
407
420
  assert_equal %w/foo bar etc/, opts[:a]
408
421
  end
409
422
 
423
+ test ':arguments => true' do
424
+ opts = Slop.new(:arguments) { on :foo }
425
+ opts.parse %w/--foo bar/
426
+
427
+ assert_equal 'bar', opts[:foo]
428
+ end
429
+
430
+ test 'long flag strings' do
431
+ opts = Slop.new do
432
+ on 'f', 'foo BAR'
433
+ on 'bar [HELLO]'
434
+ end
435
+
436
+ assert opts.options[:foo].expects_argument?
437
+ assert opts.options[:bar].accepts_optional_argument?
438
+
439
+ assert_equal ' -f, --foo BAR ', opts.options[:foo].to_s
440
+ assert_equal ' --bar [HELLO] ', opts.options[:bar].to_s
441
+ end
442
+
443
+ test 'inline classes' do
444
+ opts = Slop.new do
445
+ on :foo, Array, true
446
+ on Symbol, :bar, true
447
+ end
448
+ opts.parse %w/--foo one,two --bar hello/
449
+
450
+ assert_equal %w[one two], opts[:foo]
451
+ assert_equal :hello, opts[:bar]
452
+ end
453
+
410
454
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: slop
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.7.0
5
+ version: 1.8.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Lee Jarvis
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-06 00:00:00 Z
13
+ date: 2011-06-12 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: A simple DSL for gathering options and parsing the command line
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  requirements: []
61
61
 
62
62
  rubyforge_project:
63
- rubygems_version: 1.8.2
63
+ rubygems_version: 1.8.5
64
64
  signing_key:
65
65
  specification_version: 3
66
66
  summary: Option gathering made easy