optiflag 0.6.5 → 0.7

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.
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>