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.
- data/examples/example_2_4.rb +1 -1
- data/examples/example_3.rb +4 -2
- data/examples/example_6.rb +3 -3
- data/optiflag-parse.rb +24 -18
- data/optiflag.gemspec +1 -1
- data/optiflag.rb +5 -4
- metadata +9 -106
- data/doc/classes/OptiFlag.html +0 -439
- data/doc/classes/OptiFlag.src/M000001.html +0 -49
- data/doc/classes/OptiFlag.src/M000002.html +0 -49
- data/doc/classes/OptiFlag.src/M000003.html +0 -30
- data/doc/classes/OptiFlag/Flagset.html +0 -459
- data/doc/classes/OptiFlag/Flagset.src/M000003.html +0 -45
- data/doc/classes/OptiFlag/Flagset.src/M000004.html +0 -45
- data/doc/classes/OptiFlag/Flagset.src/M000005.html +0 -18
- data/doc/classes/OptiFlag/Flagset.src/M000006.html +0 -20
- data/doc/classes/OptiFlag/Flagset.src/M000007.html +0 -35
- data/doc/classes/OptiFlag/Flagset.src/M000008.html +0 -23
- data/doc/classes/OptiFlag/Flagset.src/M000009.html +0 -24
- data/doc/classes/OptiFlag/Flagset.src/M000010.html +0 -28
- data/doc/classes/OptiFlag/Flagset.src/M000011.html +0 -20
- data/doc/classes/OptiFlag/Flagset.src/M000012.html +0 -24
- data/doc/classes/OptiFlag/Flagset.src/M000013.html +0 -24
- data/doc/classes/OptiFlag/Flagset.src/M000014.html +0 -32
- data/doc/classes/OptiFlag/Flagset.src/M000015.html +0 -25
- data/doc/classes/OptiFlag/Flagset.src/M000016.html +0 -53
- data/doc/classes/OptiFlag/Flagset.src/M000017.html +0 -53
- data/doc/classes/OptiFlag/Flagset/EachFlag.html +0 -930
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000024.html +0 -36
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000025.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000026.html +0 -36
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000027.html +0 -36
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000028.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000029.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000030.html +0 -19
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000031.html +0 -19
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000032.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000033.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000034.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000035.html +0 -22
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000036.html +0 -19
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000037.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000038.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000039.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000040.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000041.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000042.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000043.html +0 -19
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000044.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000045.html +0 -19
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000046.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000047.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000048.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000049.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000050.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000051.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000052.html +0 -20
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000053.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000054.html +0 -18
- data/doc/classes/OptiFlag/Flagset/EachFlag.src/M000055.html +0 -22
- data/doc/classes/OptiFlag/Flagset/Errors.html +0 -192
- data/doc/classes/OptiFlag/Flagset/Errors.src/M000021.html +0 -18
- data/doc/classes/OptiFlag/Flagset/Errors.src/M000022.html +0 -19
- data/doc/classes/OptiFlag/Flagset/Errors.src/M000023.html +0 -18
- data/doc/classes/OptiFlag/Flagset/Errors.src/M000024.html +0 -18
- data/doc/classes/OptiFlag/Flagset/Errors.src/M000025.html +0 -19
- data/doc/classes/OptiFlag/Flagset/Errors.src/M000026.html +0 -36
- data/doc/classes/OptiFlag/Flagset/Help.html +0 -125
- data/doc/classes/OptiFlag/Flagset/Help/Bundle.html +0 -160
- data/doc/classes/OptiFlag/Flagset/Help/Bundle.src/M000018.html +0 -18
- data/doc/classes/OptiFlag/Flagset/Help/Bundle.src/M000019.html +0 -18
- data/doc/classes/OptiFlag/Flagset/Help/StandardHelpBundle.html +0 -118
- data/doc/classes/OptiFlag/Flagset/NewInterface.html +0 -296
- data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000017.html +0 -18
- data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000018.html +0 -18
- data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000019.html +0 -18
- data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000020.html +0 -18
- data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000021.html +0 -18
- data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000022.html +0 -18
- data/doc/classes/OptiFlag/Flagset/NewInterface.src/M000023.html +0 -18
- data/doc/created.rid +0 -1
- data/doc/files/optiflag-help_rb.html +0 -101
- data/doc/files/optiflag-parse_rb.html +0 -101
- data/doc/files/optiflag_rb.html +0 -167
- data/doc/files/optiflag_rb.src/M000001.html +0 -18
- data/doc/fr_class_index.html +0 -34
- data/doc/fr_file_index.html +0 -29
- data/doc/fr_method_index.html +0 -82
- data/doc/index.html +0 -24
- data/doc/rdoc-style.css +0 -208
- data/quick.rb +0 -12
data/examples/example_2_4.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'optiflag'
|
|
2
2
|
|
|
3
3
|
# Title: Other clause-level modifiers, like arity and flag symbol
|
|
4
|
-
#
|
|
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"
|
data/examples/example_3.rb
CHANGED
|
@@ -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",
|
|
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"
|
|
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!
|
data/examples/example_6.rb
CHANGED
|
@@ -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 "
|
|
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
|
|
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
|
|
data/optiflag-parse.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
104
|
-
|
|
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
|
-
|
|
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
|
data/optiflag.gemspec
CHANGED
|
@@ -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.
|
|
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"
|
data/optiflag.rb
CHANGED
|
@@ -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.
|
|
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 =
|
|
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.
|
|
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.
|
|
7
|
-
date:
|
|
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
|
data/doc/classes/OptiFlag.html
DELETED
|
@@ -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‘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 "dir"
|
|
152
|
-
flag "log"
|
|
153
|
-
flag "username"
|
|
154
|
-
flag "password"
|
|
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 "dir" do
|
|
164
|
-
alternate_forms "directory","D","d"
|
|
165
|
-
description "The Appliction Directory"
|
|
166
|
-
end
|
|
167
|
-
optional_flag "log" do
|
|
168
|
-
description "The directory in which to find the log files"
|
|
169
|
-
long_form "logging-directory" # long form is keyed after the '--' symbol
|
|
170
|
-
end
|
|
171
|
-
flag "username", :description => "Database username." # alternate form
|
|
172
|
-
flag "password" do
|
|
173
|
-
description "Database password."
|
|
174
|
-
end
|
|
175
|
-
usage_flag "h","help","?"
|
|
176
|
-
extended_help_flag "superhelp"
|
|
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 "dir"
|
|
186
|
-
|
|
187
|
-
</li>
|
|
188
|
-
<li>an optional flag named "log"
|
|
189
|
-
|
|
190
|
-
</li>
|
|
191
|
-
<li>a flag named "username"
|
|
192
|
-
|
|
193
|
-
</li>
|
|
194
|
-
<li>a flag named "password"
|
|
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 "dir" do
|
|
222
|
-
alternate_forms "directory","D","d"
|
|
223
|
-
description "The Appliction Directory"
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
</pre>
|
|
227
|
-
<p>
|
|
228
|
-
We could read this as a sentence: ‘Create a flag "dir"
|
|
229
|
-
which has three alternate forms "directory", "D", and
|
|
230
|
-
"d" and which has a description that reads "The Application
|
|
231
|
-
Directory’.
|
|
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 "username", :description => "Database username." # 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 "username" do
|
|
253
|
-
description "Database username."
|
|
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>
|
|
278
|
-
<a href="#M000002">using_object</a>
|
|
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">"0.7"</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 => "/")
|
|
337
|
-
flag "dir"
|
|
338
|
-
flag "log"
|
|
339
|
-
flag "username"
|
|
340
|
-
flag "password"
|
|
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 => "/")
|
|
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 ‘<a
|
|
368
|
-
href="OptiFlag/Flagset.html#M000005">OptiFlag::Flagset.flag_symbol</a>’
|
|
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 < 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 <identifier> < <expression>
|
|
390
|
-
</pre>
|
|
391
|
-
<p>
|
|
392
|
-
and not
|
|
393
|
-
</p>
|
|
394
|
-
<pre>
|
|
395
|
-
class <identifier> < <identifier>
|
|
396
|
-
</pre>
|
|
397
|
-
<p>
|
|
398
|
-
like some other languages. And likewise
|
|
399
|
-
</p>
|
|
400
|
-
<pre>
|
|
401
|
-
module <identifier> extend <expression>
|
|
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,&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>
|