applix 0.3.7 → 0.3.8

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 (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: []