cached_resource 5.1.3 → 5.2.0
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.
- checksums.yaml +4 -4
- data/lib/cached_resource/caching.rb +17 -6
- data/lib/cached_resource/version.rb +1 -1
- data/spec/cached_resource/caching_spec.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29a5076e42c43b34a6d5b430c8dc16ce062dd3f7f1ac4f63f992efef03b3ccf9
|
4
|
+
data.tar.gz: ff819f199885c83cb65a6e21d1a319c5bb6b747dd467870c913043765fbfa111
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea526acccd50610cf5c39248c9c0180c7a6ca1ca42cb6975df9b6f97b668febda6fc17684e9a9a7ca4b371798019d7d5e818e7a34e428702aeb5f475859ddbae
|
7
|
+
data.tar.gz: cc087aa9dcc0ad28b8779cf4412fd999b84019b7398d610e2e9e271b14d550bb9baa9dd039a0fa10da6bd15c83f76cba843769723e7bd0ca13a8d3f2f24c0e5e
|
@@ -24,8 +24,8 @@ module CachedResource
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# Clear the cache.
|
27
|
-
def clear_cache
|
28
|
-
cache_clear
|
27
|
+
def clear_cache(options=nil)
|
28
|
+
cache_clear(options)
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
@@ -111,15 +111,26 @@ module CachedResource
|
|
111
111
|
end
|
112
112
|
|
113
113
|
# Clear the cache.
|
114
|
-
def cache_clear
|
115
|
-
|
116
|
-
|
114
|
+
def cache_clear(options=nil)
|
115
|
+
# Memcache doesn't support delete_matched, which can also be computationally expensive
|
116
|
+
if cached_resource.cache.class.to_s == 'ActiveSupport::Cache::MemCacheStore' || options.try(:fetch,:all)
|
117
|
+
cached_resource.cache.clear.tap do |result|
|
118
|
+
cached_resource.logger.info("#{CachedResource::Configuration::LOGGER_PREFIX} CLEAR ALL")
|
119
|
+
end
|
120
|
+
else
|
121
|
+
cached_resource.cache.delete_matched("^#{name_key}/*").tap do |result|
|
122
|
+
cached_resource.logger.info("#{CachedResource::Configuration::LOGGER_PREFIX} CLEAR #{name_key}/*")
|
123
|
+
end
|
117
124
|
end
|
118
125
|
end
|
119
126
|
|
120
127
|
# Generate the request cache key.
|
121
128
|
def cache_key(*arguments)
|
122
|
-
"#{
|
129
|
+
"#{name_key}/#{arguments.join('/')}".downcase.delete(' ')
|
130
|
+
end
|
131
|
+
|
132
|
+
def name_key
|
133
|
+
name.parameterize.gsub("-", "/")
|
123
134
|
end
|
124
135
|
|
125
136
|
# Make a full duplicate of an ActiveResource record.
|
@@ -12,6 +12,11 @@ describe CachedResource do
|
|
12
12
|
cached_resource
|
13
13
|
end
|
14
14
|
|
15
|
+
class NotTheThing < ActiveResource::Base
|
16
|
+
self.site = "http://api.notthething.com"
|
17
|
+
cached_resource
|
18
|
+
end
|
19
|
+
|
15
20
|
@thing = {:thing => {:id => 1, :name => "Ada"}}
|
16
21
|
@other_thing = {:thing => {:id => 1, :name => "Ari"}}
|
17
22
|
@thing2 = {:thing => {:id => 2, :name => "Joe"}}
|
@@ -26,11 +31,15 @@ describe CachedResource do
|
|
26
31
|
@other_string_thing_json = @other_string_thing.to_json
|
27
32
|
@date_thing_json = @date_thing.to_json
|
28
33
|
@nil_thing = nil.to_json
|
34
|
+
@not_the_thing = {:not_the_thing => {:id => 1, :name => "Not"}}
|
35
|
+
@not_the_thing_json = @not_the_thing.to_json
|
29
36
|
end
|
30
37
|
|
31
38
|
after(:each) do
|
32
39
|
Thing.cached_resource.cache.clear
|
33
40
|
Object.send(:remove_const, :Thing)
|
41
|
+
NotTheThing.cached_resource.cache.clear
|
42
|
+
Object.send(:remove_const, :NotTheThing)
|
34
43
|
end
|
35
44
|
|
36
45
|
describe "when enabled" do
|
@@ -39,6 +48,8 @@ describe CachedResource do
|
|
39
48
|
# to make sure it works
|
40
49
|
Thing.cached_resource.cache.clear
|
41
50
|
Thing.cached_resource.on!
|
51
|
+
NotTheThing.cached_resource.cache.clear
|
52
|
+
NotTheThing.cached_resource.on!
|
42
53
|
|
43
54
|
ActiveResource::HttpMock.reset!
|
44
55
|
ActiveResource::HttpMock.respond_to do |mock|
|
@@ -47,6 +58,7 @@ describe CachedResource do
|
|
47
58
|
mock.get "/things/fded.json", {}, @string_thing_json
|
48
59
|
mock.get "/things.json?name=42", {}, @nil_thing, 404
|
49
60
|
mock.get "/things/4.json", {}, @date_thing_json
|
61
|
+
mock.get "/not_the_things/1.json", {}, @not_the_thing_json
|
50
62
|
end
|
51
63
|
end
|
52
64
|
|
@@ -77,6 +89,20 @@ describe CachedResource do
|
|
77
89
|
read_from_cache("thing/1").should == nil
|
78
90
|
end
|
79
91
|
|
92
|
+
it "should not empty the cache of NotTheThing when clear_cache is called on the Thing" do
|
93
|
+
result1 = Thing.find(1)
|
94
|
+
result2 = NotTheThing.find(1)
|
95
|
+
Thing.clear_cache
|
96
|
+
NotTheThing.send(:cache_read, 'notthething/1').should == result2
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should empty all the cache when clear_cache is called on the Thing with :all option set" do
|
100
|
+
result1 = Thing.find(1)
|
101
|
+
result2 = NotTheThing.find(1)
|
102
|
+
Thing.clear_cache(all: true)
|
103
|
+
NotTheThing.send(:cache_read, 'notthething/1').should == nil
|
104
|
+
end
|
105
|
+
|
80
106
|
it "should cache a response with the same persistence" do
|
81
107
|
result1 = Thing.find(1)
|
82
108
|
result1.persisted?.should be true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cached_resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Morgan Brown
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activeresource
|