cached_resource 2.3.1 → 2.3.2
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/cached_resource/caching.rb +14 -2
- data/lib/cached_resource/version.rb +1 -1
- data/spec/cached_resource/caching_spec.rb +64 -0
- metadata +89 -91
@@ -36,7 +36,7 @@ module CachedResource
|
|
36
36
|
object = find_without_cache(*arguments)
|
37
37
|
cache_collection_synchronize(object, *arguments) if cached_resource.collection_synchronize
|
38
38
|
cache_write(key, object)
|
39
|
-
|
39
|
+
cache_read(key)
|
40
40
|
end
|
41
41
|
|
42
42
|
# If this is a pure, unadulterated "all" request
|
@@ -82,7 +82,11 @@ module CachedResource
|
|
82
82
|
def cache_read(key)
|
83
83
|
key = cache_key(Array(key)) unless key.is_a? String
|
84
84
|
object = cached_resource.cache.read(key).try do |cache|
|
85
|
-
|
85
|
+
if cache.is_a? Enumerable
|
86
|
+
cache.map { |record| full_dup(record) }
|
87
|
+
else
|
88
|
+
full_dup(cache)
|
89
|
+
end
|
86
90
|
end
|
87
91
|
object && cached_resource.logger.info("#{CachedResource::Configuration::LOGGER_PREFIX} READ #{key}")
|
88
92
|
object
|
@@ -102,6 +106,14 @@ module CachedResource
|
|
102
106
|
"#{name.parameterize.gsub("-", "/")}/#{arguments.join('/')}".downcase
|
103
107
|
end
|
104
108
|
|
109
|
+
# Make a full duplicate of an ActiveResource record.
|
110
|
+
# Currently just dups the record then copies the persisted state.
|
111
|
+
def full_dup(record)
|
112
|
+
record.dup.tap do |o|
|
113
|
+
o.instance_variable_set(:@persisted, record.persisted?)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
105
117
|
end
|
106
118
|
end
|
107
119
|
end
|
@@ -96,6 +96,66 @@ describe CachedResource do
|
|
96
96
|
ActiveResource::HttpMock.requests.length.should == 2
|
97
97
|
end
|
98
98
|
|
99
|
+
it "should not return a frozen object on first request" do
|
100
|
+
result1 = Thing.find(1)
|
101
|
+
result1.should_not be_frozen
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should not return frozen object on a subsequent request" do
|
105
|
+
result1 = Thing.find(1)
|
106
|
+
result2 = Thing.find(1)
|
107
|
+
result2.should_not be_frozen
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should not freeze first requested object on a subsequent request" do
|
111
|
+
result1 = Thing.find(1)
|
112
|
+
result2 = Thing.find(1)
|
113
|
+
result1.should_not be_frozen
|
114
|
+
end
|
115
|
+
|
116
|
+
shared_examples "collection_freezing" do
|
117
|
+
it "should not return a frozen collection on first request" do
|
118
|
+
Thing.cached_resource.cache.clear
|
119
|
+
collection1 = Thing.all
|
120
|
+
collection1.should_not be_frozen
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should not return a frozen collection on a subsequent request" do
|
124
|
+
Thing.cached_resource.cache.clear
|
125
|
+
collection1 = Thing.all
|
126
|
+
collection2 = Thing.all
|
127
|
+
collection2.should_not be_frozen
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should not freeze first requested collection on a subsequent request" do
|
131
|
+
Thing.cached_resource.cache.clear
|
132
|
+
result1 = Thing.all
|
133
|
+
result2 = Thing.all
|
134
|
+
result1.should_not be_frozen
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should not return frozen members on first request" do
|
138
|
+
Thing.cached_resource.cache.clear
|
139
|
+
collection1 = Thing.all
|
140
|
+
collection1.first.should_not be_frozen
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should not return frozen members on a subsequent request" do
|
144
|
+
Thing.cached_resource.cache.clear
|
145
|
+
collection1 = Thing.all
|
146
|
+
collection2 = Thing.all
|
147
|
+
collection2.first.should_not be_frozen
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should not freeze members on a subsequent request" do
|
151
|
+
Thing.cached_resource.cache.clear
|
152
|
+
collection1 = Thing.all
|
153
|
+
member1 = Thing.find(1)
|
154
|
+
collection1.first.should_not be_frozen
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
99
159
|
describe "when collection synchronize is enabled" do
|
100
160
|
before(:each) do
|
101
161
|
Thing.cached_resource.cache.clear
|
@@ -111,6 +171,8 @@ describe CachedResource do
|
|
111
171
|
Thing.all
|
112
172
|
end
|
113
173
|
|
174
|
+
include_examples "collection_freezing"
|
175
|
+
|
114
176
|
it "should write cache entries for its members" do
|
115
177
|
result = Thing.find(1)
|
116
178
|
# only the all request should have been made
|
@@ -210,6 +272,8 @@ describe CachedResource do
|
|
210
272
|
Thing.all
|
211
273
|
end
|
212
274
|
|
275
|
+
include_examples "collection_freezing"
|
276
|
+
|
213
277
|
it "should not write cache entries for its members" do
|
214
278
|
result = Thing.find(1)
|
215
279
|
# both the all in the before each and this request should have been made
|
metadata
CHANGED
@@ -1,101 +1,102 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cached_resource
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.3.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 2
|
8
|
-
- 3
|
9
|
-
- 1
|
10
|
-
version: 2.3.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Andrew Chan
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-06-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rake
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: activeresource
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activeresource
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
38
33
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
46
38
|
type: :runtime
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: activesupport
|
50
39
|
prerelease: false
|
51
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: activesupport
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
52
49
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
version: "0"
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
60
54
|
type: :runtime
|
61
|
-
version_requirements: *id003
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: nilio
|
64
55
|
prerelease: false
|
65
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
57
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: nilio
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
74
70
|
type: :runtime
|
75
|
-
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: rspec
|
78
71
|
prerelease: false
|
79
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
73
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
88
86
|
type: :development
|
89
|
-
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
90
94
|
description: Enables request-based caching for ActiveResource
|
91
95
|
email: email@suspi.net
|
92
96
|
executables: []
|
93
|
-
|
94
97
|
extensions: []
|
95
|
-
|
96
98
|
extra_rdoc_files: []
|
97
|
-
|
98
|
-
files:
|
99
|
+
files:
|
99
100
|
- .gitignore
|
100
101
|
- .rspec
|
101
102
|
- .travis.yml
|
@@ -114,38 +115,35 @@ files:
|
|
114
115
|
- spec/spec_helper.rb
|
115
116
|
homepage: http://github.com/Ahsizara/cached_resource
|
116
117
|
licenses: []
|
117
|
-
|
118
118
|
post_install_message:
|
119
119
|
rdoc_options: []
|
120
|
-
|
121
|
-
require_paths:
|
120
|
+
require_paths:
|
122
121
|
- lib
|
123
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
123
|
none: false
|
125
|
-
requirements:
|
126
|
-
- -
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
|
129
|
-
segments:
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
segments:
|
130
129
|
- 0
|
131
|
-
|
132
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
hash: -1173904428179810862
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
132
|
none: false
|
134
|
-
requirements:
|
135
|
-
- -
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
|
138
|
-
segments:
|
133
|
+
requirements:
|
134
|
+
- - ! '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
segments:
|
139
138
|
- 0
|
140
|
-
|
139
|
+
hash: -1173904428179810862
|
141
140
|
requirements: []
|
142
|
-
|
143
141
|
rubyforge_project:
|
144
|
-
rubygems_version: 1.8.
|
142
|
+
rubygems_version: 1.8.24
|
145
143
|
signing_key:
|
146
144
|
specification_version: 3
|
147
145
|
summary: Caching for ActiveResource
|
148
|
-
test_files:
|
146
|
+
test_files:
|
149
147
|
- spec/cached_resource/caching_spec.rb
|
150
148
|
- spec/cached_resource/configuration_spec.rb
|
151
149
|
- spec/spec_helper.rb
|