rprogram 0.1.1 → 0.1.2
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/History.txt +9 -2
- data/Manifest.txt +3 -0
- data/lib/rprogram/extensions/array.rb +7 -0
- data/lib/rprogram/extensions/hash.rb +15 -0
- data/lib/rprogram/extensions.rb +2 -0
- data/lib/rprogram/option.rb +26 -17
- data/lib/rprogram/option_list.rb +27 -0
- data/lib/rprogram/task.rb +53 -20
- data/lib/rprogram/version.rb +1 -1
- metadata +4 -1
data/History.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.1.2 / 2008-01-18
|
2
|
+
|
3
|
+
* DRY'ed up lib/rprogram/task.
|
4
|
+
* Added Task.define_option.
|
5
|
+
* Added OptionList so that Option may contain sub-options.
|
6
|
+
* Touched up documenation.
|
7
|
+
|
1
8
|
== 0.1.1 / 2008-01-18
|
2
9
|
|
3
10
|
* Added support for the Option argument separators.
|
@@ -14,8 +21,8 @@
|
|
14
21
|
== 0.1.0 / 2008-01-17
|
15
22
|
|
16
23
|
* Removed redundent methods in Program:
|
17
|
-
|
18
|
-
|
24
|
+
* Program.find_by_name
|
25
|
+
* Program.find_by_names
|
19
26
|
* Added Program#create.
|
20
27
|
* Made Program Nameable by default.
|
21
28
|
* Prevented arbitrary command-injection in Program#run.
|
data/Manifest.txt
CHANGED
@@ -9,7 +9,10 @@ lib/rprogram/exceptions/program_not_found.rb
|
|
9
9
|
lib/rprogram/exceptions.rb
|
10
10
|
lib/rprogram/extensions/meta/object.rb
|
11
11
|
lib/rprogram/extensions/meta.rb
|
12
|
+
lib/rprogram/extensions/array.rb
|
13
|
+
lib/rprogram/extensions/hash.rb
|
12
14
|
lib/rprogram/extensions.rb
|
15
|
+
lib/rprogram/option_list.rb
|
13
16
|
lib/rprogram/option.rb
|
14
17
|
lib/rprogram/non_option.rb
|
15
18
|
lib/rprogram/options.rb
|
data/lib/rprogram/extensions.rb
CHANGED
data/lib/rprogram/option.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'rprogram/extensions'
|
2
|
+
|
1
3
|
module RProgram
|
2
4
|
class Option
|
3
5
|
|
@@ -13,21 +15,30 @@ module RProgram
|
|
13
15
|
# Argument separator
|
14
16
|
attr_reader :separator
|
15
17
|
|
18
|
+
# Does the option contain sub-options
|
19
|
+
attr_reader :sub_options
|
20
|
+
|
16
21
|
#
|
17
22
|
# Creates a new Option object with the specified _options_. If a _block_
|
18
23
|
# is given it will be used for the custom formating of the option. If a
|
19
24
|
# _block_ is not given, the option will use the default_format when
|
20
25
|
# generating the arguments.
|
21
26
|
#
|
22
|
-
# _options_
|
27
|
+
# _options_ must contain the following key:
|
23
28
|
# <tt>:flag</tt>:: The command-line flag to use.
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# <tt>:
|
29
|
+
#
|
30
|
+
# _options_ may also contain the following keys:
|
31
|
+
# <tt>:equals</tt>:: Implies the option maybe formated as
|
32
|
+
# <tt>"--flag=value"</tt>. Defaults to +falue+, if
|
33
|
+
# not given.
|
34
|
+
# <tt>:multuple</tt>:: Specifies the option maybe given an Array of
|
27
35
|
# values. Defaults to +false+, if not given.
|
28
36
|
# <tt>:separator</tt>:: The separator to use for formating multiple
|
29
37
|
# arguments into one +String+. Cannot be used
|
30
|
-
# with
|
38
|
+
# with <tt>:multiple</tt>.
|
39
|
+
# <tt>:sub_options</tt>:: Specifies that the option contains
|
40
|
+
# sub-options. Defaults to false, if not given.
|
41
|
+
#
|
31
42
|
#
|
32
43
|
def initialize(options={},&block)
|
33
44
|
@flag = options[:flag]
|
@@ -35,6 +46,7 @@ module RProgram
|
|
35
46
|
@equals = options[:equals] || false
|
36
47
|
@multiple = options[:multiple] || false
|
37
48
|
@separator = options[:separator]
|
49
|
+
@sub_options = options[:sub_options] || false
|
38
50
|
|
39
51
|
@formating = block
|
40
52
|
end
|
@@ -47,24 +59,21 @@ module RProgram
|
|
47
59
|
return [@flag] if value==true
|
48
60
|
return [] if (value==nil || value==false)
|
49
61
|
|
50
|
-
if value.
|
51
|
-
value = value.
|
52
|
-
elsif value.kind_of?(Array)
|
53
|
-
value = value.compact
|
62
|
+
if value.respond_to?(:arguments)
|
63
|
+
value = value.arguments
|
54
64
|
end
|
55
65
|
|
56
66
|
if @multiple
|
57
|
-
|
58
|
-
|
59
|
-
value.each { |arg| args += format(arg) }
|
60
|
-
return args
|
61
|
-
else
|
62
|
-
if (value.kind_of?(Array) && @separator)
|
63
|
-
value = value.join(@separator)
|
67
|
+
if value.respond_to?(:map)
|
68
|
+
return value.map { |arg| format(arg) }
|
64
69
|
end
|
70
|
+
end
|
65
71
|
|
66
|
-
|
72
|
+
if (value.kind_of?(Array) && @separator)
|
73
|
+
value = value.join(@separator)
|
67
74
|
end
|
75
|
+
|
76
|
+
return format(value)
|
68
77
|
end
|
69
78
|
|
70
79
|
protected
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rprogram/extensions/hash'
|
2
|
+
|
3
|
+
module RProgram
|
4
|
+
class OptionList < Hash
|
5
|
+
|
6
|
+
def initialize(options={})
|
7
|
+
super(options)
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def method_missing(sym,*args,&block)
|
13
|
+
name = sym.to_s
|
14
|
+
|
15
|
+
unless block
|
16
|
+
if (name =~ /=$/ && args.length==1)
|
17
|
+
return self[name.chop.to_sym] = args[0]
|
18
|
+
elsif args.length==0
|
19
|
+
return self[sym]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
super(sym,*args,&block)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
data/lib/rprogram/task.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rprogram/options'
|
2
|
+
require 'rprogram/option_list'
|
2
3
|
|
3
4
|
module RProgram
|
4
5
|
class Task
|
@@ -163,43 +164,71 @@ module RProgram
|
|
163
164
|
end
|
164
165
|
|
165
166
|
#
|
166
|
-
# Defines a long-option with the
|
167
|
+
# Defines a long-option with the specified _opts_.
|
168
|
+
#
|
169
|
+
# _opts_ must contain the following keys:
|
170
|
+
# <tt>:flag</tt>:: The flag to use for the option.
|
171
|
+
#
|
172
|
+
# _opts_ may also contain the following keys:
|
173
|
+
# <tt>:name</tt>:: The name of the option. Defaults to the
|
174
|
+
# flag_namify'ed form of <tt>opts[:flag]</tt>, if not
|
175
|
+
# given.
|
176
|
+
# <tt>:multiply</tt>:: Specifies that the option may appear multiple
|
177
|
+
# times in the arguments.
|
178
|
+
# <tt>:sub_options</tt>:: Specifies that the option contains multiple
|
179
|
+
# sub-options.
|
167
180
|
#
|
168
181
|
# long_option :flag => '--output'
|
169
182
|
#
|
170
183
|
# long_option :flag => '-f', :name => :file
|
171
184
|
#
|
172
185
|
def self.long_option(opts={},&block)
|
173
|
-
|
174
|
-
method_name = (opts[:name] || Task.flag_namify(flag)).to_sym
|
175
|
-
|
176
|
-
self.options[method_name] = Option.new(opts,&block)
|
186
|
+
opts[:name] ||= Task.flag_namify(opts[:flag])
|
177
187
|
|
178
|
-
|
179
|
-
if opts[:multiple]
|
180
|
-
@options[method_name] ||= []
|
181
|
-
else
|
182
|
-
@options[method_name]
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
class_def("#{method_name}=") do |value|
|
187
|
-
@options[method_name] = value
|
188
|
-
end
|
188
|
+
define_option(opts,&block)
|
189
189
|
end
|
190
190
|
|
191
191
|
#
|
192
|
-
# Defines a short_option with the
|
192
|
+
# Defines a short_option with the specified _opts_.
|
193
|
+
#
|
194
|
+
# _opts_ must contain the following keys:
|
195
|
+
# <tt>:name</tt>:: The name of the option.
|
196
|
+
# <tt>:flag</tt>:: The flag to use for the option.
|
197
|
+
#
|
198
|
+
# _opts_ may also contain the following keys:
|
199
|
+
# <tt>:multiply</tt>:: Specifies that the option may appear multiple
|
200
|
+
# times in the arguments.
|
201
|
+
# <tt>:sub_options</tt>:: Specifies that the option contains multiple
|
202
|
+
# sub-options.
|
193
203
|
#
|
194
204
|
# short_option :flag => '-c', :name => :count
|
195
205
|
#
|
196
|
-
def self.short_option(opts
|
206
|
+
def self.short_option(opts,&block)
|
207
|
+
define_option(opts,&block)
|
208
|
+
end
|
209
|
+
|
210
|
+
#
|
211
|
+
# Defines an option with the specified _opts_ and the given _block_.
|
212
|
+
#
|
213
|
+
# _opts_ must contain the following keys:
|
214
|
+
# <tt>:name</tt>:: The name of the option.
|
215
|
+
# <tt>:flag</tt>:: The flag to use for the option.
|
216
|
+
#
|
217
|
+
# _opts_ may also contain the following keys:
|
218
|
+
# <tt>:multiply</tt>:: Specifies that the option may appear multiple
|
219
|
+
# times in the arguments.
|
220
|
+
# <tt>:sub_options</tt>:: Specifies that the option contains multiple
|
221
|
+
# sub-options.
|
222
|
+
#
|
223
|
+
def self.define_option(opts,&block)
|
197
224
|
method_name = opts[:name].to_sym
|
198
225
|
|
199
226
|
self.options[method_name] = Option.new(opts,&block)
|
200
227
|
|
201
228
|
class_def(method_name) do
|
202
|
-
if opts[:
|
229
|
+
if opts[:sub_options]
|
230
|
+
@options[method_name] ||= OptionList.new
|
231
|
+
elsif opts[:multiple]
|
203
232
|
@options[method_name] ||= []
|
204
233
|
else
|
205
234
|
@options[method_name]
|
@@ -207,7 +236,11 @@ module RProgram
|
|
207
236
|
end
|
208
237
|
|
209
238
|
class_def("#{method_name}=") do |value|
|
210
|
-
|
239
|
+
if opts[:sub_options]
|
240
|
+
@options[method_name] = OptionList.new(value)
|
241
|
+
else
|
242
|
+
@options[method_name] = value
|
243
|
+
end
|
211
244
|
end
|
212
245
|
end
|
213
246
|
|
data/lib/rprogram/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rprogram
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Postmodern Modulus III
|
@@ -43,7 +43,10 @@ files:
|
|
43
43
|
- lib/rprogram/exceptions.rb
|
44
44
|
- lib/rprogram/extensions/meta/object.rb
|
45
45
|
- lib/rprogram/extensions/meta.rb
|
46
|
+
- lib/rprogram/extensions/array.rb
|
47
|
+
- lib/rprogram/extensions/hash.rb
|
46
48
|
- lib/rprogram/extensions.rb
|
49
|
+
- lib/rprogram/option_list.rb
|
47
50
|
- lib/rprogram/option.rb
|
48
51
|
- lib/rprogram/non_option.rb
|
49
52
|
- lib/rprogram/options.rb
|