active_remote-cached 0.1.1 → 0.1.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d09ee17c4bc381af4901fdff4db406009ad2c027
|
4
|
+
data.tar.gz: 38b5d38c0ac4ff0dbd0852b155a6dfb5347f756b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faa37b47e9d4df79ac735501d72e562b42e10ef5c4302305d080243382b48420417d56317aade1a7c866bf0275fcf6fc2c31ef0c619804efbf8ad6f58e99e464
|
7
|
+
data.tar.gz: b205d8e1b41052fa887efcc28ede71fb3ebaef907d05d4a40c18e4f9848713937e3b47d526e32eb5d057d06a3a93b6b464bece96bddd08720074231366ca1484
|
data/lib/active_remote/cached.rb
CHANGED
@@ -5,6 +5,7 @@ require "active_support/core_ext/array/extract_options"
|
|
5
5
|
|
6
6
|
require "active_remote/cached/cache"
|
7
7
|
require "active_remote/cached/version"
|
8
|
+
require "active_remote/errors"
|
8
9
|
|
9
10
|
module ActiveRemote
|
10
11
|
module Cached
|
@@ -81,6 +82,7 @@ module ActiveRemote
|
|
81
82
|
exist_search_method_name = _cached_exist_search_method_name(arguments)
|
82
83
|
find_method_name = _cached_find_method_name(arguments)
|
83
84
|
search_method_name = _cached_search_method_name(arguments)
|
85
|
+
search_bang_method_name = "#{search_method_name}!"
|
84
86
|
|
85
87
|
unless self.respond_to?(delete_method_name)
|
86
88
|
_define_cached_delete_method(delete_method_name, arguments, options)
|
@@ -98,6 +100,10 @@ module ActiveRemote
|
|
98
100
|
_define_cached_find_method(find_method_name, arguments, options)
|
99
101
|
end
|
100
102
|
|
103
|
+
unless self.respond_to?(search_bang_method_name)
|
104
|
+
_define_cached_search_bang_method(search_bang_method_name, arguments, options)
|
105
|
+
end
|
106
|
+
|
101
107
|
unless self.respond_to?(search_method_name)
|
102
108
|
_define_cached_search_method(search_method_name, arguments, options)
|
103
109
|
end
|
@@ -240,7 +246,11 @@ module ActiveRemote
|
|
240
246
|
# options = ::ActiveRemote::Cached.default_options.merge({}).merge(options)
|
241
247
|
#
|
242
248
|
# ::ActiveRemote::Cached.cache.fetch([namespace, name, "#search", user_guid], options) do
|
243
|
-
#
|
249
|
+
# if block_given?
|
250
|
+
# yield
|
251
|
+
# else
|
252
|
+
# self.search(:user_guid => user_guid)
|
253
|
+
# end
|
244
254
|
# end
|
245
255
|
# end
|
246
256
|
#
|
@@ -262,6 +272,58 @@ module ActiveRemote
|
|
262
272
|
end
|
263
273
|
RUBY
|
264
274
|
end
|
275
|
+
|
276
|
+
def _define_cached_search_bang_method(method_name, *method_arguments, cached_finder_options)
|
277
|
+
method_arguments.flatten!
|
278
|
+
expanded_method_args = method_arguments.join(",")
|
279
|
+
sorted_method_args = method_arguments.sort.join(",")
|
280
|
+
|
281
|
+
expanded_search_args = ""
|
282
|
+
method_arguments.each do |method_argument|
|
283
|
+
expanded_search_args << ":#{method_argument} => #{method_argument},"
|
284
|
+
end
|
285
|
+
|
286
|
+
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
287
|
+
# def self.cached_search_by_user_guid!(user_guid, options = {})
|
288
|
+
# options = ::ActiveRemote::Cached.default_options.merge({}).merge(options)
|
289
|
+
#
|
290
|
+
# ::ActiveRemote::Cached.cache.fetch([namespace, name, "#search", user_guid], options) do
|
291
|
+
# results = []
|
292
|
+
#
|
293
|
+
# if block_given?
|
294
|
+
# results = yield
|
295
|
+
# else
|
296
|
+
# results = self.search(:user_guid => user_guid)
|
297
|
+
# end
|
298
|
+
#
|
299
|
+
# raise ::ActiveRemote::RemoteRecordNotFound.new(self.class) if results.size <= 0
|
300
|
+
# results
|
301
|
+
# end
|
302
|
+
# end
|
303
|
+
#
|
304
|
+
# If a block is given, it is incumbent on the caller to make sure the expectation
|
305
|
+
# of the result object is maintained for requests/responses
|
306
|
+
#
|
307
|
+
def self.#{method_name}(#{expanded_method_args}, options = {})
|
308
|
+
options = ::ActiveRemote::Cached.default_options.merge(#{cached_finder_options}).merge(options)
|
309
|
+
namespace = options.delete(:namespace)
|
310
|
+
cache_key = [namespace, name, "#search", #{sorted_method_args}].compact
|
311
|
+
|
312
|
+
::ActiveRemote::Cached.cache.fetch(cache_key, options) do
|
313
|
+
results = []
|
314
|
+
|
315
|
+
if block_given?
|
316
|
+
results = yield
|
317
|
+
else
|
318
|
+
results = self.search(#{expanded_search_args})
|
319
|
+
end
|
320
|
+
|
321
|
+
raise ::ActiveRemote::RemoteRecordNotFound.new(self.class) if results.first.nil?
|
322
|
+
results
|
323
|
+
end
|
324
|
+
end
|
325
|
+
RUBY
|
326
|
+
end
|
265
327
|
end
|
266
328
|
|
267
329
|
# Initialize the cache provider with a MemoryStore cache
|
@@ -20,6 +20,10 @@ describe SearchMethodClass do
|
|
20
20
|
SearchMethodClass.must_respond_to("cached_search_by_foo")
|
21
21
|
end
|
22
22
|
|
23
|
+
it "creates 'cached_search_by_foo!'" do
|
24
|
+
SearchMethodClass.must_respond_to("cached_search_by_foo!")
|
25
|
+
end
|
26
|
+
|
23
27
|
it "creates 'cached_search_by_guid'" do
|
24
28
|
SearchMethodClass.must_respond_to("cached_search_by_guid")
|
25
29
|
end
|
@@ -47,6 +51,10 @@ describe SearchMethodClass do
|
|
47
51
|
it "creates 'cached_search_by_client_guid_and_user_guid_and_derp'" do
|
48
52
|
SearchMethodClass.must_respond_to("cached_search_by_client_guid_and_user_guid_and_derp")
|
49
53
|
end
|
54
|
+
|
55
|
+
it "creates 'cached_search_by_client_guid_and_user_guid_and_derp!'" do
|
56
|
+
SearchMethodClass.must_respond_to("cached_search_by_client_guid_and_user_guid_and_derp!")
|
57
|
+
end
|
50
58
|
end
|
51
59
|
|
52
60
|
describe "#cached_search_by_guid" do
|
@@ -176,4 +184,27 @@ describe SearchMethodClass do
|
|
176
184
|
end
|
177
185
|
end
|
178
186
|
end
|
187
|
+
|
188
|
+
describe "#cached_search_by_foo!" do
|
189
|
+
before do
|
190
|
+
::ActiveRemote::Cached.cache(HashCache.new)
|
191
|
+
::ActiveRemote::Cached.default_options(:expires_in => 100)
|
192
|
+
end
|
193
|
+
|
194
|
+
after do
|
195
|
+
::ActiveRemote::Cached.default_options({})
|
196
|
+
end
|
197
|
+
|
198
|
+
it "returns results when present" do
|
199
|
+
SearchMethodClass.stub(:search, [:hello]) do
|
200
|
+
SearchMethodClass.cached_search_by_foo!(:foo, :expires_in => 200).must_equal([:hello])
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
it "raises ActiveRemote::RemoteRecordNotFound when not found" do
|
205
|
+
SearchMethodClass.stub(:search, []) do
|
206
|
+
-> { SearchMethodClass.cached_search_by_foo!(:foo, :expires_in => 200) }.must_raise ::ActiveRemote::RemoteRecordNotFound
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
179
210
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_remote-cached
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Dewitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_remote
|
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: '0'
|
139
139
|
requirements: []
|
140
140
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.5.1
|
142
142
|
signing_key:
|
143
143
|
specification_version: 4
|
144
144
|
summary: Provides a configuration for caching mechanisms and finders on ActiveRemote
|