active_remote-cached 0.2.0 → 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 +4 -4
- data/active_remote-cached.gemspec +2 -2
- data/lib/active_remote/cached/version.rb +1 -1
- data/lib/active_remote/cached.rb +106 -37
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
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
@@ -33,6 +33,11 @@ module ActiveRemote
|
|
33
33
|
end
|
34
34
|
|
35
35
|
module ClassMethods
|
36
|
+
def cached_methods
|
37
|
+
@cached_methods ||= []
|
38
|
+
@cached_methods
|
39
|
+
end
|
40
|
+
|
36
41
|
def cached_finders_for(*cached_finder_keys)
|
37
42
|
options = cached_finder_keys.extract_options!
|
38
43
|
|
@@ -47,7 +52,7 @@ module ActiveRemote
|
|
47
52
|
|
48
53
|
def cached_find(argument_hash, options = {})
|
49
54
|
method_name = _cached_find_method_name(argument_hash.keys)
|
50
|
-
arguments = argument_hash.
|
55
|
+
arguments = argument_hash.keys.sort.map { |k| argument_hash[k] }
|
51
56
|
|
52
57
|
if block_given?
|
53
58
|
__send__(method_name, *arguments, options) do
|
@@ -60,7 +65,7 @@ module ActiveRemote
|
|
60
65
|
|
61
66
|
def cached_search(argument_hash, options = {})
|
62
67
|
method_name = _cached_search_method_name(argument_hash.keys)
|
63
|
-
arguments = argument_hash.
|
68
|
+
arguments = argument_hash.keys.sort.map { |k| argument_hash[k] }
|
64
69
|
|
65
70
|
if block_given?
|
66
71
|
__send__(method_name, *arguments, options) do
|
@@ -71,74 +76,131 @@ module ActiveRemote
|
|
71
76
|
end
|
72
77
|
end
|
73
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
|
+
|
74
100
|
##
|
75
101
|
# Underscored Methods
|
76
102
|
#
|
77
|
-
def
|
78
|
-
|
103
|
+
def _method_missing_name(m)
|
104
|
+
regex = /(cached_(?:delete|exist_search|search|exist_find|find)_by_)([a-zA-Z_]*)(!|\?)?/
|
79
105
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
exist_search_method_name = _cached_exist_search_method_name(arguments)
|
88
|
-
find_method_name = _cached_find_method_name(arguments)
|
89
|
-
search_method_name = _cached_search_method_name(arguments)
|
90
|
-
search_bang_method_name = "#{search_method_name}!"
|
91
|
-
|
92
|
-
unless self.respond_to?(delete_method_name)
|
93
|
-
_define_cached_delete_method(delete_method_name, arguments, options)
|
94
|
-
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
|
95
113
|
|
96
|
-
|
97
|
-
|
98
|
-
end
|
114
|
+
def _args_in_sorted_order(m, args)
|
115
|
+
regex = /cached_(?:delete|exist_search|search|exist_find|find)_by_([a-zA-Z_]*)(!|\?)?/
|
99
116
|
|
100
|
-
|
101
|
-
_define_cached_exist_search_method(exist_search_method_name, arguments, options)
|
102
|
-
end
|
117
|
+
method_name = _method_missing_name(m)
|
103
118
|
|
104
|
-
|
105
|
-
|
106
|
-
end
|
119
|
+
match_1 = m.match(regex)
|
120
|
+
match_2 = method_name.match(regex)
|
107
121
|
|
108
|
-
|
109
|
-
|
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_")
|
127
|
+
|
128
|
+
args_names_in_order.each do |arg_name|
|
129
|
+
index = orignal_args_name.index(arg_name)
|
130
|
+
args_in_order << args[index]
|
110
131
|
end
|
111
132
|
|
112
|
-
|
113
|
-
|
133
|
+
if args.size > args_in_order.size
|
134
|
+
# Add options if passed
|
135
|
+
args_in_order << args.last
|
114
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)
|
115
176
|
end
|
116
177
|
end
|
117
178
|
|
118
179
|
def _cached_delete_method_name(arguments)
|
119
|
-
"cached_delete_by_#{arguments.join('_and_')}"
|
180
|
+
"cached_delete_by_#{arguments.sort.join('_and_')}"
|
120
181
|
end
|
121
182
|
|
122
183
|
def _cached_exist_find_method_name(arguments)
|
123
|
-
"cached_exist_find_by_#{arguments.join('_and_')}"
|
184
|
+
"cached_exist_find_by_#{arguments.sort.join('_and_')}"
|
124
185
|
end
|
125
186
|
|
126
187
|
def _cached_exist_search_method_name(arguments)
|
127
|
-
"cached_exist_search_by_#{arguments.join('_and_')}"
|
188
|
+
"cached_exist_search_by_#{arguments.sort.join('_and_')}"
|
128
189
|
end
|
129
190
|
|
130
191
|
def _cached_find_method_name(arguments)
|
131
|
-
"cached_find_by_#{arguments.join('_and_')}"
|
192
|
+
"cached_find_by_#{arguments.sort.join('_and_')}"
|
132
193
|
end
|
133
194
|
|
134
195
|
def _cached_search_method_name(arguments)
|
135
|
-
"cached_search_by_#{arguments.join('_and_')}"
|
196
|
+
"cached_search_by_#{arguments.sort.join('_and_')}"
|
136
197
|
end
|
137
198
|
|
138
199
|
def _define_cached_delete_method(method_name, *method_arguments, cached_finder_options)
|
139
200
|
method_arguments.flatten!
|
140
201
|
expanded_method_args = method_arguments.join(",")
|
141
202
|
sorted_method_args = method_arguments.sort.join(",")
|
203
|
+
cached_methods << method_name
|
142
204
|
|
143
205
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
144
206
|
# def self.cached_delete_by_user_guid(user_guid, options = {})
|
@@ -173,6 +235,8 @@ module ActiveRemote
|
|
173
235
|
method_arguments.flatten!
|
174
236
|
expanded_method_args = method_arguments.join(",")
|
175
237
|
sorted_method_args = method_arguments.sort.join(",")
|
238
|
+
cached_methods << method_name
|
239
|
+
cached_methods << "#{method_name}?"
|
176
240
|
|
177
241
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
178
242
|
# def self.cached_exist_find_by_user_guid(user_guid, options = {})
|
@@ -200,6 +264,8 @@ module ActiveRemote
|
|
200
264
|
method_arguments.flatten!
|
201
265
|
expanded_method_args = method_arguments.join(",")
|
202
266
|
sorted_method_args = method_arguments.sort.join(",")
|
267
|
+
cached_methods << method_name
|
268
|
+
cached_methods << "#{method_name}?"
|
203
269
|
|
204
270
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
205
271
|
# def self.cached_exist_search_by_user_guid(user_guid, options = {})
|
@@ -227,6 +293,7 @@ module ActiveRemote
|
|
227
293
|
method_arguments.flatten!
|
228
294
|
expanded_method_args = method_arguments.join(",")
|
229
295
|
sorted_method_args = method_arguments.sort.join(",")
|
296
|
+
cached_methods << method_name
|
230
297
|
|
231
298
|
expanded_search_args = ""
|
232
299
|
method_arguments.each do |method_argument|
|
@@ -271,6 +338,7 @@ module ActiveRemote
|
|
271
338
|
method_arguments.flatten!
|
272
339
|
expanded_method_args = method_arguments.join(",")
|
273
340
|
sorted_method_args = method_arguments.sort.join(",")
|
341
|
+
cached_methods << method_name
|
274
342
|
|
275
343
|
expanded_search_args = ""
|
276
344
|
method_arguments.each do |method_argument|
|
@@ -319,6 +387,7 @@ module ActiveRemote
|
|
319
387
|
method_arguments.flatten!
|
320
388
|
expanded_method_args = method_arguments.join(",")
|
321
389
|
sorted_method_args = method_arguments.sort.join(",")
|
390
|
+
cached_methods << method_name
|
322
391
|
|
323
392
|
expanded_search_args = ""
|
324
393
|
method_arguments.each do |method_argument|
|
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,8 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
141
|
- !ruby/object:Gem::Version
|
140
142
|
version: '0'
|
141
143
|
requirements: []
|
142
|
-
rubygems_version: 3.
|
143
|
-
signing_key:
|
144
|
+
rubygems_version: 3.3.7
|
145
|
+
signing_key:
|
144
146
|
specification_version: 4
|
145
147
|
summary: Provides a configuration for caching mechanisms and finders on ActiveRemote
|
146
148
|
models that are cached/cacheable
|