opt-simple 0.9.8 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README +40 -4
  2. data/lib/opt_simple.rb +4 -2
  3. data/lib/tmp.rb +63 -0
  4. metadata +3 -2
data/README CHANGED
@@ -39,7 +39,8 @@ It is recommended to install OptSimple using RubyGems:
39
39
  === One example that shows most of the behavior you might use
40
40
  require 'opt_simple'
41
41
 
42
- defaults = {
42
+ defaults = {
43
+ :glob_pattern => '*',
43
44
  :num_results => 42,
44
45
  :range => [5,10]
45
46
  }
@@ -107,9 +108,9 @@ Which prints out an automatic usage statement:
107
108
 
108
109
  -n, -num, --num-values VAL The answer to everything
109
110
 
110
- -p, --pattern, --glob-pattern PATTERN glob pattern
111
+ -p, --pattern, --glob-pattern PATTERN glob pattern (default is '*')
111
112
 
112
- --range ARG range: min,max (both >0) (default is [5, 10])
113
+ --range ARG range: min,max (both >0) (default is '[5, 10]')
113
114
 
114
115
  -h, --help (for this help message)
115
116
 
@@ -252,8 +253,43 @@ Which prints out an automatic usage statement:
252
253
  puts "Options"
253
254
  puts options
254
255
 
255
- == Questions and/or Comments
256
+ === A totally contrived example showing how to change multiple options within an option specification block
257
+
258
+ require 'opt_simple'
256
259
 
260
+ allowed_odds = [1,3,5,7]
261
+ allowed_evens = [2,4,6]
262
+ defaults = {
263
+ :even_val => allowed_evens.first,
264
+ :odd_val => allowed_odds.first
265
+ }
266
+
267
+ # Note that b/c we define option [--odd] and [--evens] _after_ the max-out flag,
268
+ # they will override the max-out setting.
269
+ opts = OptSimple.new(defaults).parse_opts! do | opt_obj |
270
+ flag %w[-m --max-out], "Maximize evens and odds." do
271
+ opt_obj.odd_val = allowed_odds.last
272
+ opt_obj.even_val = allowed_evens.last
273
+ end
274
+
275
+ option "--odd-val","Odd val in #{allowed_odds.inspect}","VAL" do | arg |
276
+ val = arg.to_i
277
+ error "Odd val must be in #{allowed_odds.inspect}" unless allowed_odds.include? val
278
+ set_opt val
279
+ end
280
+
281
+ option "--even-val","Even val #{allowed_evens.inspect}","VAL" do | arg |
282
+ val = arg.to_i
283
+ error "Even val must be in #{allowed_evens.inspect}" unless allowed_evens.include? val
284
+ set_opt val
285
+ end
286
+ end
287
+
288
+ puts "Options"
289
+ puts opts
290
+
291
+ == Questions and/or Comments
292
+
257
293
  email {Ethan Stryker}[mailto:e.stryker@gmail.com]
258
294
 
259
295
 
@@ -274,8 +274,10 @@ class OptSimple
274
274
  intersection = @defaults.keys & parm.names unless parm.class == Flag
275
275
  if intersection.empty?
276
276
  help_str << "\n\n"
277
+ elsif @defaults[intersection.first].nil?
278
+ help_str << " (default is 'nil')\n\n"
277
279
  else
278
- help_str << " (default is #{@defaults[intersection.first]})\n\n"
280
+ help_str << " (default is '#{@defaults[intersection.first]}')\n\n"
279
281
  end
280
282
  end
281
283
  help_str << " SUMMARY:\n\n #{@summary}\n\n" unless @summary.empty?
@@ -424,7 +426,7 @@ class OptSimple
424
426
  unless block_given?
425
427
  @block = Proc.new {|arg| @param_options[names.first] = arg}
426
428
  end
427
- @first_call = true
429
+ @first_call = true # use this so we can accumulate non-defaults
428
430
  end
429
431
 
430
432
  def switch_len #:nodoc:
@@ -0,0 +1,63 @@
1
+ # in parse_opts!
2
+ # now actually parse the args, and call all the stored up blocks from the options
3
+ @parameters.each do | parm |
4
+ intersection = @args & parm.switches
5
+
6
+ unless intersection.empty?
7
+ mandatory_check.delete(parm.switches)
8
+
9
+ arg_locations = []
10
+ @args.each_with_index {|arg,i| arg_locations << i if intersection.include?(arg) }
11
+ # ...
12
+ def flag(switches,help="",&block)
13
+ parm = Flag.new(switches,help,&block)
14
+ parm.set_opt false
15
+ add_parameter parm
16
+
17
+ # add it to the results to make checking flags nicer.
18
+ # use the first name b/c they are all aliased anyways.
19
+ @results.merge! parm.param_options
20
+ end
21
+
22
+ def option(switches,help="",metavar="ARG",&block)
23
+ parm = Option.new(switches,help,metavar,&block)
24
+
25
+ # set the defaults, if there are any in the defaults hash
26
+ intersection = parm.names & @defaults.keys
27
+ if intersection.length == 1
28
+ parm.set_opt @defaults[intersection.first]
29
+ @results.merge! parm.param_options
30
+ elsif intersection.length > 1
31
+ raise OptSimple::Error "Clashes in the defaults for #{parm.switches}"
32
+ end
33
+
34
+ add_parameter(parm)
35
+ end
36
+
37
+ class Option < Parameter
38
+ attr_reader = :metavar
39
+ def initialize(switches,help="",metavar="ARG",&block)
40
+ super(switches,help,&block)
41
+ @metavar = metavar
42
+ unless block_given?
43
+ @block = Proc.new {|arg| @param_options[names.first] = arg}
44
+ end
45
+ @first_call = true # use this so we can accumulate non-defaults
46
+ end
47
+ def switch_len #:nodoc:
48
+ metavar_space = @metavar.empty? ? 0 : @metavar.length + 1
49
+ super + metavar_space
50
+ end
51
+ def switch_str #:nodoc:
52
+ super + " #{@metavar}"
53
+ end
54
+ # append val to the parameter list
55
+ def accumulate_opt(val)
56
+ if @first_call
57
+ @param_options[names.first] = [val].flatten
58
+ else
59
+ @param_options[names.first] << val
60
+ end
61
+ @first_call = false
62
+ end
63
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: opt-simple
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.9.8
5
+ version: 0.9.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ethan Stryker
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-05 00:00:00 +01:00
13
+ date: 2011-07-09 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -25,6 +25,7 @@ extra_rdoc_files: []
25
25
  files:
26
26
  - lib/test_unit_extensions.rb
27
27
  - lib/opt_simple.rb
28
+ - lib/tmp.rb
28
29
  - test/test_help.rb
29
30
  - test/test_usage.rb
30
31
  - test/test_arglist.rb