applix 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/Gemfile +2 -2
  2. data/VERSION +1 -1
  3. data/lib/applix.rb +10 -2
  4. data/spec/applix_spec.rb +45 -1
  5. metadata +87 -85
data/Gemfile CHANGED
@@ -4,8 +4,8 @@ source "http://rubygems.org"
4
4
  # Include everything needed to run rake, tests, features, etc.
5
5
  group :development do
6
6
  gem "rspec", "~> 2.3.0"
7
- gem "bundler", "~> 1.0.0"
8
- gem "jeweler", "~> 1.5.2"
7
+ gem "bundler", "> 1.0.0"
8
+ gem "jeweler"
9
9
  gem "rcov", ">= 0"
10
10
  gem "ZenTest", ">= 4.4.2"
11
11
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.3.8
data/lib/applix.rb CHANGED
@@ -50,8 +50,12 @@ usage: #{$0} <args...>
50
50
  # see it as its first argument,
51
51
  (args.unshift name.to_s) if(name != :any && task[:name] == :any)
52
52
 
53
- # do the call
54
- rc = task[:code].call(*args, options)
53
+ # cluster for nesting or direct calling?
54
+ if task[:cluster]
55
+ rc = Applix.main(args, options, &task[:code])
56
+ else
57
+ rc = task[:code].call(*args, options)
58
+ end
55
59
 
56
60
  # post handle
57
61
  unless @epilog_cb.nil?
@@ -75,6 +79,10 @@ usage: #{$0} <args...>
75
79
  tasks[:any] = { :name => :any, :code => blk }
76
80
  end
77
81
 
82
+ def cluster name, &blk
83
+ tasks[name.to_sym] = { :name => name, :code => blk, :cluster => true }
84
+ end
85
+
78
86
  def handle name, &blk
79
87
  tasks[name.to_sym] = { :name => name, :code => blk }
80
88
  end
data/spec/applix_spec.rb CHANGED
@@ -2,13 +2,57 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Applix" do
4
4
 
5
+ it 'calls cluster prolog' do
6
+ Applix.main(%w(foo a b)) do
7
+ cluster(:foo) do
8
+ prolog { |args, options|
9
+ args.should == %w(a b)
10
+ args.reverse!
11
+ }
12
+ handle(:a) { raise 'should not be called!' }
13
+ handle(:b) { :b_was_called }
14
+ end
15
+ end.should == :b_was_called
16
+ end
17
+
18
+ it 'support :cluster for nesting' do
19
+ args = %w(-a -b:2 foo bar p1 p2)
20
+ Applix.main(args) do
21
+ handle(:foo) do
22
+ raise 'should not be called!'
23
+ end
24
+ cluster(:foo) do
25
+ handle(:bar) do |*args, options|
26
+ args.should == %w(p1 p2)
27
+ options.should == {:a => true, :b => 2}
28
+ args
29
+ end
30
+ end
31
+ end.should == %w{p1 p2}
32
+ end
33
+
34
+ it 'can even cluster clusters' do
35
+ args = %w(foo bar f p1 p2)
36
+ Applix.main(args) do
37
+ cluster(:foo) do
38
+ cluster(:bar) do
39
+ handle(:f) do |*args, options|
40
+ args.should == %w(p1 p2)
41
+ options.should == {}
42
+ args
43
+ end
44
+ end
45
+ end
46
+ end.should == %w{p1 p2}
47
+ end
48
+
5
49
  it 'prolog can even temper with arguments to modify the handle sequence' do
6
50
  Applix.main(['a', 'b']) do
7
51
  prolog { |args, options|
8
52
  args.should == ['a', 'b']
9
53
  args.reverse!
10
54
  }
11
- handle(:a) { raise 'shoule not be called!' }
55
+ handle(:a) { raise 'should not be called!' }
12
56
  handle(:b) { :b_was_called }
13
57
  end.should == :b_was_called
14
58
  end
metadata CHANGED
@@ -1,116 +1,125 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: applix
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.8
4
5
  prerelease:
5
- version: 0.3.7
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - dirk luesebrink
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-08-22 00:00:00 +02:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2011-08-28 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: rspec
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2156881460 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 2.3.0
24
22
  type: :development
25
23
  prerelease: false
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *2156881460
25
+ - !ruby/object:Gem::Dependency
28
26
  name: bundler
29
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &2156880080 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - ~>
33
- - !ruby/object:Gem::Version
29
+ requirements:
30
+ - - ! '>'
31
+ - !ruby/object:Gem::Version
34
32
  version: 1.0.0
35
33
  type: :development
36
34
  prerelease: false
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *2156880080
36
+ - !ruby/object:Gem::Dependency
39
37
  name: jeweler
40
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &2156878580 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 1.5.2
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
46
44
  type: :development
47
45
  prerelease: false
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
46
+ version_requirements: *2156878580
47
+ - !ruby/object:Gem::Dependency
50
48
  name: rcov
51
- requirement: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &2156877440 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
57
55
  type: :development
58
56
  prerelease: false
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
57
+ version_requirements: *2156877440
58
+ - !ruby/object:Gem::Dependency
61
59
  name: ZenTest
62
- requirement: &id005 !ruby/object:Gem::Requirement
60
+ requirement: &2156876200 !ruby/object:Gem::Requirement
63
61
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
67
65
  version: 4.4.2
68
66
  type: :development
69
67
  prerelease: false
70
- version_requirements: *id005
71
- - !ruby/object:Gem::Dependency
68
+ version_requirements: *2156876200
69
+ - !ruby/object:Gem::Dependency
72
70
  name: rspec
73
- requirement: &id006 !ruby/object:Gem::Requirement
71
+ requirement: &2156865360 !ruby/object:Gem::Requirement
74
72
  none: false
75
- requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
78
76
  version: 2.3.0
79
77
  type: :development
80
78
  prerelease: false
81
- version_requirements: *id006
82
- - !ruby/object:Gem::Dependency
79
+ version_requirements: *2156865360
80
+ - !ruby/object:Gem::Dependency
83
81
  name: rcov
84
- requirement: &id007 !ruby/object:Gem::Requirement
82
+ requirement: &2156864240 !ruby/object:Gem::Requirement
85
83
  none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
90
88
  type: :development
91
89
  prerelease: false
92
- version_requirements: *id007
93
- - !ruby/object:Gem::Dependency
90
+ version_requirements: *2156864240
91
+ - !ruby/object:Gem::Dependency
94
92
  name: ZenTest
95
- requirement: &id008 !ruby/object:Gem::Requirement
93
+ requirement: &2156862960 !ruby/object:Gem::Requirement
96
94
  none: false
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
100
98
  version: 4.4.2
101
99
  type: :development
102
100
  prerelease: false
103
- version_requirements: *id008
104
- description: " ApplixHash#from_argv builds hashes from ARGV like argument vectors\n according to following examples: \n \n '-f' --> { :f => true }\n '--flag' --> { :flag => true }\n '--flag:false' --> { :flag => false }\n '--flag=false' --> { :flag => 'false' }\n '--option=value' --> { :option => \"value\" }\n '--int=1' --> { :int => \"1\" }\n '--float=2.3' --> { :float => \"2.3\" }\n '--float:2.3' --> { :float => 2.3 }\n '--txt=\"foo bar\"' --> { :txt => \"foo bar\" }\n '--txt:'\"foo bar\"'' --> { :txt => \"foo bar\" }\n '--txt:%w{foo bar}' --> { :txt => [\"foo\", \"bar\"] }\n '--now:Time.now' --> { :now => #<Date: 3588595/2,0,2299161> }\n \n remaining arguments(non flag/options) are inserted as [:arguments,\n args], eg:\n Hash.from_argv %w(--foo --bar=loo 123 now)\n becomes \n { :foo => true, :bar => 'loo', :arguments => [\"123\", \"now\"] }\n \n"
101
+ version_requirements: *2156862960
102
+ description: ! " ApplixHash#from_argv builds hashes from ARGV like argument vectors\n
103
+ \ according to following examples: \n \n '-f' -->
104
+ { :f => true }\n '--flag' --> { :flag => true }\n '--flag:false'
105
+ \ --> { :flag => false }\n '--flag=false' --> { :flag =>
106
+ 'false' }\n '--option=value' --> { :option => \"value\" }\n '--int=1'
107
+ \ --> { :int => \"1\" }\n '--float=2.3' --> { :float
108
+ \ => \"2.3\" }\n '--float:2.3' --> { :float => 2.3 }\n '--txt=\"foo
109
+ bar\"' --> { :txt => \"foo bar\" }\n '--txt:'\"foo bar\"'' --> {
110
+ :txt => \"foo bar\" }\n '--txt:%w{foo bar}' --> { :txt => [\"foo\",
111
+ \"bar\"] }\n '--now:Time.now' --> { :now => #<Date: 3588595/2,0,2299161>
112
+ }\n \n remaining arguments(non flag/options) are inserted as [:arguments,\n
113
+ \ args], eg:\n Hash.from_argv %w(--foo --bar=loo 123 now)\n becomes
114
+ \ \n { :foo => true, :bar => 'loo', :arguments => [\"123\", \"now\"] }\n
115
+ \ \n"
105
116
  email: dirk@sebrink.de
106
117
  executables: []
107
-
108
118
  extensions: []
109
-
110
- extra_rdoc_files:
119
+ extra_rdoc_files:
111
120
  - LICENSE
112
121
  - README.mkd
113
- files:
122
+ files:
114
123
  - .autotest
115
124
  - .document
116
125
  - .rspec
@@ -125,38 +134,31 @@ files:
125
134
  - spec/applix_spec.rb
126
135
  - spec/oattr_spec.rb
127
136
  - spec/spec_helper.rb
128
- has_rdoc: true
129
137
  homepage: http://github.com/crux/applix
130
138
  licenses: []
131
-
132
139
  post_install_message:
133
140
  rdoc_options: []
134
-
135
- require_paths:
141
+ require_paths:
136
142
  - lib
137
- required_ruby_version: !ruby/object:Gem::Requirement
143
+ required_ruby_version: !ruby/object:Gem::Requirement
138
144
  none: false
139
- requirements:
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- hash: 3100699751538142693
143
- segments:
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ segments:
144
150
  - 0
145
- version: "0"
146
- required_rubygems_version: !ruby/object:Gem::Requirement
151
+ hash: 3511513831159462149
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
153
  none: false
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: "0"
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
152
158
  requirements: []
153
-
154
159
  rubyforge_project:
155
- rubygems_version: 1.6.2
160
+ rubygems_version: 1.8.6
156
161
  signing_key:
157
162
  specification_version: 3
158
163
  summary: build typed option hashed from command line arguments
159
- test_files:
160
- - spec/applix_spec.rb
161
- - spec/oattr_spec.rb
162
- - spec/spec_helper.rb
164
+ test_files: []