active_remote-cached 0.1.4 → 1.0.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 +5 -5
- data/active_remote-cached.gemspec +2 -2
- data/lib/active_remote/cached/version.rb +1 -1
- data/lib/active_remote/cached.rb +117 -37
- metadata +8 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: c89a29c20fea4fff1a59ab534285774e7758620a73fc4005866011326b67ddbe
|
|
4
|
+
data.tar.gz: 1fbb57ba895a2aedb8067e399ac747cd6428b2e11c18c043e0fc9fbd8e3a63a1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e07972d8b297ad00be81d09dc05330075db0f744d6d40f0323135f326368846325cc66975f8771260d14ba5cd96156c36e134e9bf500df4bff924d6bdcc9ef82
|
|
7
|
+
data.tar.gz: 5a1818958e13bac846e04616c1762f1fdbb3d7e5e664d8d7c56e86b36e1fa10d608bf242bd666e43ba1bea5eef6f3a17be01e2c1f715bab205413aabe3a764eb
|
|
@@ -6,8 +6,8 @@ require 'active_remote/cached/version'
|
|
|
6
6
|
Gem::Specification.new do |gem|
|
|
7
7
|
gem.name = "active_remote-cached"
|
|
8
8
|
gem.version = ActiveRemote::Cached::VERSION
|
|
9
|
-
gem.authors = ["Brandon Dewitt"]
|
|
10
|
-
gem.email = ["brandonsdewitt@gmail.com"]
|
|
9
|
+
gem.authors = ["Brandon Dewitt", "MXDevExperience"]
|
|
10
|
+
gem.email = ["brandonsdewitt@gmail.com", "devexperience@mx.com"]
|
|
11
11
|
gem.description = %q{ Provides "cached" finders and a DSL to enumerate which finders should have cached versions }
|
|
12
12
|
gem.summary = %q{ Provides a configuration for caching mechanisms and finders on ActiveRemote models that are cached/cacheable }
|
|
13
13
|
gem.homepage = ""
|
data/lib/active_remote/cached.rb
CHANGED
|
@@ -12,6 +12,10 @@ module ActiveRemote
|
|
|
12
12
|
module Cached
|
|
13
13
|
extend ::ActiveSupport::Concern
|
|
14
14
|
|
|
15
|
+
# When upgrading Rails versions, don't reuse the same cache key, because you can't rely upon the serialized objects to be consistent across versions.
|
|
16
|
+
# To fix, this adds a cache key that caches the ruby engine version and the activesupport version to prevent cache re-use across different versions.
|
|
17
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION = "#{RUBY_ENGINE_VERSION}:#{ActiveSupport::VERSION::STRING}".freeze
|
|
18
|
+
|
|
15
19
|
def self.cache(cache_provider = nil)
|
|
16
20
|
if cache_provider
|
|
17
21
|
@cache_provider = ::ActiveRemote::Cached::Cache.new(cache_provider)
|
|
@@ -29,6 +33,11 @@ module ActiveRemote
|
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
module ClassMethods
|
|
36
|
+
def cached_methods
|
|
37
|
+
@cached_methods ||= []
|
|
38
|
+
@cached_methods
|
|
39
|
+
end
|
|
40
|
+
|
|
32
41
|
def cached_finders_for(*cached_finder_keys)
|
|
33
42
|
options = cached_finder_keys.extract_options!
|
|
34
43
|
|
|
@@ -43,7 +52,7 @@ module ActiveRemote
|
|
|
43
52
|
|
|
44
53
|
def cached_find(argument_hash, options = {})
|
|
45
54
|
method_name = _cached_find_method_name(argument_hash.keys)
|
|
46
|
-
arguments = argument_hash.
|
|
55
|
+
arguments = argument_hash.keys.sort.map { |k| argument_hash[k] }
|
|
47
56
|
|
|
48
57
|
if block_given?
|
|
49
58
|
__send__(method_name, *arguments, options) do
|
|
@@ -56,7 +65,7 @@ module ActiveRemote
|
|
|
56
65
|
|
|
57
66
|
def cached_search(argument_hash, options = {})
|
|
58
67
|
method_name = _cached_search_method_name(argument_hash.keys)
|
|
59
|
-
arguments = argument_hash.
|
|
68
|
+
arguments = argument_hash.keys.sort.map { |k| argument_hash[k] }
|
|
60
69
|
|
|
61
70
|
if block_given?
|
|
62
71
|
__send__(method_name, *arguments, options) do
|
|
@@ -67,74 +76,131 @@ module ActiveRemote
|
|
|
67
76
|
end
|
|
68
77
|
end
|
|
69
78
|
|
|
79
|
+
def method_missing(m, *args, &block)
|
|
80
|
+
method_name = _method_missing_name(m)
|
|
81
|
+
|
|
82
|
+
if method_name.nil? || !cached_methods.include?(method_name.to_s)
|
|
83
|
+
super(m, *args, &block)
|
|
84
|
+
else
|
|
85
|
+
new_args = _args_in_sorted_order(m, args)
|
|
86
|
+
__send__(method_name, *new_args, &block)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def respond_to_missing?(m, include_private = false)
|
|
91
|
+
method_name = _method_missing_name(m)
|
|
92
|
+
|
|
93
|
+
if !method_name.nil? && cached_methods.include?(method_name.to_s)
|
|
94
|
+
true
|
|
95
|
+
else
|
|
96
|
+
super
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
70
100
|
##
|
|
71
101
|
# Underscored Methods
|
|
72
102
|
#
|
|
73
|
-
def
|
|
74
|
-
|
|
103
|
+
def _method_missing_name(m)
|
|
104
|
+
regex = /(cached_(?:delete|exist_search|search|exist_find|find)_by_)([a-zA-Z_]*)(!|\?)?/
|
|
75
105
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
exist_search_method_name = _cached_exist_search_method_name(arguments)
|
|
84
|
-
find_method_name = _cached_find_method_name(arguments)
|
|
85
|
-
search_method_name = _cached_search_method_name(arguments)
|
|
86
|
-
search_bang_method_name = "#{search_method_name}!"
|
|
87
|
-
|
|
88
|
-
unless self.respond_to?(delete_method_name)
|
|
89
|
-
_define_cached_delete_method(delete_method_name, arguments, options)
|
|
90
|
-
end
|
|
106
|
+
if m.to_s =~ regex
|
|
107
|
+
params = $2.split("_and_")
|
|
108
|
+
"#{$1}#{params.sort.join("_and_")}#{$3}".to_sym
|
|
109
|
+
else
|
|
110
|
+
nil
|
|
111
|
+
end
|
|
112
|
+
end
|
|
91
113
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
end
|
|
114
|
+
def _args_in_sorted_order(m, args)
|
|
115
|
+
regex = /cached_(?:delete|exist_search|search|exist_find|find)_by_([a-zA-Z_]*)(!|\?)?/
|
|
95
116
|
|
|
96
|
-
|
|
97
|
-
_define_cached_exist_search_method(exist_search_method_name, arguments, options)
|
|
98
|
-
end
|
|
117
|
+
method_name = _method_missing_name(m)
|
|
99
118
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
119
|
+
match_1 = m.match(regex)
|
|
120
|
+
match_2 = method_name.match(regex)
|
|
121
|
+
|
|
122
|
+
args_in_order = []
|
|
123
|
+
|
|
124
|
+
if match_1[1] && match_2[1]
|
|
125
|
+
orignal_args_name = match_1[1].split("_and_")
|
|
126
|
+
args_names_in_order = match_2[1].split("_and_")
|
|
103
127
|
|
|
104
|
-
|
|
105
|
-
|
|
128
|
+
args_names_in_order.each do |arg_name|
|
|
129
|
+
index = orignal_args_name.index(arg_name)
|
|
130
|
+
args_in_order << args[index]
|
|
106
131
|
end
|
|
107
132
|
|
|
108
|
-
|
|
109
|
-
|
|
133
|
+
if args.size > args_in_order.size
|
|
134
|
+
# Add options if passed
|
|
135
|
+
args_in_order << args.last
|
|
110
136
|
end
|
|
137
|
+
|
|
138
|
+
args_in_order
|
|
139
|
+
else
|
|
140
|
+
args
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def _create_cached_finder_for(cached_finder_key, options = {})
|
|
145
|
+
cached_finder_key_set = [ cached_finder_key ].flatten.sort
|
|
146
|
+
|
|
147
|
+
delete_method_name = _cached_delete_method_name(cached_finder_key_set)
|
|
148
|
+
exist_find_method_name = _cached_exist_find_method_name(cached_finder_key_set)
|
|
149
|
+
exist_search_method_name = _cached_exist_search_method_name(cached_finder_key_set)
|
|
150
|
+
find_method_name = _cached_find_method_name(cached_finder_key_set)
|
|
151
|
+
search_method_name = _cached_search_method_name(cached_finder_key_set)
|
|
152
|
+
search_bang_method_name = "#{search_method_name}!"
|
|
153
|
+
|
|
154
|
+
unless cached_methods.include?(delete_method_name)
|
|
155
|
+
_define_cached_delete_method(delete_method_name, cached_finder_key_set, options)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
unless cached_methods.include?(exist_find_method_name)
|
|
159
|
+
_define_cached_exist_find_method(exist_find_method_name, cached_finder_key_set, options)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
unless cached_methods.include?(exist_search_method_name)
|
|
163
|
+
_define_cached_exist_search_method(exist_search_method_name, cached_finder_key_set, options)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
unless cached_methods.include?(find_method_name)
|
|
167
|
+
_define_cached_find_method(find_method_name, cached_finder_key_set, options)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
unless cached_methods.include?(search_bang_method_name)
|
|
171
|
+
_define_cached_search_bang_method(search_bang_method_name, cached_finder_key_set, options)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
unless cached_methods.include?(search_method_name)
|
|
175
|
+
_define_cached_search_method(search_method_name, cached_finder_key_set, options)
|
|
111
176
|
end
|
|
112
177
|
end
|
|
113
178
|
|
|
114
179
|
def _cached_delete_method_name(arguments)
|
|
115
|
-
"cached_delete_by_#{arguments.join('_and_')}"
|
|
180
|
+
"cached_delete_by_#{arguments.sort.join('_and_')}"
|
|
116
181
|
end
|
|
117
182
|
|
|
118
183
|
def _cached_exist_find_method_name(arguments)
|
|
119
|
-
"cached_exist_find_by_#{arguments.join('_and_')}"
|
|
184
|
+
"cached_exist_find_by_#{arguments.sort.join('_and_')}"
|
|
120
185
|
end
|
|
121
186
|
|
|
122
187
|
def _cached_exist_search_method_name(arguments)
|
|
123
|
-
"cached_exist_search_by_#{arguments.join('_and_')}"
|
|
188
|
+
"cached_exist_search_by_#{arguments.sort.join('_and_')}"
|
|
124
189
|
end
|
|
125
190
|
|
|
126
191
|
def _cached_find_method_name(arguments)
|
|
127
|
-
"cached_find_by_#{arguments.join('_and_')}"
|
|
192
|
+
"cached_find_by_#{arguments.sort.join('_and_')}"
|
|
128
193
|
end
|
|
129
194
|
|
|
130
195
|
def _cached_search_method_name(arguments)
|
|
131
|
-
"cached_search_by_#{arguments.join('_and_')}"
|
|
196
|
+
"cached_search_by_#{arguments.sort.join('_and_')}"
|
|
132
197
|
end
|
|
133
198
|
|
|
134
199
|
def _define_cached_delete_method(method_name, *method_arguments, cached_finder_options)
|
|
135
200
|
method_arguments.flatten!
|
|
136
201
|
expanded_method_args = method_arguments.join(",")
|
|
137
202
|
sorted_method_args = method_arguments.sort.join(",")
|
|
203
|
+
cached_methods << method_name
|
|
138
204
|
|
|
139
205
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
140
206
|
# def self.cached_delete_by_user_guid(user_guid, options = {})
|
|
@@ -144,6 +210,7 @@ module ActiveRemote
|
|
|
144
210
|
__active_remote_cached_options = ::ActiveRemote::Cached.default_options.merge(#{cached_finder_options}).merge(__active_remote_cached_options)
|
|
145
211
|
namespace = __active_remote_cached_options.delete(:namespace)
|
|
146
212
|
find_cache_key = [
|
|
213
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION,
|
|
147
214
|
namespace,
|
|
148
215
|
name,
|
|
149
216
|
"#find",
|
|
@@ -151,6 +218,7 @@ module ActiveRemote
|
|
|
151
218
|
].compact
|
|
152
219
|
|
|
153
220
|
search_cache_key = [
|
|
221
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION,
|
|
154
222
|
namespace,
|
|
155
223
|
name,
|
|
156
224
|
"#search",
|
|
@@ -167,6 +235,8 @@ module ActiveRemote
|
|
|
167
235
|
method_arguments.flatten!
|
|
168
236
|
expanded_method_args = method_arguments.join(",")
|
|
169
237
|
sorted_method_args = method_arguments.sort.join(",")
|
|
238
|
+
cached_methods << method_name
|
|
239
|
+
cached_methods << "#{method_name}?"
|
|
170
240
|
|
|
171
241
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
172
242
|
# def self.cached_exist_find_by_user_guid(user_guid, options = {})
|
|
@@ -176,6 +246,7 @@ module ActiveRemote
|
|
|
176
246
|
__active_remote_cached_options = ::ActiveRemote::Cached.default_options.merge(#{cached_finder_options}).merge(__active_remote_cached_options)
|
|
177
247
|
namespace = __active_remote_cached_options.delete(:namespace)
|
|
178
248
|
cache_key = [
|
|
249
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION,
|
|
179
250
|
namespace,
|
|
180
251
|
name,
|
|
181
252
|
"#find",
|
|
@@ -193,6 +264,8 @@ module ActiveRemote
|
|
|
193
264
|
method_arguments.flatten!
|
|
194
265
|
expanded_method_args = method_arguments.join(",")
|
|
195
266
|
sorted_method_args = method_arguments.sort.join(",")
|
|
267
|
+
cached_methods << method_name
|
|
268
|
+
cached_methods << "#{method_name}?"
|
|
196
269
|
|
|
197
270
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
198
271
|
# def self.cached_exist_search_by_user_guid(user_guid, options = {})
|
|
@@ -202,6 +275,7 @@ module ActiveRemote
|
|
|
202
275
|
__active_remote_cached_options = ::ActiveRemote::Cached.default_options.merge(#{cached_finder_options}).merge(__active_remote_cached_options)
|
|
203
276
|
namespace = __active_remote_cached_options.delete(:namespace)
|
|
204
277
|
cache_key = [
|
|
278
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION,
|
|
205
279
|
namespace,
|
|
206
280
|
name,
|
|
207
281
|
"#search",
|
|
@@ -219,6 +293,7 @@ module ActiveRemote
|
|
|
219
293
|
method_arguments.flatten!
|
|
220
294
|
expanded_method_args = method_arguments.join(",")
|
|
221
295
|
sorted_method_args = method_arguments.sort.join(",")
|
|
296
|
+
cached_methods << method_name
|
|
222
297
|
|
|
223
298
|
expanded_search_args = ""
|
|
224
299
|
method_arguments.each do |method_argument|
|
|
@@ -241,6 +316,7 @@ module ActiveRemote
|
|
|
241
316
|
__active_remote_cached_options = ::ActiveRemote::Cached.default_options.merge(#{cached_finder_options}).merge(__active_remote_cached_options)
|
|
242
317
|
namespace = __active_remote_cached_options.delete(:namespace)
|
|
243
318
|
cache_key = [
|
|
319
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION,
|
|
244
320
|
namespace,
|
|
245
321
|
name,
|
|
246
322
|
"#find",
|
|
@@ -262,6 +338,7 @@ module ActiveRemote
|
|
|
262
338
|
method_arguments.flatten!
|
|
263
339
|
expanded_method_args = method_arguments.join(",")
|
|
264
340
|
sorted_method_args = method_arguments.sort.join(",")
|
|
341
|
+
cached_methods << method_name
|
|
265
342
|
|
|
266
343
|
expanded_search_args = ""
|
|
267
344
|
method_arguments.each do |method_argument|
|
|
@@ -288,6 +365,7 @@ module ActiveRemote
|
|
|
288
365
|
__active_remote_cached_options = ::ActiveRemote::Cached.default_options.merge(#{cached_finder_options}).merge(__active_remote_cached_options)
|
|
289
366
|
namespace = __active_remote_cached_options.delete(:namespace)
|
|
290
367
|
cache_key = [
|
|
368
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION,
|
|
291
369
|
namespace,
|
|
292
370
|
name,
|
|
293
371
|
"#search",
|
|
@@ -309,6 +387,7 @@ module ActiveRemote
|
|
|
309
387
|
method_arguments.flatten!
|
|
310
388
|
expanded_method_args = method_arguments.join(",")
|
|
311
389
|
sorted_method_args = method_arguments.sort.join(",")
|
|
390
|
+
cached_methods << method_name
|
|
312
391
|
|
|
313
392
|
expanded_search_args = ""
|
|
314
393
|
method_arguments.each do |method_argument|
|
|
@@ -340,6 +419,7 @@ module ActiveRemote
|
|
|
340
419
|
__active_remote_cached_options = ::ActiveRemote::Cached.default_options.merge(#{cached_finder_options}).merge(__active_remote_cached_options)
|
|
341
420
|
namespace = __active_remote_cached_options.delete(:namespace)
|
|
342
421
|
cache_key = [
|
|
422
|
+
RUBY_AND_ACTIVE_SUPPORT_VERSION,
|
|
343
423
|
namespace,
|
|
344
424
|
name,
|
|
345
425
|
"#search",
|
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_remote-cached
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brandon Dewitt
|
|
8
|
-
|
|
8
|
+
- MXDevExperience
|
|
9
|
+
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
+
date: 2024-04-26 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: active_remote
|
|
@@ -98,6 +99,7 @@ description: ' Provides "cached" finders and a DSL to enumerate which finders sh
|
|
|
98
99
|
have cached versions '
|
|
99
100
|
email:
|
|
100
101
|
- brandonsdewitt@gmail.com
|
|
102
|
+
- devexperience@mx.com
|
|
101
103
|
executables: []
|
|
102
104
|
extensions: []
|
|
103
105
|
extra_rdoc_files: []
|
|
@@ -124,7 +126,7 @@ files:
|
|
|
124
126
|
homepage: ''
|
|
125
127
|
licenses: []
|
|
126
128
|
metadata: {}
|
|
127
|
-
post_install_message:
|
|
129
|
+
post_install_message:
|
|
128
130
|
rdoc_options: []
|
|
129
131
|
require_paths:
|
|
130
132
|
- lib
|
|
@@ -139,9 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
139
141
|
- !ruby/object:Gem::Version
|
|
140
142
|
version: '0'
|
|
141
143
|
requirements: []
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
signing_key:
|
|
144
|
+
rubygems_version: 3.3.7
|
|
145
|
+
signing_key:
|
|
145
146
|
specification_version: 4
|
|
146
147
|
summary: Provides a configuration for caching mechanisms and finders on ActiveRemote
|
|
147
148
|
models that are cached/cacheable
|