pakada 0.3.0 → 0.3.1

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.
@@ -1,3 +1,3 @@
1
1
  class Pakada
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
data/lib/pakada.rb CHANGED
@@ -98,6 +98,10 @@ class Pakada
98
98
  instance.path if instance
99
99
  end
100
100
 
101
+ def self.safety(original)
102
+ instance.safety original if instance
103
+ end
104
+
101
105
  attr_reader :name, :urls, :path
102
106
  attr_reader :modules, :middleware
103
107
 
@@ -107,6 +111,8 @@ class Pakada
107
111
  config[:modules] ||= Module.descendants
108
112
  config[:path] ||= name == :default ? "" : "instances/#{name}"
109
113
 
114
+ @safety = {}
115
+
110
116
  modules, resolved = Array(config[:modules]).dup, false
111
117
  until resolved
112
118
  j ||= modules.size
@@ -124,7 +130,7 @@ class Pakada
124
130
  resolved = true if j == 0
125
131
  end
126
132
  @modules = modules.inject({}) {|hash, mod|
127
- hash[mod.pakada_name] = mod.new; hash
133
+ hash[mod.pakada_name] = safety(mod).new; hash
128
134
  }
129
135
 
130
136
  path = File.expand_path(config[:path])
@@ -138,6 +144,10 @@ class Pakada
138
144
  } unless Pakada.testing?
139
145
  end
140
146
 
147
+ def safety(original)
148
+ @safety[original] ||= original.dup
149
+ end
150
+
141
151
  def call(req_env)
142
152
  to_app.call req_env
143
153
  end
data/spec/pakada_spec.rb CHANGED
@@ -192,6 +192,10 @@ describe Pakada do
192
192
  end
193
193
  let(:instance) { Pakada.new :foo, :modules => [module1] }
194
194
 
195
+ before {
196
+ Pakada.any_instance.stub(:safety) {|original| original }
197
+ }
198
+
195
199
  it "sets the instance name" do
196
200
  instance.name.should equal(:foo)
197
201
  end
@@ -225,6 +229,8 @@ describe Pakada do
225
229
  :dependencies => []
226
230
  })
227
231
  }
232
+
233
+ Pakada.any_instance.stub(:safety) {|original| original }
228
234
  end
229
235
 
230
236
  it "uses an empty URL list" do
@@ -336,4 +342,25 @@ describe Pakada do
336
342
  response[2].body.join.should match(/Pakada #{Pakada::VERSION}/)
337
343
  end
338
344
  end
345
+
346
+ context "#safety(original)" do
347
+ let(:original) { stub "original", :dup => dup }
348
+ let(:dup) { stub "dup" }
349
+
350
+ before { Pakada.instance(:default) {} }
351
+
352
+ it "creates and returns an instance-specific dup of the passed object" do
353
+ Pakada.instance(:default) {
354
+ Pakada.safety(original).should equal(dup)
355
+ }
356
+ end
357
+
358
+ it "memoizes the dup" do
359
+ Pakada.instance(:default) {
360
+ Pakada.safety original
361
+ original.should_not_receive :dup
362
+ Pakada.safety(original).should equal(dup)
363
+ }
364
+ end
365
+ end
339
366
  end
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.0
4
+ version: 0.3.1
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-01 00:00:00.000000000Z
12
+ date: 2011-08-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &80222130 !ruby/object:Gem::Requirement
16
+ requirement: &68362700 !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: *80222130
24
+ version_requirements: *68362700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hooked
27
- requirement: &80221440 !ruby/object:Gem::Requirement
27
+ requirement: &68362330 !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: *80221440
35
+ version_requirements: *68362330
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &80220860 !ruby/object:Gem::Requirement
38
+ requirement: &68362010 !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: *80220860
46
+ version_requirements: *68362010
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: fakefs
49
- requirement: &80220160 !ruby/object:Gem::Requirement
49
+ requirement: &68361690 !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: *80220160
57
+ version_requirements: *68361690
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: fakefs-require
60
- requirement: &80219690 !ruby/object:Gem::Requirement
60
+ requirement: &68361290 !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: *80219690
68
+ version_requirements: *68361290
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
- requirement: &80219040 !ruby/object:Gem::Requirement
71
+ requirement: &68361000 !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: *80219040
79
+ version_requirements: *68361000
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rdiscount
82
- requirement: &80218590 !ruby/object:Gem::Requirement
82
+ requirement: &68360670 !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: *80218590
90
+ version_requirements: *68360670
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.6
131
+ rubygems_version: 1.8.8
132
132
  signing_key:
133
133
  specification_version: 3
134
134
  summary: Modularization contract for web applications