optiflag 0.6.5 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/examples/example_2_4.rb +1 -1
  2. data/examples/example_3.rb +4 -2
  3. data/examples/example_6.rb +3 -3
  4. data/optiflag-parse.rb +24 -18
  5. data/optiflag.gemspec +1 -1
  6. data/optiflag.rb +5 -4
  7. metadata +9 -106
  8. data/doc/classes/OptiFlag.html +0 -439
  9. data/doc/classes/OptiFlag.src/M000001.html +0 -49
  10. data/doc/classes/OptiFlag.src/M000002.html +0 -49
  11. data/doc/classes/OptiFlag.src/M000003.html +0 -30
  12. data/doc/classes/OptiFlag/Flagset.html +0 -459
  13. data/doc/classes/OptiFlag/Flagset.src/M000003.html +0 -45
  14. data/doc/classes/OptiFlag/Flagset.src/M000004.html +0 -45
  15. data/doc/classes/OptiFlag/Flagset.src/M000005.html +0 -18
  16. data/doc/classes/OptiFlag/Flagset.src/M000006.html +0 -20
  17. data/doc/classes/OptiFlag/Flagset.src/M000007.html +0 -35
  18. data/doc/classes/OptiFlag/Flagset.src/M000008.html +0 -23
  19. data/doc/classes/OptiFlag/Flagset.src/M000009.html +0 -24
  20. data/doc/classes/OptiFlag/Flagset.src/M000010.html +0 -28
  21. data/doc/classes/OptiFlag/Flagset.src/M000011.html +0 -20
  22. data/doc/classes/OptiFlag/Flagset.src/M000012.html +0 -24
  23. data/doc/classes/OptiFlag/Flagset.src/M000013.html +0 -24
  24. data/doc/classes/OptiFlag/Flagset.src/M000014.html +0 -32
  25. data/doc/classes/OptiFlag/Flagset.src/M000015.html +0 -25
  26. data/doc/classes/OptiFlag/Flagset.src/M000016.html +0 -53
  27. data/doc/classes/OptiFlag/Flagset.src/M000017.html +0 -53
  28. data/doc/classes/OptiFlag/Flagset/EachFlag.html +0 -930
  29. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000024.html +0 -36
  30. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000025.html +0 -18
  31. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000026.html +0 -36
  32. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000027.html +0 -36
  33. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000028.html +0 -18
  34. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000029.html +0 -18
  35. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000030.html +0 -19
  36. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000031.html +0 -19
  37. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000032.html +0 -18
  38. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000033.html +0 -18
  39. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000034.html +0 -18
  40. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000035.html +0 -22
  41. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000036.html +0 -19
  42. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000037.html +0 -18
  43. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000038.html +0 -18
  44. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000039.html +0 -18
  45. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000040.html +0 -18
  46. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000041.html +0 -18
  47. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000042.html +0 -18
  48. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000043.html +0 -19
  49. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000044.html +0 -18
  50. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000045.html +0 -19
  51. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000046.html +0 -18
  52. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000047.html +0 -18
  53. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000048.html +0 -18
  54. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000049.html +0 -18
  55. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000050.html +0 -18
  56. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000051.html +0 -18
  57. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000052.html +0 -20
  58. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000053.html +0 -18
  59. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000054.html +0 -18
  60. data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000055.html +0 -22
  61. data/doc/classes/OptiFlag/Flagset/Errors.html +0 -192
  62. data/doc/classes/OptiFlag/Flagset/Errors.src/M000021.html +0 -18
  63. data/doc/classes/OptiFlag/Flagset/Errors.src/M000022.html +0 -19
  64. data/doc/classes/OptiFlag/Flagset/Errors.src/M000023.html +0 -18
  65. data/doc/classes/OptiFlag/Flagset/Errors.src/M000024.html +0 -18
  66. data/doc/classes/OptiFlag/Flagset/Errors.src/M000025.html +0 -19
  67. data/doc/classes/OptiFlag/Flagset/Errors.src/M000026.html +0 -36
  68. data/doc/classes/OptiFlag/Flagset/Help.html +0 -125
  69. data/doc/classes/OptiFlag/Flagset/Help/Bundle.html +0 -160
  70. data/doc/classes/OptiFlag/Flagset/Help/Bundle.src/M000018.html +0 -18
  71. data/doc/classes/OptiFlag/Flagset/Help/Bundle.src/M000019.html +0 -18
  72. data/doc/classes/OptiFlag/Flagset/Help/StandardHelpBundle.html +0 -118
  73. data/doc/classes/OptiFlag/Flagset/NewInterface.html +0 -296
  74. data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000017.html +0 -18
  75. data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000018.html +0 -18
  76. data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000019.html +0 -18
  77. data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000020.html +0 -18
  78. data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000021.html +0 -18
  79. data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000022.html +0 -18
  80. data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000023.html +0 -18
  81. data/doc/created.rid +0 -1
  82. data/doc/files/optiflag-help_rb.html +0 -101
  83. data/doc/files/optiflag-parse_rb.html +0 -101
  84. data/doc/files/optiflag_rb.html +0 -167
  85. data/doc/files/optiflag_rb.src/M000001.html +0 -18
  86. data/doc/fr_class_index.html +0 -34
  87. data/doc/fr_file_index.html +0 -29
  88. data/doc/fr_method_index.html +0 -82
  89. data/doc/index.html +0 -24
  90. data/doc/rdoc-style.css +0 -208
  91. data/quick.rb +0 -12
@@ -1,7 +1,7 @@
1
1
  require 'optiflag'
2
2
 
3
3
  # Title: Other clause-level modifiers, like arity and flag symbol
4
- # Variation 4: Selectively changing the symbol for a flag, and change the arity to be no-args
4
+ # Description: Variation 4: Selectively changing the symbol for a flag, and change the arity to be no-args
5
5
  module Example extend OptiFlagSet
6
6
  flag "dir" do
7
7
  alternate_forms "directory","D","d"
@@ -6,14 +6,16 @@ module Example extend OptiFlagSet
6
6
  flag "dir"
7
7
  flag "connection" do
8
8
  # this is our new clause-level modifier
9
- value_matches ["Connection string must be of the form username/password@servicename", /^\b.+\b\/\b.+@.+$/ ]
9
+ value_matches ["Connection string must be of the form username/password@servicename",
10
+ /^\b.+\b\/\b.+@.+$/ ]
10
11
  end
11
12
  optional_flag "mode" do
12
13
  # this is our second new clause-level modifier
13
14
  value_in_set ["read","write","execute"]
14
15
  end
15
16
  optional_flag "run_date" do
16
- value_matches ["run_date must be of the form mm/DD/YY",/^[0-9]{2}\/[0-9]{2}\/[0-9]{2,4}$/]
17
+ value_matches ["run_date must be of the form mm/DD/YY",
18
+ /^[0-9]{2}\/[0-9]{2}\/[0-9]{2,4}$/]
17
19
  end
18
20
 
19
21
  and_process!
@@ -5,16 +5,16 @@ require 'optiflag'
5
5
  module HashAcess extend OptiFlagSet
6
6
  flag "dir"
7
7
  flag "log_level"
8
- flag "&"
8
+ flag "and"
9
9
 
10
10
  and_process!
11
11
  end
12
12
 
13
13
  puts "Dir is: #{ ARGV.flags[:dir] }"
14
14
  puts "Log Level is: #{ ARGV.flags[:log_level] }"
15
- puts "Ampersand Level is: #{ ARGV.flags[:&] }"
15
+ puts "And Level is: #{ ARGV.flags[:and] }"
16
16
 
17
- #h# ruby example_6.rb -dir "c:/Program Files/Apache Software Foundation/Tomcat 5/" -log_level 3 -& ETALL
17
+ #h# ruby example_6.rb -dir "c:/Program Files/Apache Software Foundation/Tomcat 5/" -log_level 3 -and ETALL
18
18
 
19
19
 
20
20
 
@@ -2,7 +2,7 @@ module OptiFlag
2
2
  module Flagset
3
3
  def parse(args,clone=true)
4
4
  init_help_bundle()
5
- safe_args = args.clone if clone
5
+ safe_args = args.clone.compact if clone
6
6
  safe_args = args if ! clone
7
7
  # the following 10 lines were changed so
8
8
  # that a module could reparse a command-line
@@ -32,18 +32,19 @@ module OptiFlag
32
32
  private
33
33
  def init_help_bundle
34
34
  # thank god for the ||= operator
35
- @help_bundle ||= Help::StandardHelpBundle
35
+ @help_bundle ||= OptiFlag::Flagset::Help::StandardHelpBundle
36
36
  end
37
37
  def now_populate_hash(all_flags,safe_args)
38
38
  all_flags.each_pair do |k,v|
39
39
  safe_args.flag_value[k.to_sym] = v.value
40
40
  v.the_alternate_forms.each do |x|
41
+
41
42
  safe_args.flag_value[x.to_sym] = v.value
42
43
  end
43
44
  end
44
45
  end
45
46
  def find_help_flags(safe_args)
46
- arg_copy = safe_args.clone
47
+ arg_copy = safe_args.clone.compact
47
48
 
48
49
  #first we get rid of all non-help flags...
49
50
  non_help_flags = @all_flags.values.select{|value| !value.for_help }
@@ -57,13 +58,14 @@ module OptiFlag
57
58
 
58
59
  found,discard = flag_finder_and_stripper(flag,1,arg_copy)
59
60
  if found.length > 0
61
+
60
62
  safe_args.help_requested = true
61
63
  if found.length == 2
62
64
  safe_args.help_requested_on = found[1]
63
65
  end
64
66
  end
65
67
  end
66
- arg_copy = safe_args.clone
68
+ arg_copy = safe_args.clone.compact
67
69
 
68
70
  ext_help_flag = @all_flags.values.select{|value| value.for_extended_help }
69
71
  if ext_help_flag.length > 0
@@ -76,20 +78,21 @@ module OptiFlag
76
78
  end
77
79
  end
78
80
  def flag_finder_and_stripper(flag,arity,args)
81
+ args = args.compact
79
82
  idx = args.index(flag)
80
83
  if idx == nil
81
84
  return [], args
82
85
  end
83
86
  the_range = idx..(idx + arity)
84
- flag_and_values = args[the_range]
85
- fragment = args[the_range].clone
87
+ fragment = args[the_range].clone.compact
86
88
  args[the_range] = nil
87
- return fragment, args
89
+ return fragment, args.compact
88
90
  end
89
91
  def populate_values(safe_args)
90
- find_the_flag_that_is_actually_used(safe_args)
91
- arg_copy = safe_args.clone
92
+ safe_args = find_the_flag_that_is_actually_used(safe_args)
93
+ arg_copy = safe_args.clone.compact
92
94
  @all_flags.values.each do |flag_obj|
95
+
93
96
  the_string_flag = flag_obj.as_the_form_that_is_actually_used
94
97
  flag_and_values, arg_copy =
95
98
  flag_finder_and_stripper(the_string_flag,flag_obj.the_arity,arg_copy)
@@ -99,9 +102,11 @@ module OptiFlag
99
102
  end
100
103
  flag_obj.value = flag_and_values[1] if flag_and_values.length ==2
101
104
  flag_obj.value = true if flag_and_values.length == 1 and flag_obj.the_arity == 0
105
+
102
106
  if flag_and_values.length == 1 and flag_obj.the_arity >0
103
- problem = "Argument(s) missing for flag #{ flag_obj.as_the_form_that_is_actually_used }"
104
- safe_args.errors ||= Errors.new
107
+
108
+ problem = "Argument(s) missing for flag : #{ flag_obj.as_the_form_that_is_actually_used }"
109
+ safe_args.errors ||= OptiFlag::Flagset::Errors.new
105
110
  safe_args.errors.validation_errors << problem
106
111
  end
107
112
  end
@@ -134,7 +139,7 @@ module OptiFlag
134
139
  value = flag_obj.value
135
140
  flag_obj.the_validation_rules.each do |proc|
136
141
  errors = safe_args.errors
137
- errors ||= Errors.new
142
+ errors ||= OptiFlag::Flagset::Errors.new
138
143
  proc.call flag_obj, errors.validation_errors
139
144
  if errors.validation_errors.length > 0
140
145
  safe_args.errors = errors
@@ -184,8 +189,8 @@ module OptiFlag
184
189
  end
185
190
  # private method
186
191
  def find_the_flag_that_is_actually_used(safe_args)
187
- there_might_be_errors = safe_args.errors || Errors.new
188
- args_copy = safe_args.clone
192
+ there_might_be_errors = safe_args.errors || OptiFlag::Flagset::Errors.new
193
+ args_copy = safe_args.clone.compact
189
194
  @all_flags.values.each do |x|
190
195
  shortform,longform = x.as_string_basic,x.as_string_extended
191
196
  all_forms = [shortform,longform] + x.as_alternate_forms
@@ -209,7 +214,7 @@ module OptiFlag
209
214
  return safe_args
210
215
  end
211
216
  def search_for_missing_character_switches(safe_args)
212
- these_args = safe_args.clone
217
+ these_args = safe_args.clone.compact
213
218
  return safe_args if @group == nil
214
219
  chars_found_for_this_group = {}
215
220
  all_chars = ""
@@ -240,11 +245,12 @@ module OptiFlag
240
245
  end
241
246
 
242
247
  def search_for_missing_flags(safe_args)
243
- there_might_be_errors = Errors.new
248
+ there_might_be_errors = OptiFlag::Flagset::Errors.new
244
249
  required_flags = @all_flags.values.sort do |x,y|
245
250
  x.order_added <=> y.order_added
246
251
  end.select{ |x| x.the_is_required }
247
- args_copy = safe_args.clone
252
+ #puts "Required flags #{required_flags}"
253
+ args_copy = safe_args.clone.compact
248
254
  required_flags.each do |x|
249
255
  shortform,longform = x.as_string_basic,x.as_string_extended
250
256
  all_forms = [shortform,longform] + x.as_alternate_forms
@@ -273,7 +279,7 @@ module OptiFlag
273
279
  return safe_args
274
280
  end
275
281
  def create_api(safe_args)
276
- safe_args.extend NewInterface
282
+ safe_args.extend OptiFlag::Flagset::NewInterface
277
283
  safe_args.flag_value = create_new_value_class()
278
284
  return safe_args
279
285
  end
@@ -2,7 +2,7 @@ require 'rake'
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = "optiflag"
4
4
  spec.require_path = '.'
5
- spec.version = "0.6.5"
5
+ spec.version = "0.7"
6
6
  spec.summary = "OptiFlag is an embeddable DSL library for declaring and using command-line options/flags in any Ruby program."
7
7
  spec.author = "Daniel Eklund"
8
8
  spec.email = "doeklund@gmail.com"
@@ -7,7 +7,7 @@
7
7
  # Copyright:: Copyright (c) 2006 Daniel O. Eklund. All rights reserved.
8
8
  # License:: Ruby license.
9
9
  module OptiFlag
10
- VERSION = "0.6.5"
10
+ VERSION = "0.7"
11
11
  end
12
12
 
13
13
  load 'optiflag-help.rb'
@@ -301,8 +301,9 @@ But the value must be one of the following: [#{ array_of_acceptable_values.join(
301
301
  end
302
302
  # clause-level flag-modifier
303
303
  def alternate_forms(*args)
304
- @the_alternate_forms = *args if args[0].class == Array
304
+ @the_alternate_forms = args[0] if args[0].class == Array
305
305
  @the_alternate_forms = @the_alternate_forms + args if args[0].class != Array
306
+
306
307
  end
307
308
  # clause-level flag-modifier
308
309
  def long_form(form)
@@ -377,7 +378,7 @@ module OptiFlag
377
378
  end
378
379
  @all_flags ||= {}
379
380
  obj = @all_flags[name]
380
- obj ||= EachFlag.new(name,flag,self)
381
+ obj ||= OptiFlag::Flagset::EachFlag.new(name,flag,self)
381
382
  obj.instance_eval &the_block if block_given?
382
383
  hash.each_pair do |fxn,val|
383
384
  obj.send(fxn,val)
@@ -645,7 +646,7 @@ module OptiFlag
645
646
  potential_opt_switch_flags, potential_methods =
646
647
  potential_methods.partition {|x| x =~ /\?$/ }
647
648
  potential_methods.each_slice(2) do |getter,setter|
648
- if setter == (getter + "=")
649
+ if setter.to_s == (getter.to_s + "=")
649
650
  valid_instance_var << [getter,setter];
650
651
  end
651
652
  end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: optiflag
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.6.5
7
- date: 2007-04-16 00:00:00 -04:00
6
+ version: "0.7"
7
+ date: 2009-10-19 00:00:00 -04:00
8
8
  summary: OptiFlag is an embeddable DSL library for declaring and using command-line options/flags in any Ruby program.
9
9
  require_paths:
10
10
  - .
@@ -29,110 +29,7 @@ post_install_message:
29
29
  authors:
30
30
  - Daniel Eklund
31
31
  files:
32
- - doc
33
32
  - examples
34
- - optiflag-help.rb
35
- - optiflag-parse.rb
36
- - optiflag.gemspec
37
- - optiflag.rb
38
- - quick.rb
39
- - ReleaseNotes.txt
40
- - testcases
41
- - doc/classes
42
- - doc/created.rid
43
- - doc/files
44
- - doc/fr_class_index.html
45
- - doc/fr_file_index.html
46
- - doc/fr_method_index.html
47
- - doc/index.html
48
- - doc/rdoc-style.css
49
- - doc/classes/OptiFlag
50
- - doc/classes/OptiFlag.html
51
- - doc/classes/OptiFlag.src
52
- - doc/classes/OptiFlag/Flagset
53
- - doc/classes/OptiFlag/Flagset.html
54
- - doc/classes/OptiFlag/Flagset.src
55
- - doc/classes/OptiFlag/Flagset/EachFlag.html
56
- - doc/classes/OptiFlag/Flagset/EachFlag.src
57
- - doc/classes/OptiFlag/Flagset/Errors.html
58
- - doc/classes/OptiFlag/Flagset/Errors.src
59
- - doc/classes/OptiFlag/Flagset/Help
60
- - doc/classes/OptiFlag/Flagset/Help.html
61
- - doc/classes/OptiFlag/Flagset/NewInterface.html
62
- - doc/classes/OptiFlag/Flagset/NewInterface.src
63
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000024.html
64
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000025.html
65
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000026.html
66
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000027.html
67
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000028.html
68
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000029.html
69
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000030.html
70
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000031.html
71
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000032.html
72
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000033.html
73
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000034.html
74
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000035.html
75
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000036.html
76
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000037.html
77
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000038.html
78
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000039.html
79
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000040.html
80
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000041.html
81
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000042.html
82
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000043.html
83
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000044.html
84
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000045.html
85
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000046.html
86
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000047.html
87
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000048.html
88
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000049.html
89
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000050.html
90
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000051.html
91
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000052.html
92
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000053.html
93
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000054.html
94
- - doc/classes/OptiFlag/Flagset/EachFlag.src/M000055.html
95
- - doc/classes/OptiFlag/Flagset/Errors.src/M000021.html
96
- - doc/classes/OptiFlag/Flagset/Errors.src/M000022.html
97
- - doc/classes/OptiFlag/Flagset/Errors.src/M000023.html
98
- - doc/classes/OptiFlag/Flagset/Errors.src/M000024.html
99
- - doc/classes/OptiFlag/Flagset/Errors.src/M000025.html
100
- - doc/classes/OptiFlag/Flagset/Errors.src/M000026.html
101
- - doc/classes/OptiFlag/Flagset/Help/Bundle.html
102
- - doc/classes/OptiFlag/Flagset/Help/Bundle.src
103
- - doc/classes/OptiFlag/Flagset/Help/StandardHelpBundle.html
104
- - doc/classes/OptiFlag/Flagset/Help/Bundle.src/M000018.html
105
- - doc/classes/OptiFlag/Flagset/Help/Bundle.src/M000019.html
106
- - doc/classes/OptiFlag/Flagset/NewInterface.src/M000017.html
107
- - doc/classes/OptiFlag/Flagset/NewInterface.src/M000018.html
108
- - doc/classes/OptiFlag/Flagset/NewInterface.src/M000019.html
109
- - doc/classes/OptiFlag/Flagset/NewInterface.src/M000020.html
110
- - doc/classes/OptiFlag/Flagset/NewInterface.src/M000021.html
111
- - doc/classes/OptiFlag/Flagset/NewInterface.src/M000022.html
112
- - doc/classes/OptiFlag/Flagset/NewInterface.src/M000023.html
113
- - doc/classes/OptiFlag/Flagset.src/M000003.html
114
- - doc/classes/OptiFlag/Flagset.src/M000004.html
115
- - doc/classes/OptiFlag/Flagset.src/M000005.html
116
- - doc/classes/OptiFlag/Flagset.src/M000006.html
117
- - doc/classes/OptiFlag/Flagset.src/M000007.html
118
- - doc/classes/OptiFlag/Flagset.src/M000008.html
119
- - doc/classes/OptiFlag/Flagset.src/M000009.html
120
- - doc/classes/OptiFlag/Flagset.src/M000010.html
121
- - doc/classes/OptiFlag/Flagset.src/M000011.html
122
- - doc/classes/OptiFlag/Flagset.src/M000012.html
123
- - doc/classes/OptiFlag/Flagset.src/M000013.html
124
- - doc/classes/OptiFlag/Flagset.src/M000014.html
125
- - doc/classes/OptiFlag/Flagset.src/M000015.html
126
- - doc/classes/OptiFlag/Flagset.src/M000016.html
127
- - doc/classes/OptiFlag/Flagset.src/M000017.html
128
- - doc/classes/OptiFlag.src/M000001.html
129
- - doc/classes/OptiFlag.src/M000002.html
130
- - doc/classes/OptiFlag.src/M000003.html
131
- - doc/files/optiflag-help_rb.html
132
- - doc/files/optiflag-parse_rb.html
133
- - doc/files/optiflag_rb.html
134
- - doc/files/optiflag_rb.src
135
- - doc/files/optiflag_rb.src/M000001.html
136
33
  - examples/example_1.rb
137
34
  - examples/example_1_1.rb
138
35
  - examples/example_1_2.rb
@@ -147,6 +44,12 @@ files:
147
44
  - examples/example_6.rb
148
45
  - examples/example_7.rb
149
46
  - examples/example_8.rb
47
+ - optiflag-help.rb
48
+ - optiflag-parse.rb
49
+ - optiflag.gemspec
50
+ - optiflag.rb
51
+ - ReleaseNotes.txt
52
+ - testcases
150
53
  - testcases/tc_advanced_usage_helping.rb
151
54
  - testcases/tc_basic_alternate_forms.rb
152
55
  - testcases/tc_basic_char_flags.rb
@@ -1,439 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Module: OptiFlag</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Module</strong></td>
53
- <td class="class-name-in-header">OptiFlag</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../files/optiflag-help_rb.html">
59
- optiflag-help.rb
60
- </a>
61
- <br />
62
- <a href="../files/optiflag-parse_rb.html">
63
- optiflag-parse.rb
64
- </a>
65
- <br />
66
- <a href="../files/optiflag_rb.html">
67
- optiflag.rb
68
- </a>
69
- <br />
70
- </td>
71
- </tr>
72
-
73
- </table>
74
- </div>
75
- <!-- banner header -->
76
-
77
- <div id="bodyContent">
78
-
79
-
80
-
81
- <div id="contextContent">
82
-
83
- <div id="description">
84
- <p>
85
- <a href="OptiFlag.html">OptiFlag</a> is the module that provides
86
- namespacing for the entire optiflag functionality. For usage and examples,
87
- see <a href="http://optiflag.rubyforge.org">optiflag.rubyforge.org</a>
88
- </p>
89
- <h1>Terminology</h1>
90
- <p>
91
- Please treat the following terminology as specific only to the <a
92
- href="OptiFlag.html">OptiFlag</a> code suite. In the remaining RDoc, we
93
- shall try to emphasize this consistent terminology with italics. If you see
94
- an italicized phrase, chances are that it is defined here.
95
- </p>
96
- <h2>Flag Set Declaration</h2>
97
- <p>
98
- A <em>flag set declaration</em> is a set of flag declarations created by
99
- the user of the <a href="OptiFlag.html">OptiFlag</a> suite and corresponds
100
- to the following code snippet:
101
- </p>
102
- <pre>
103
- module AppArgs extend OptiFlagSet
104
- # individual flag declaration goes here ...
105
- # ... and here
106
- end
107
- </pre>
108
- <p>
109
- In this case, the module <b>AppArgs</b> is a <em>flag set declaration</em>,
110
- and all code within the module definition (i.e. up to the end of <b>end</b>
111
- of the module) is either a <em>flag declaration</em> or a special command.
112
- </p>
113
- <p>
114
- Another way to treat this declaration is as a demarcation between the
115
- normal Ruby world and the mini-DSL (Domain Specific Language) that <a
116
- href="OptiFlag.html">OptiFlag</a> offers. In this view, the declaration
117
- provides a DSL-zone in which the DSL is allowed.
118
- </p>
119
- <pre>
120
- module AppArgs extend OptiFlagSet
121
- # DSL-zone
122
- # DSL-zone (for declaring and modifying flags)
123
- # DSL-zone
124
- end
125
- </pre>
126
- <p>
127
- the first line
128
- </p>
129
- <pre>
130
- module AppArgs extend OptiFlagSet
131
- </pre>
132
- <p>
133
- is really just rote.
134
- </p>
135
- <p>
136
- Supply your own module argument name and make sure it extends this <a
137
- href="OptiFlag/Flagset.html">OptiFlag::Flagset</a> as is written. You will
138
- then have a scoped space to write in a command line DSL.
139
- </p>
140
- <h2>Flag Declaration</h2>
141
- <p>
142
- A <em>flag declaration</em> is placed within a <em>flag set
143
- declaration</em> to indicate that one input parameter per declaration is
144
- requested from the command line. A <em>flag declaration</em> is the
145
- mini-DSL&#8216;s main programming construct. In the following code, four
146
- <em>flag declarations</em> are placed within the overall <em>flag
147
- <b>set</b> declaration</em> named AppArgs:
148
- </p>
149
- <pre>
150
- module AppArgs extend OptiFlagSet
151
- flag &quot;dir&quot;
152
- flag &quot;log&quot;
153
- flag &quot;username&quot;
154
- flag &quot;password&quot;
155
- end
156
- </pre>
157
- <p>
158
- Please note that there are other <em>flag set declaration</em> nouns other
159
- than flag. For instance in the following snippet:
160
- </p>
161
- <pre>
162
- module Example extend OptiFlagSet
163
- flag &quot;dir&quot; do
164
- alternate_forms &quot;directory&quot;,&quot;D&quot;,&quot;d&quot;
165
- description &quot;The Appliction Directory&quot;
166
- end
167
- optional_flag &quot;log&quot; do
168
- description &quot;The directory in which to find the log files&quot;
169
- long_form &quot;logging-directory&quot; # long form is keyed after the '--' symbol
170
- end
171
- flag &quot;username&quot;, :description =&gt; &quot;Database username.&quot; # alternate form
172
- flag &quot;password&quot; do
173
- description &quot;Database password.&quot;
174
- end
175
- usage_flag &quot;h&quot;,&quot;help&quot;,&quot;?&quot;
176
- extended_help_flag &quot;superhelp&quot;
177
-
178
- and_process!
179
- end
180
- </pre>
181
- <p>
182
- there are six <em>flag declarations</em> in total:
183
- </p>
184
- <ul>
185
- <li>a flag named &quot;dir&quot;
186
-
187
- </li>
188
- <li>an optional flag named &quot;log&quot;
189
-
190
- </li>
191
- <li>a flag named &quot;username&quot;
192
-
193
- </li>
194
- <li>a flag named &quot;password&quot;
195
-
196
- </li>
197
- <li>a usage flag for summoning help on how to use the flags
198
-
199
- </li>
200
- <li>an extended help flag for summoning detailed usage for the flags
201
-
202
- </li>
203
- </ul>
204
- <p>
205
- Everything else is either a <em>clause level modifier</em> (e.g.
206
- alternate_forms, description, etc.) or a <em>special command</em>.
207
- </p>
208
- <p>
209
- <b>For a list of all <em>flag set declarations</em> and how to use them,
210
- see the RDoc for the <a href="OptiFlag/Flagset.html">OptiFlag::Flagset</a>
211
- module.</b>
212
- </p>
213
- <h2>Clause Level Modifier</h2>
214
- <p>
215
- As seen above, a <em>clause level modifier</em> is a word used to modify
216
- the basic flag, usually within a nested do block. It it this nesting which
217
- has inspired the use of the word clause. For instance:
218
- </p>
219
- <pre>
220
- module Example extend OptiFlagSet
221
- flag &quot;dir&quot; do
222
- alternate_forms &quot;directory&quot;,&quot;D&quot;,&quot;d&quot;
223
- description &quot;The Appliction Directory&quot;
224
- end
225
- end
226
- </pre>
227
- <p>
228
- We could read this as a sentence: &#8216;Create a flag &quot;dir&quot;
229
- which has three alternate forms &quot;directory&quot;, &quot;D&quot;, and
230
- &quot;d&quot; and which has a description that reads &quot;The Application
231
- Directory&#8217;.
232
- </p>
233
- <p>
234
- For the most part, these <em>clause level modifiers</em> are nested within
235
- a do-block, though <a href="OptiFlag.html">OptiFlag</a> allows us to
236
- conserve vertical space by using symbol hashes. (It is recommended that one
237
- only uses these in simple cases). For instance, the following two <em>flag
238
- set declarations</em> are equivalent:
239
- </p>
240
- <pre>
241
- module Example extend OptiFlagSet
242
- flag &quot;username&quot;, :description =&gt; &quot;Database username.&quot; # alternate form
243
-
244
- and_process!
245
- end
246
- </pre>
247
- <p>
248
- and
249
- </p>
250
- <pre>
251
- module Example extend OptiFlagSet
252
- flag &quot;username&quot; do
253
- description &quot;Database username.&quot;
254
- end
255
-
256
- and_process!
257
- end
258
- </pre>
259
- <p>
260
- with the first being a syntactically friendly hash of the <em>clause level
261
- modifier</em> as a symbol pointing to the value of the modification.
262
- </p>
263
- <p>
264
- For a complete list of <em>clause level modifiers</em> see the RDoc for <a
265
- href="OptiFlag/Flagset/EachFlag.html">OptiFlag::Flagset::EachFlag</a>
266
- </p>
267
-
268
- </div>
269
-
270
-
271
- </div>
272
-
273
- <div id="method-list">
274
- <h3 class="section-bar">Methods</h3>
275
-
276
- <div class="name-list">
277
- <a href="#M000003">Flagset</a>&nbsp;&nbsp;
278
- <a href="#M000002">using_object</a>&nbsp;&nbsp;
279
- </div>
280
- </div>
281
-
282
- </div>
283
-
284
-
285
- <!-- if includes -->
286
-
287
- <div id="section">
288
-
289
- <div id="class-list">
290
- <h3 class="section-bar">Classes and Modules</h3>
291
-
292
- Module <a href="OptiFlag/Flagset.html" class="link">OptiFlag::Flagset</a><br />
293
-
294
- </div>
295
-
296
- <div id="constants-list">
297
- <h3 class="section-bar">Constants</h3>
298
-
299
- <div class="name-list">
300
- <table summary="Constants">
301
- <tr class="top-aligned-row context-row">
302
- <td class="context-item-name">VERSION</td>
303
- <td>=</td>
304
- <td class="context-item-value">&quot;0.7&quot;</td>
305
- </tr>
306
- </table>
307
- </div>
308
- </div>
309
-
310
-
311
-
312
-
313
-
314
-
315
- <!-- if method_list -->
316
- <div id="methods">
317
- <h3 class="section-bar">Public Class methods</h3>
318
-
319
- <div id="method-M000003" class="method-detail">
320
- <a name="M000003"></a>
321
-
322
- <div class="method-heading">
323
- <a href="OptiFlag.src/M000003.html" target="Code" class="method-signature"
324
- onclick="popupCode('OptiFlag.src/M000003.html');return false;">
325
- <span class="method-name">Flagset</span><span class="method-args">(hash)</span>
326
- </a>
327
- </div>
328
-
329
- <div class="method-description">
330
- <p>
331
- This is a method that looks like a module. It is an excellent example of
332
- the syntactic tricks that ruby permits us. This method allows us to provide
333
- code like the following:
334
- </p>
335
- <pre>
336
- module Example extend OptiFlagSet(:flag_symbol =&gt; &quot;/&quot;)
337
- flag &quot;dir&quot;
338
- flag &quot;log&quot;
339
- flag &quot;username&quot;
340
- flag &quot;password&quot;
341
-
342
- and_process!
343
- end
344
- </pre>
345
- <p>
346
- You will note that the top line looks a lot like the standard top line
347
- </p>
348
- <pre>
349
- # our top line
350
- module Example extend OptiFlagSet(:flag_symbol =&gt; &quot;/&quot;)
351
- </pre>
352
- <p>
353
- versus
354
- </p>
355
- <pre>
356
- # standard top line
357
- module Example extend OptiFlagSet
358
- </pre>
359
- <p>
360
- The difference is that while the latter (a standard top line) is a
361
- reference to a module, the former is a call to this method, that
362
- <b>returns</b> the <a href="OptiFlag/Flagset.html">OptiFlag::Flagset</a>
363
- module with some defaults changed.
364
- </p>
365
- <p>
366
- As of now the only symbol/method supported by this method that looks like a
367
- module, is the &#8216;<a
368
- href="OptiFlag/Flagset.html#M000005">OptiFlag::Flagset.flag_symbol</a>&#8217;
369
- class method.
370
- </p>
371
- <p>
372
- For those still not understanding the syntactic trick, or who find it odd,
373
- consider that something similar to this is done in the ruby core language
374
- using the proxy/delegate pattern. (See delegate.rb in the Ruby core
375
- library)
376
- </p>
377
- <pre>
378
- class Tempfile &lt; DelegateClass(File)
379
- # ...
380
- # ...
381
- end
382
- </pre>
383
- <p>
384
- You will note that the DelegateClass() is also a method that superficially
385
- resembles a class that parameterizes itself. This can be done because Ruby
386
- expects:
387
- </p>
388
- <pre>
389
- class &lt;identifier&gt; &lt; &lt;expression&gt;
390
- </pre>
391
- <p>
392
- and not
393
- </p>
394
- <pre>
395
- class &lt;identifier&gt; &lt; &lt;identifier&gt;
396
- </pre>
397
- <p>
398
- like some other languages. And likewise
399
- </p>
400
- <pre>
401
- module &lt;identifier&gt; extend &lt;expression&gt;
402
- </pre>
403
- <p>
404
- which allows us to create this method which has the exact same name as the
405
- module. Clever ruby.
406
- </p>
407
- </div>
408
- </div>
409
-
410
- <div id="method-M000002" class="method-detail">
411
- <a name="M000002"></a>
412
-
413
- <div class="method-heading">
414
- <a href="OptiFlag.src/M000002.html" target="Code" class="method-signature"
415
- onclick="popupCode('OptiFlag.src/M000002.html');return false;">
416
- <span class="method-name">using_object</span><span class="method-args">(a_single_object,&amp;the_block)</span>
417
- </a>
418
- </div>
419
-
420
- <div class="method-description">
421
- <p>
422
- Special command (at the same level as a <em>flag declaration</em>)
423
- </p>
424
- </div>
425
- </div>
426
-
427
-
428
- </div>
429
-
430
-
431
- </div>
432
-
433
-
434
- <div id="validator-badges">
435
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
436
- </div>
437
-
438
- </body>
439
- </html>