main 4.2.0 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -0
- data/a.rb +2 -10
- data/lib/main.rb +10 -1
- data/lib/main/parameter.rb +8 -10
- data/lib/main/program/instance_methods.rb +3 -1
- data/main.gemspec +2 -2
- data/test/main.rb +23 -5
- metadata +38 -13
data/LICENSE
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
same as Ruby's
|
data/a.rb
CHANGED
data/lib/main.rb
CHANGED
@@ -2,7 +2,7 @@ module Main
|
|
2
2
|
#
|
3
3
|
# top level constants
|
4
4
|
#
|
5
|
-
Main::VERSION = '4.
|
5
|
+
Main::VERSION = '4.3.0' unless
|
6
6
|
defined? Main::VERSION
|
7
7
|
def self.version() Main::VERSION end
|
8
8
|
|
@@ -19,6 +19,9 @@ module Main
|
|
19
19
|
require 'logger'
|
20
20
|
require 'enumerator'
|
21
21
|
require 'set'
|
22
|
+
require 'uri'
|
23
|
+
require 'time'
|
24
|
+
require 'date'
|
22
25
|
#
|
23
26
|
# use gems to pick up dependancies
|
24
27
|
#
|
@@ -28,6 +31,12 @@ module Main
|
|
28
31
|
42
|
29
32
|
end
|
30
33
|
|
34
|
+
begin
|
35
|
+
require 'chronic'
|
36
|
+
rescue LoadError
|
37
|
+
42
|
38
|
+
end
|
39
|
+
|
31
40
|
require 'fattr'
|
32
41
|
require 'arrayfields'
|
33
42
|
#
|
data/lib/main/parameter.rb
CHANGED
@@ -184,14 +184,6 @@ module Main
|
|
184
184
|
|
185
185
|
arity = min
|
186
186
|
|
187
|
-
=begin
|
188
|
-
puts
|
189
|
-
p :values => values
|
190
|
-
p :arity => arity
|
191
|
-
p :argument_required => argument_required?
|
192
|
-
p :argument_none => argument_none?
|
193
|
-
puts
|
194
|
-
=end
|
195
187
|
if values.size < arity
|
196
188
|
if argument_optional?
|
197
189
|
raise ex, "#{ typename }) #{ values.size }/#{ sign }#{ arity }" if(values.size < arity and values.size > 0)
|
@@ -204,8 +196,14 @@ puts
|
|
204
196
|
def apply_casting
|
205
197
|
if cast?
|
206
198
|
op = cast.respond_to?('call') ? cast : Cast[cast]
|
207
|
-
|
208
|
-
|
199
|
+
case op.arity
|
200
|
+
when -1
|
201
|
+
replacement = Parameter.wrap_errors{ op.call(*values) }
|
202
|
+
values.replace(replacement)
|
203
|
+
else
|
204
|
+
values.map! do |val|
|
205
|
+
Parameter.wrap_errors{ op.call val }
|
206
|
+
end
|
209
207
|
end
|
210
208
|
end
|
211
209
|
end
|
@@ -12,6 +12,7 @@ module Main
|
|
12
12
|
fattr('stderr'){ main.stderr }
|
13
13
|
fattr('logger'){ main.logger }
|
14
14
|
fattr('params')
|
15
|
+
fattr('finalizers')
|
15
16
|
|
16
17
|
%w(
|
17
18
|
program name synopsis description author version
|
@@ -50,6 +51,7 @@ module Main
|
|
50
51
|
|
51
52
|
def setup_finalizers
|
52
53
|
@finalizers ||= []
|
54
|
+
finalizers = @finalizers
|
53
55
|
ObjectSpace.define_finalizer(self) do
|
54
56
|
while((f = finalizers.pop)); f.call; end
|
55
57
|
end
|
@@ -237,7 +239,7 @@ module Main
|
|
237
239
|
|
238
240
|
def fcall(object, method, *argv, &block)
|
239
241
|
method = object.method(method)
|
240
|
-
arity =
|
242
|
+
arity = method.arity
|
241
243
|
if arity >= 0
|
242
244
|
argv = argv[0, arity]
|
243
245
|
else
|
data/main.gemspec
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
Gem::Specification::new do |spec|
|
5
5
|
spec.name = "main"
|
6
6
|
spec.description = 'a class factory and dsl for generating command line programs real quick'
|
7
|
-
spec.version = "4.
|
7
|
+
spec.version = "4.3.0"
|
8
8
|
spec.platform = Gem::Platform::RUBY
|
9
9
|
spec.summary = "main"
|
10
10
|
|
11
|
-
spec.files = ["a.rb", "lib", "lib/main", "lib/main/cast.rb", "lib/main/dsl.rb", "lib/main/factories.rb", "lib/main/getoptlong.rb", "lib/main/logger.rb", "lib/main/mode.rb", "lib/main/parameter.rb", "lib/main/program", "lib/main/program/class_methods.rb", "lib/main/program/instance_methods.rb", "lib/main/program.rb", "lib/main/softspoken.rb", "lib/main/stdext.rb", "lib/main/test.rb", "lib/main/usage.rb", "lib/main/util.rb", "lib/main.rb", "main.gemspec", "Rakefile", "README", "README.erb", "samples", "samples/a.rb", "samples/b.rb", "samples/c.rb", "samples/d.rb", "samples/e.rb", "samples/f.rb", "samples/g.rb", "samples/h.rb", "samples/j.rb", "test", "test/main.rb", "TODO"]
|
11
|
+
spec.files = ["a.rb", "lib", "lib/main", "lib/main/cast.rb", "lib/main/dsl.rb", "lib/main/factories.rb", "lib/main/getoptlong.rb", "lib/main/logger.rb", "lib/main/mode.rb", "lib/main/parameter.rb", "lib/main/program", "lib/main/program/class_methods.rb", "lib/main/program/instance_methods.rb", "lib/main/program.rb", "lib/main/softspoken.rb", "lib/main/stdext.rb", "lib/main/test.rb", "lib/main/usage.rb", "lib/main/util.rb", "lib/main.rb", "LICENSE", "main.gemspec", "Rakefile", "README", "README.erb", "samples", "samples/a.rb", "samples/b.rb", "samples/c.rb", "samples/d.rb", "samples/e.rb", "samples/f.rb", "samples/g.rb", "samples/h.rb", "samples/j.rb", "test", "test/main.rb", "TODO"]
|
12
12
|
spec.executables = []
|
13
13
|
|
14
14
|
|
data/test/main.rb
CHANGED
@@ -230,7 +230,7 @@ class T < Test::Unit::TestCase
|
|
230
230
|
def test_0150
|
231
231
|
param = nil
|
232
232
|
assert_nothing_raised{
|
233
|
-
main(%w[--foo=42 --bar=42.0 --foobar=true --barfoo=false --uri=http://foo --x=s]){
|
233
|
+
main(%w[--foo=42 --bar=42.0 --foobar=true --barfoo=false --uri=http://foo --x=s --y=a,b,c]){
|
234
234
|
option('foo'){
|
235
235
|
required
|
236
236
|
argument_required
|
@@ -256,15 +256,21 @@ class T < Test::Unit::TestCase
|
|
256
256
|
argument_required
|
257
257
|
cast{|x| x.to_s.upcase}
|
258
258
|
}
|
259
|
+
option('y'){
|
260
|
+
argument_required
|
261
|
+
process{|*values| values.join.split(',').map{|value| value.upcase}}
|
262
|
+
}
|
259
263
|
define_method('run'){ param = params }
|
260
264
|
}
|
261
265
|
}
|
262
266
|
assert param['foo'].value == 42
|
263
267
|
assert param['bar'].value == 42.0
|
264
|
-
assert param['foobar'].value == true
|
265
|
-
assert param['barfoo'].value == 'false'
|
266
|
-
assert param['uri'].value == URI.parse('http://foo')
|
267
|
-
assert param['x'].value == 'S'
|
268
|
+
assert param['foobar'].value == true
|
269
|
+
assert param['barfoo'].value == 'false'
|
270
|
+
assert param['uri'].value == URI.parse('http://foo')
|
271
|
+
assert param['x'].value == 'S'
|
272
|
+
assert param['y'].value == 'A'
|
273
|
+
assert param['y'].values == %w( A B C )
|
268
274
|
end
|
269
275
|
def test_0160
|
270
276
|
p = nil
|
@@ -873,6 +879,18 @@ class T < Test::Unit::TestCase
|
|
873
879
|
}
|
874
880
|
assert( p.nil?, "p should not be set, help should have run" )
|
875
881
|
end
|
882
|
+
|
883
|
+
def test_0600
|
884
|
+
src = 'finalizers should run'
|
885
|
+
dst = nil
|
886
|
+
argv = []
|
887
|
+
assert_nothing_raised{
|
888
|
+
main(argv){
|
889
|
+
define_method('run'){ finalizers.push(lambda{ dst = src }) }
|
890
|
+
}
|
891
|
+
}
|
892
|
+
assert( src==dst, "appears finalizer did not run!?" )
|
893
|
+
end
|
876
894
|
end
|
877
895
|
|
878
896
|
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: main
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 51
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 4
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 4.3.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Ara T. Howard
|
@@ -9,29 +15,41 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2010-11-07 01:00:00 -06:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: fattr
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 11
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 1
|
33
|
+
- 0
|
23
34
|
version: 2.1.0
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
- !ruby/object:Gem::Dependency
|
26
38
|
name: arrayfields
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
30
42
|
requirements:
|
31
43
|
- - ">="
|
32
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 43
|
46
|
+
segments:
|
47
|
+
- 4
|
48
|
+
- 7
|
49
|
+
- 4
|
33
50
|
version: 4.7.4
|
34
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
35
53
|
description: a class factory and dsl for generating command line programs real quick
|
36
54
|
email: ara.t.howard@gmail.com
|
37
55
|
executables: []
|
@@ -58,6 +76,7 @@ files:
|
|
58
76
|
- lib/main/usage.rb
|
59
77
|
- lib/main/util.rb
|
60
78
|
- lib/main.rb
|
79
|
+
- LICENSE
|
61
80
|
- main.gemspec
|
62
81
|
- Rakefile
|
63
82
|
- README
|
@@ -83,21 +102,27 @@ rdoc_options: []
|
|
83
102
|
require_paths:
|
84
103
|
- lib
|
85
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
86
106
|
requirements:
|
87
107
|
- - ">="
|
88
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
89
112
|
version: "0"
|
90
|
-
version:
|
91
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
92
115
|
requirements:
|
93
116
|
- - ">="
|
94
117
|
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
95
121
|
version: "0"
|
96
|
-
version:
|
97
122
|
requirements: []
|
98
123
|
|
99
124
|
rubyforge_project: codeforpeople
|
100
|
-
rubygems_version: 1.3.
|
125
|
+
rubygems_version: 1.3.7
|
101
126
|
signing_key:
|
102
127
|
specification_version: 3
|
103
128
|
summary: main
|