pakada 0.3.4 → 0.3.5
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/lib/pakada.rb +34 -24
- data/lib/pakada/version.rb +1 -1
- data/spec/pakada_spec.rb +29 -11
- metadata +16 -16
data/lib/pakada.rb
CHANGED
@@ -118,38 +118,23 @@ class Pakada
|
|
118
118
|
|
119
119
|
@safety = {}
|
120
120
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
modules.reverse[0...i].map {|mod|
|
127
|
-
mod.dependencies
|
128
|
-
}.flatten.each {|dep|
|
129
|
-
unless modules.include? dep
|
130
|
-
modules << dep
|
131
|
-
j += 1
|
132
|
-
end
|
133
|
-
}
|
134
|
-
|
135
|
-
resolved = true if j == 0
|
136
|
-
end
|
121
|
+
path = File.expand_path(config[:path])
|
122
|
+
@urls, @path = Array(config[:urls]), Pathname.new(path)
|
123
|
+
|
124
|
+
modules = resolve_modules(Array(config[:modules]))
|
137
125
|
Pakada.instance(self) {
|
138
|
-
@modules = modules.inject({}) {|
|
139
|
-
|
126
|
+
@modules = modules.inject({}) {|a, e|
|
127
|
+
a[e.pakada_name] = safety(e).allocate; a
|
140
128
|
}
|
129
|
+
@modules.each_value {|m| m.send :initialize }
|
141
130
|
}
|
142
131
|
|
143
|
-
path = File.expand_path(config[:path])
|
144
|
-
@urls, @path = Array(config[:urls]), Pathname.new(path)
|
145
132
|
@middleware = []
|
146
133
|
end
|
147
134
|
|
148
135
|
def boot
|
149
136
|
Pakada.instance(self) {
|
150
|
-
[:hooks, :boot].each {|m|
|
151
|
-
modules.each_value {|mod| mod.send m }
|
152
|
-
}
|
137
|
+
[:hooks, :boot].each {|m| modules.each_value &m }
|
153
138
|
} unless Pakada.testing?
|
154
139
|
end
|
155
140
|
|
@@ -158,7 +143,11 @@ class Pakada
|
|
158
143
|
end
|
159
144
|
|
160
145
|
def call(req_env)
|
161
|
-
Pakada.instance(self) {
|
146
|
+
Pakada.instance(self) {
|
147
|
+
to_app.call(req_env).tap {|res|
|
148
|
+
res[1].delete_if {|k, v| k =~ /^X-Pakada/ }
|
149
|
+
}
|
150
|
+
}
|
162
151
|
end
|
163
152
|
|
164
153
|
def to_app
|
@@ -171,4 +160,25 @@ class Pakada
|
|
171
160
|
def request(req_env)
|
172
161
|
Rack::Response.new("Hi, I'm Pakada #{VERSION}").finish
|
173
162
|
end
|
163
|
+
|
164
|
+
private
|
165
|
+
|
166
|
+
def resolve_modules(modules)
|
167
|
+
modules, resolved = modules.dup, false
|
168
|
+
until resolved
|
169
|
+
j ||= modules.size
|
170
|
+
i, j = j, 0
|
171
|
+
|
172
|
+
modules.reverse[0...i].map(&:dependencies).flatten.each {|dep|
|
173
|
+
unless modules.include? dep
|
174
|
+
modules << dep
|
175
|
+
j += 1
|
176
|
+
end
|
177
|
+
}
|
178
|
+
|
179
|
+
resolved = true if j == 0
|
180
|
+
end
|
181
|
+
|
182
|
+
modules
|
183
|
+
end
|
174
184
|
end
|
data/lib/pakada/version.rb
CHANGED
data/spec/pakada_spec.rb
CHANGED
@@ -195,13 +195,19 @@ describe Pakada do
|
|
195
195
|
|
196
196
|
context "#initialize(name, config)" do
|
197
197
|
let(:module1) do
|
198
|
-
stub :
|
198
|
+
stub :allocate => stub("module1", :send => nil),
|
199
|
+
:pakada_name => :module1,
|
200
|
+
:dependencies => [module2]
|
199
201
|
end
|
200
202
|
let(:module2) do
|
201
|
-
stub :
|
203
|
+
stub :allocate => stub("module2", :send => nil),
|
204
|
+
:pakada_name => :module2,
|
205
|
+
:dependencies => [module3]
|
202
206
|
end
|
203
207
|
let(:module3) do
|
204
|
-
stub :
|
208
|
+
stub :allocate => stub("module3", :send => nil),
|
209
|
+
:pakada_name => :module3,
|
210
|
+
:dependencies => []
|
205
211
|
end
|
206
212
|
let(:instance) { Pakada.new :foo, :modules => [module1] }
|
207
213
|
|
@@ -214,14 +220,18 @@ describe Pakada do
|
|
214
220
|
end
|
215
221
|
|
216
222
|
it "resolves and initializes the modules" do
|
217
|
-
|
218
|
-
|
219
|
-
|
223
|
+
module1.allocate.should_receive(:send).with :initialize
|
224
|
+
module2.allocate.should_receive(:send).with :initialize
|
225
|
+
module3.allocate.should_receive(:send).with :initialize
|
226
|
+
|
227
|
+
instance.modules[:module1].should equal(module1.allocate)
|
228
|
+
instance.modules[:module2].should equal(module2.allocate)
|
229
|
+
instance.modules[:module3].should equal(module3.allocate)
|
220
230
|
end
|
221
231
|
|
222
232
|
it "initializes modules in the context of this instance" do
|
223
|
-
context =
|
224
|
-
module1.should_receive(:
|
233
|
+
context = 123
|
234
|
+
module1.allocate.should_receive(:send) {
|
225
235
|
context = Pakada.instance
|
226
236
|
}
|
227
237
|
|
@@ -246,7 +256,7 @@ describe Pakada do
|
|
246
256
|
before do
|
247
257
|
1.upto(5) {|i|
|
248
258
|
Pakada::Module.descendants << stub({
|
249
|
-
:
|
259
|
+
:allocate => stub("module#{i}", :send => nil),
|
250
260
|
:pakada_name => :"module#{i}",
|
251
261
|
:dependencies => []
|
252
262
|
})
|
@@ -322,7 +332,7 @@ describe Pakada do
|
|
322
332
|
context "#call(env)" do
|
323
333
|
let(:instance) { Pakada.new :foo }
|
324
334
|
let(:env) { stub "env" }
|
325
|
-
let(:response) {
|
335
|
+
let(:response) { [200, {"X-Pakada-Foo" => "bar"}, []] }
|
326
336
|
|
327
337
|
it "forwards to #to_app.call" do
|
328
338
|
instance.stub :to_app => stub("#to_app")
|
@@ -337,11 +347,19 @@ describe Pakada do
|
|
337
347
|
it "forwards in the context of this instance" do
|
338
348
|
instance.should_receive(:to_app) {
|
339
349
|
Pakada.instance.should equal(instance)
|
340
|
-
proc {}
|
350
|
+
proc {|env| response }
|
341
351
|
}
|
342
352
|
|
343
353
|
instance.call(env)
|
344
354
|
end
|
355
|
+
|
356
|
+
it "drops response headers that start with X-Pakada" do
|
357
|
+
instance.stub :to_app => stub("#to_app")
|
358
|
+
instance.to_app.stub :call => response
|
359
|
+
instance.call(env).tap {|res|
|
360
|
+
res[1].key?("X-Pakada-Foo").should equal(false)
|
361
|
+
}
|
362
|
+
end
|
345
363
|
end
|
346
364
|
|
347
365
|
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.
|
4
|
+
version: 0.3.5
|
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-
|
12
|
+
date: 2011-10-19 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &71392370 !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: *
|
24
|
+
version_requirements: *71392370
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hooked
|
27
|
-
requirement: &
|
27
|
+
requirement: &71392070 !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: *
|
35
|
+
version_requirements: *71392070
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &71391770 !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: *
|
46
|
+
version_requirements: *71391770
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: fakefs
|
49
|
-
requirement: &
|
49
|
+
requirement: &71391490 !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: *
|
57
|
+
version_requirements: *71391490
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: fakefs-require
|
60
|
-
requirement: &
|
60
|
+
requirement: &71391200 !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: *
|
68
|
+
version_requirements: *71391200
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: yard
|
71
|
-
requirement: &
|
71
|
+
requirement: &71390780 !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: *
|
79
|
+
version_requirements: *71390780
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rdiscount
|
82
|
-
requirement: &
|
82
|
+
requirement: &71390320 !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: *
|
90
|
+
version_requirements: *71390320
|
91
91
|
description:
|
92
92
|
email:
|
93
93
|
- lars.gierth@gmail.com
|