pakada 0.3.3 → 0.3.4

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/.yardopts CHANGED
@@ -1 +1 @@
1
- - LICENSE ROADMAP.md
1
+ - LICENSE
@@ -1,3 +1,3 @@
1
1
  class Pakada
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4"
3
3
  end
data/lib/pakada.rb CHANGED
@@ -15,50 +15,48 @@ class Pakada
15
15
  attr_reader :instances, :stack
16
16
  end
17
17
 
18
- def self.instance(name = nil, &block)
19
- return @stack.last unless name
20
- return instances[name] unless block
18
+ def self.instance(name_or_ins = nil)
19
+ return stack.last unless name_or_ins
21
20
 
22
- unless instances[name]
21
+ if self === name_or_ins
22
+ ins = name_or_ins
23
+ else
24
+ ins, name = instances[name_or_ins], name_or_ins
25
+ end
26
+ return ins unless block_given?
27
+
28
+ unless ins
23
29
  dsl = Struct.new(:urls, :modules, :path).new
24
- ret = block.call(dsl)
30
+ ret = yield(dsl)
25
31
 
26
- config = Hash[*dsl.members.map {|m| m.to_sym }.zip(dsl.values).flatten(1)]
32
+ config = Hash[*dsl.members.map(&:to_sym).zip(dsl.values).flatten(1)]
27
33
  instances[name] = new(name, config)
28
34
  else
29
- @stack << instances[name]
35
+ stack << ins
30
36
  begin
31
- ret = block.call(instances[name])
37
+ ret = yield(ins)
32
38
  ensure
33
- @stack.pop
39
+ stack.pop
34
40
  end
35
41
  end
36
-
37
42
  ret
38
43
  end
39
44
 
40
45
  def self.boot
41
46
  instance(:default) {|ins| ins.urls = ["/"] } if instances.empty?
42
47
 
43
- if instances.keys.length > 1
44
- @urlmap = Rack::URLMap.new instances.values.inject({}) {|map, ins|
48
+ @urlmap = if instances.keys.length > 1
49
+ Rack::URLMap.new instances.values.inject({}) {|map, ins|
45
50
  ins.urls.each {|url|
46
- map[url] = proc {|env|
47
- instance(ins.name) { ins.call env }
48
- }
51
+ map[url] = proc {|env| ins.call env }
49
52
  }
50
53
  map
51
54
  }
52
55
  else
53
- ins = instances.values[0]
54
- @urlmap = proc {|env|
55
- instance(ins.name) { ins.call env }
56
- }
56
+ instances.values[0]
57
57
  end
58
58
 
59
- instances.values.each {|ins|
60
- instance(ins.name) { ins.boot }
61
- }
59
+ instances.values.each &:boot
62
60
  end
63
61
 
64
62
  def self.call(env)
@@ -136,8 +134,10 @@ class Pakada
136
134
 
137
135
  resolved = true if j == 0
138
136
  end
139
- @modules = modules.inject({}) {|hash, mod|
140
- hash[mod.pakada_name] = safety(mod).new; hash
137
+ Pakada.instance(self) {
138
+ @modules = modules.inject({}) {|hash, mod|
139
+ hash[mod.pakada_name] = safety(mod).new; hash
140
+ }
141
141
  }
142
142
 
143
143
  path = File.expand_path(config[:path])
@@ -146,8 +146,10 @@ class Pakada
146
146
  end
147
147
 
148
148
  def boot
149
- [:hooks, :boot].each {|m|
150
- modules.each_value {|mod| mod.send m }
149
+ Pakada.instance(self) {
150
+ [:hooks, :boot].each {|m|
151
+ modules.each_value {|mod| mod.send m }
152
+ }
151
153
  } unless Pakada.testing?
152
154
  end
153
155
 
@@ -156,7 +158,7 @@ class Pakada
156
158
  end
157
159
 
158
160
  def call(req_env)
159
- to_app.call req_env
161
+ Pakada.instance(self) { to_app.call req_env }
160
162
  end
161
163
 
162
164
  def to_app
data/spec/pakada_spec.rb CHANGED
@@ -25,7 +25,7 @@ describe Pakada do
25
25
  end
26
26
  end
27
27
 
28
- context ".instance(name, &block)" do
28
+ context ".instance(name) {|ins_or_dsl| ... }" do
29
29
  before do
30
30
  Pakada.stub :instances => {
31
31
  :foo => stub("instance: foo"),
@@ -66,6 +66,16 @@ describe Pakada do
66
66
 
67
67
  Pakada.instances[:create_me].should equal(create)
68
68
  end
69
+
70
+ let(:baz) { Pakada.allocate }
71
+
72
+ it "accepts arbitrary instance objects" do
73
+ Pakada.instance(baz) {|ins|
74
+ ins.should equal(baz)
75
+ Pakada.instance.should equal(baz)
76
+ Pakada.instances.should_not include(ins)
77
+ }
78
+ end
69
79
  end
70
80
 
71
81
  context ".boot" do
@@ -83,7 +93,6 @@ describe Pakada do
83
93
 
84
94
  it "creates a Rack::URLMap with end-points for each instance" do
85
95
  foo.should_receive(:call).twice {|e|
86
- Pakada.instance.should equal(foo)
87
96
  env.should equal(e)
88
97
  response
89
98
  }
@@ -210,6 +219,15 @@ describe Pakada do
210
219
  instance.modules[:module3].should equal(module3.new)
211
220
  end
212
221
 
222
+ it "initializes modules in the context of this instance" do
223
+ context = nil
224
+ module1.should_receive(:new) {
225
+ context = Pakada.instance
226
+ }
227
+
228
+ instance.should equal(context)
229
+ end
230
+
213
231
  it "sets the URL list" do
214
232
  ins = Pakada.new(:foo, :urls => "http://example.org")
215
233
  ins.urls.should == ["http://example.org"]
@@ -266,7 +284,7 @@ describe Pakada do
266
284
  Pakada.instance(:instance) {}
267
285
  instance.stub :modules => {
268
286
  :foo => stub("foo module"),
269
- :bar => stub("bar module")
287
+ :bar => stub("bar module", :hooks => nil, :boot => nil)
270
288
  }
271
289
  end
272
290
 
@@ -288,6 +306,17 @@ describe Pakada do
288
306
 
289
307
  instance.boot
290
308
  end
309
+
310
+ it "calls #hooks and #boot in the context of this instance" do
311
+ foo.should_receive(:hooks) {
312
+ Pakada.instance.should equal(instance)
313
+ }
314
+ foo.should_receive(:boot) {
315
+ Pakada.instance.should equal(instance)
316
+ }
317
+
318
+ instance.boot
319
+ end
291
320
  end
292
321
 
293
322
  context "#call(env)" do
@@ -295,9 +324,8 @@ describe Pakada do
295
324
  let(:env) { stub "env" }
296
325
  let(:response) { stub "response" }
297
326
 
298
- before { instance.stub :to_app => stub("#to_app") }
299
-
300
327
  it "forwards to #to_app.call" do
328
+ instance.stub :to_app => stub("#to_app")
301
329
  instance.to_app.should_receive(:call) {|e|
302
330
  e.should equal(env)
303
331
  response
@@ -305,6 +333,15 @@ describe Pakada do
305
333
 
306
334
  instance.call(env).should equal(response)
307
335
  end
336
+
337
+ it "forwards in the context of this instance" do
338
+ instance.should_receive(:to_app) {
339
+ Pakada.instance.should equal(instance)
340
+ proc {}
341
+ }
342
+
343
+ instance.call(env)
344
+ end
308
345
  end
309
346
 
310
347
  context "#to_app" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pakada
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-26 00:00:00.000000000Z
12
+ date: 2011-08-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &85331310 !ruby/object:Gem::Requirement
16
+ requirement: &72594210 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *85331310
24
+ version_requirements: *72594210
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hooked
27
- requirement: &85330850 !ruby/object:Gem::Requirement
27
+ requirement: &72593940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *85330850
35
+ version_requirements: *72593940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &85214840 !ruby/object:Gem::Requirement
38
+ requirement: &72593660 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *85214840
46
+ version_requirements: *72593660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: fakefs
49
- requirement: &85214630 !ruby/object:Gem::Requirement
49
+ requirement: &72593300 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *85214630
57
+ version_requirements: *72593300
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: fakefs-require
60
- requirement: &85214350 !ruby/object:Gem::Requirement
60
+ requirement: &72592820 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *85214350
68
+ version_requirements: *72592820
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
- requirement: &85214080 !ruby/object:Gem::Requirement
71
+ requirement: &72592580 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *85214080
79
+ version_requirements: *72592580
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rdiscount
82
- requirement: &85213810 !ruby/object:Gem::Requirement
82
+ requirement: &72592310 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *85213810
90
+ version_requirements: *72592310
91
91
  description:
92
92
  email:
93
93
  - lars.gierth@gmail.com
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  version: '0'
129
129
  requirements: []
130
130
  rubyforge_project:
131
- rubygems_version: 1.8.9
131
+ rubygems_version: 1.8.10
132
132
  signing_key:
133
133
  specification_version: 3
134
134
  summary: Modularization contract for web applications