active_remote-cached 0.0.3 → 0.0.4

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: 9872e1d79f0ce74478d865b9610ac1f7fbfdca51
4
- data.tar.gz: 2d0f206d646b9184b916c49a49ff74aabb1eb42a
3
+ metadata.gz: 037ff5730170b6fd9bcde427a2551d17eada4242
4
+ data.tar.gz: d7800b6e88135fac587afc65b3f24cd895c6f510
5
5
  SHA512:
6
- metadata.gz: b6b752495900bf6fe139b68321f7b9d725bc54843df72721ef44c719f8d197a774e38a5a2e3d36ff2b0ed3b4ace2d570704228629ceb9d2e1d89420d9593096a
7
- data.tar.gz: 3ff9109ed522147871f4a93265b6993e333ba42772d703ad81456aff079423d74dbe1f398c3ae6c5222a0456bb9abc0271cf99268d43bdbcbcb95fa1e3844a4c
6
+ metadata.gz: c23a65bb8c5f8c3fb4d52402be4bc2ad233a402a041574fa29a3fce657fb9b53a0b48b76dbc4fb21244c2794843ac5a11aae13851b0f2f5106733aa3a3b9cad9
7
+ data.tar.gz: 04864770794f7c776af951eab432a4063713b2a2490131a38b13a16d82dece26d4d9547723867045740ff5223233701f42eb855be85d32b51c8b55270b98ba99
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ActiveRemote::Cached
2
2
 
3
- TODO: Write a gem description
3
+ Provides cached finders for ActiveRemote models that allow a caching provider to cache the result of a query.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,37 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ include `::ActiveRemote::Cached` into your ActiveRemote models that can support cached finders
22
+
23
+ ```ruby
24
+ class Customer < ::ActiveRemote::Base
25
+ include ::ActiveRemote::Cached
26
+
27
+ # Declare the cached finder methods that will be supported
28
+ cached_finders_for :id
29
+ cached_finders_for [:name, :email]
30
+ end
31
+ ```
32
+
33
+ Now that you have a model that has cached finders on it you can use the `cached_search`, `cached_find`, or dynamic cached finder methods on the model to use the cache before you issue the AR search/find method.
34
+
35
+ ```ruby
36
+ customer = ::Customer.cached_find_by_id(1) # => <Customer id=1>
37
+ customer = ::Customer.cached_find(:id => 1) # => <Customer id=1>
38
+ customer = ::Customer.cached_search_by_id(1) # => [ <Customer id=1> ]
39
+ customer = ::Customer.cached_search(:id => 1) # => [ <Customer id=1> ]
40
+ ```
41
+
42
+ ```ruby
43
+ # All permutations of "complex" dynamic finders are defined
44
+ customer = ::Customer.cached_find_by_name_and_email("name", "email") # => <Customer id=1>
45
+ customer = ::Customer.cached_find_by_email_and_name("email", "name") # => <Customer id=1>
46
+
47
+ # Only declared finders are defined
48
+ customer = ::Customer.cached_find_by_name("name") # => NoMethodError
49
+ ```
50
+
51
+ Each finder as takes an optional options hash that will override the options passed to the caching provider (override from the global defaults setup for ActiveRemote::Cached)
22
52
 
23
53
  ## Contributing
24
54
 
@@ -1,5 +1,5 @@
1
1
  module ActiveRemote
2
2
  module Cached
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -61,7 +61,8 @@ module ActiveRemote
61
61
  #
62
62
  cached_finder_key_set.permutation do |arguments|
63
63
  delete_method_name = _cached_delete_method_name(arguments)
64
- exist_method_name = _cached_exist_method_name(arguments)
64
+ exist_find_method_name = _cached_exist_find_method_name(arguments)
65
+ exist_search_method_name = _cached_exist_search_method_name(arguments)
65
66
  find_method_name = _cached_find_method_name(arguments)
66
67
  search_method_name = _cached_search_method_name(arguments)
67
68
 
@@ -69,8 +70,12 @@ module ActiveRemote
69
70
  _define_cached_delete_method(delete_method_name, arguments)
70
71
  end
71
72
 
72
- unless self.respond_to?(exist_method_name)
73
- _define_cached_exist_method(exist_method_name, arguments)
73
+ unless self.respond_to?(exist_find_method_name)
74
+ _define_cached_exist_find_method(exist_find_method_name, arguments)
75
+ end
76
+
77
+ unless self.respond_to?(exist_search_method_name)
78
+ _define_cached_exist_search_method(exist_search_method_name, arguments)
74
79
  end
75
80
 
76
81
  unless self.respond_to?(find_method_name)
@@ -87,8 +92,12 @@ module ActiveRemote
87
92
  "cached_delete_by_#{arguments.join('_and_')}"
88
93
  end
89
94
 
90
- def _cached_exist_method_name(arguments)
91
- "cached_exist_by_#{arguments.join('_and_')}"
95
+ def _cached_exist_find_method_name(arguments)
96
+ "cached_exist_find_by_#{arguments.join('_and_')}"
97
+ end
98
+
99
+ def _cached_exist_search_method_name(arguments)
100
+ "cached_exist_search_by_#{arguments.join('_and_')}"
92
101
  end
93
102
 
94
103
  def _cached_find_method_name(arguments)
@@ -109,31 +118,56 @@ module ActiveRemote
109
118
  # ::ActiveRemote::Cached.cache.delete([name, user_guid])
110
119
  # end
111
120
  def self.#{method_name}(#{expanded_method_args}, options = {})
112
- ::ActiveRemote::Cached.cache.delete([name, #{sorted_method_args}])
121
+ ::ActiveRemote::Cached.cache.delete([name, "#search", #{sorted_method_args}])
122
+ ::ActiveRemote::Cached.cache.delete([name, "#find", #{sorted_method_args}])
123
+ end
124
+ RUBY
125
+ end
126
+
127
+ def _define_cached_exist_find_method(method_name, *method_arguments)
128
+ method_arguments.flatten!
129
+ expanded_method_args = method_arguments.join(",")
130
+ sorted_method_args = method_arguments.sort.join(",")
131
+
132
+ self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
133
+ # def self.cached_exist_find_by_user_guid(user_guid, options = {})
134
+ # ::ActiveRemote::Cached.cache.exist?([name, user_guid])
135
+ # end
136
+ def self.#{method_name}(#{expanded_method_args}, options = {})
137
+ ::ActiveRemote::Cached.cache.exist?([name, "#find", #{sorted_method_args}])
138
+ end
139
+ RUBY
140
+
141
+ self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
142
+ # def self.cached_exist_find_by_user_guid?(user_guid, options = {})
143
+ # ::ActiveRemote::Cached.cache.exist?([name, user_guid])
144
+ # end
145
+ def self.#{method_name}?(#{expanded_method_args}, options = {})
146
+ ::ActiveRemote::Cached.cache.exist?([name, "#find", #{sorted_method_args}])
113
147
  end
114
148
  RUBY
115
149
  end
116
150
 
117
- def _define_cached_exist_method(method_name, *method_arguments)
151
+ def _define_cached_exist_search_method(method_name, *method_arguments)
118
152
  method_arguments.flatten!
119
153
  expanded_method_args = method_arguments.join(",")
120
154
  sorted_method_args = method_arguments.sort.join(",")
121
155
 
122
156
  self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
123
- # def self.cached_exist_by_user_guid(user_guid, options = {})
157
+ # def self.cached_exist_search_by_user_guid(user_guid, options = {})
124
158
  # ::ActiveRemote::Cached.cache.exist?([name, user_guid])
125
159
  # end
126
160
  def self.#{method_name}(#{expanded_method_args}, options = {})
127
- ::ActiveRemote::Cached.cache.exist?([name, #{sorted_method_args}])
161
+ ::ActiveRemote::Cached.cache.exist?([name, "#search", #{sorted_method_args}])
128
162
  end
129
163
  RUBY
130
164
 
131
165
  self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
132
- # def self.cached_exist_by_user_guid?(user_guid, options = {})
166
+ # def self.cached_exist_search_by_user_guid?(user_guid, options = {})
133
167
  # ::ActiveRemote::Cached.cache.exist?([name, user_guid])
134
168
  # end
135
169
  def self.#{method_name}?(#{expanded_method_args}, options = {})
136
- ::ActiveRemote::Cached.cache.exist?([name, #{sorted_method_args}])
170
+ ::ActiveRemote::Cached.cache.exist?([name, "#search", #{sorted_method_args}])
137
171
  end
138
172
  RUBY
139
173
  end
@@ -152,14 +186,14 @@ module ActiveRemote
152
186
  # def self.cached_find_by_user_guid(user_guid, options = {})
153
187
  # options = ::ActiveRemote::Cached.default_options.merge(options)
154
188
  #
155
- # ::ActiveRemote::Cached.cache.fetch([name, user_guid], options) do
189
+ # ::ActiveRemote::Cached.cache.fetch([name, "#find", user_guid], options) do
156
190
  # self.find(:user_guid => user_guid)
157
191
  # end
158
192
  # end
159
193
  def self.#{method_name}(#{expanded_method_args}, options = {})
160
194
  options = ::ActiveRemote::Cached.default_options.merge(options)
161
195
 
162
- ::ActiveRemote::Cached.cache.fetch([name, #{sorted_method_args}], options) do
196
+ ::ActiveRemote::Cached.cache.fetch([name, "#find", #{sorted_method_args}], options) do
163
197
  self.find(#{expanded_search_args})
164
198
  end
165
199
  end
@@ -180,14 +214,14 @@ module ActiveRemote
180
214
  # def self.cached_search_by_user_guid(user_guid, options = {})
181
215
  # options = ::ActiveRemote::Cached.default_options.merge(options)
182
216
  #
183
- # ::ActiveRemote::Cached.cache.fetch([name, user_guid], options) do
217
+ # ::ActiveRemote::Cached.cache.fetch([name, "#search", user_guid], options) do
184
218
  # self.search(:user_guid => user_guid)
185
219
  # end
186
220
  # end
187
221
  def self.#{method_name}(#{expanded_method_args}, options = {})
188
222
  options = ::ActiveRemote::Cached.default_options.merge(options)
189
223
 
190
- ::ActiveRemote::Cached.cache.fetch([name, #{sorted_method_args}], options) do
224
+ ::ActiveRemote::Cached.cache.fetch([name, "#search", #{sorted_method_args}], options) do
191
225
  self.search(#{expanded_search_args})
192
226
  end
193
227
  end
@@ -14,60 +14,117 @@ end
14
14
 
15
15
  describe ExistMethodClass do
16
16
  describe "API" do
17
- it "creates 'cached_exist_by_guid'" do
18
- ExistMethodClass.must_respond_to("cached_exist_by_guid")
17
+ it "creates 'cached_exist_find_by_guid'" do
18
+ ExistMethodClass.must_respond_to("cached_exist_find_by_guid")
19
19
  end
20
20
 
21
- it "creates 'cached_exist_by_user_guid'" do
22
- ExistMethodClass.must_respond_to("cached_exist_by_user_guid")
21
+ it "creates 'cached_exist_search_by_guid'" do
22
+ ExistMethodClass.must_respond_to("cached_exist_search_by_guid")
23
23
  end
24
24
 
25
- it "creates 'cached_exist_by_user_guid_and_client_guid'" do
26
- ExistMethodClass.must_respond_to("cached_exist_by_user_guid_and_client_guid")
25
+ it "creates 'cached_exist_find_by_user_guid'" do
26
+ ExistMethodClass.must_respond_to("cached_exist_find_by_user_guid")
27
27
  end
28
28
 
29
- it "creates 'cached_exist_by_client_guid_and_user_guid'" do
30
- ExistMethodClass.must_respond_to("cached_exist_by_client_guid_and_user_guid")
29
+ it "creates 'cached_exist_search_by_user_guid'" do
30
+ ExistMethodClass.must_respond_to("cached_exist_search_by_user_guid")
31
31
  end
32
32
 
33
- it "creates 'cached_exist_by_derp_and_user_guid_and_client_guid'" do
34
- ExistMethodClass.must_respond_to("cached_exist_by_derp_and_user_guid_and_client_guid")
33
+ it "creates 'cached_exist_find_by_user_guid_and_client_guid'" do
34
+ ExistMethodClass.must_respond_to("cached_exist_find_by_user_guid_and_client_guid")
35
35
  end
36
36
 
37
- it "creates 'cached_exist_by_client_guid_and_derp_and_user_guid'" do
38
- ExistMethodClass.must_respond_to("cached_exist_by_client_guid_and_derp_and_user_guid")
37
+ it "creates 'cached_exist_search_by_user_guid_and_client_guid'" do
38
+ ExistMethodClass.must_respond_to("cached_exist_search_by_user_guid_and_client_guid")
39
39
  end
40
40
 
41
- it "creates 'cached_exist_by_client_guid_and_user_guid_and_derp'" do
42
- ExistMethodClass.must_respond_to("cached_exist_by_client_guid_and_user_guid_and_derp")
41
+ it "creates 'cached_exist_find_by_client_guid_and_user_guid'" do
42
+ ExistMethodClass.must_respond_to("cached_exist_find_by_client_guid_and_user_guid")
43
43
  end
44
44
 
45
- it "creates 'cached_exist_by_guid?'" do
46
- ExistMethodClass.must_respond_to("cached_exist_by_guid?")
45
+ it "creates 'cached_exist_search_by_client_guid_and_user_guid'" do
46
+ ExistMethodClass.must_respond_to("cached_exist_search_by_client_guid_and_user_guid")
47
47
  end
48
48
 
49
- it "creates 'cached_exist_by_user_guid?'" do
50
- ExistMethodClass.must_respond_to("cached_exist_by_user_guid?")
49
+ it "creates 'cached_exist_find_by_derp_and_user_guid_and_client_guid'" do
50
+ ExistMethodClass.must_respond_to("cached_exist_find_by_derp_and_user_guid_and_client_guid")
51
51
  end
52
52
 
53
- it "creates 'cached_exist_by_user_guid_and_client_guid?'" do
54
- ExistMethodClass.must_respond_to("cached_exist_by_user_guid_and_client_guid?")
53
+ it "creates 'cached_exist_search_by_derp_and_user_guid_and_client_guid'" do
54
+ ExistMethodClass.must_respond_to("cached_exist_search_by_derp_and_user_guid_and_client_guid")
55
55
  end
56
56
 
57
- it "creates 'cached_exist_by_client_guid_and_user_guid?'" do
58
- ExistMethodClass.must_respond_to("cached_exist_by_client_guid_and_user_guid?")
57
+ it "creates 'cached_exist_find_by_client_guid_and_derp_and_user_guid'" do
58
+ ExistMethodClass.must_respond_to("cached_exist_find_by_client_guid_and_derp_and_user_guid")
59
59
  end
60
60
 
61
- it "creates 'cached_exist_by_derp_and_user_guid_and_client_guid?'" do
62
- ExistMethodClass.must_respond_to("cached_exist_by_derp_and_user_guid_and_client_guid?")
61
+ it "creates 'cached_exist_search_by_client_guid_and_derp_and_user_guid'" do
62
+ ExistMethodClass.must_respond_to("cached_exist_search_by_client_guid_and_derp_and_user_guid")
63
63
  end
64
64
 
65
- it "creates 'cached_exist_by_client_guid_and_derp_and_user_guid?'" do
66
- ExistMethodClass.must_respond_to("cached_exist_by_client_guid_and_derp_and_user_guid?")
65
+ it "creates 'cached_exist_find_by_client_guid_and_user_guid_and_derp'" do
66
+ ExistMethodClass.must_respond_to("cached_exist_find_by_client_guid_and_user_guid_and_derp")
67
67
  end
68
68
 
69
- it "creates 'cached_exist_by_client_guid_and_user_guid_and_derp?'" do
70
- ExistMethodClass.must_respond_to("cached_exist_by_client_guid_and_user_guid_and_derp?")
69
+ it "creates 'cached_exist_search_by_client_guid_and_user_guid_and_derp'" do
70
+ ExistMethodClass.must_respond_to("cached_exist_search_by_client_guid_and_user_guid_and_derp")
71
+ end
72
+
73
+ # ? based methods
74
+ it "creates 'cached_exist_find_by_guid?'" do
75
+ ExistMethodClass.must_respond_to("cached_exist_find_by_guid?")
76
+ end
77
+
78
+ it "creates 'cached_exist_search_by_guid?'" do
79
+ ExistMethodClass.must_respond_to("cached_exist_search_by_guid?")
80
+ end
81
+
82
+ it "creates 'cached_exist_find_by_user_guid?'" do
83
+ ExistMethodClass.must_respond_to("cached_exist_find_by_user_guid?")
84
+ end
85
+
86
+ it "creates 'cached_exist_search_by_user_guid?'" do
87
+ ExistMethodClass.must_respond_to("cached_exist_search_by_user_guid?")
88
+ end
89
+
90
+ it "creates 'cached_exist_find_by_user_guid_and_client_guid?'" do
91
+ ExistMethodClass.must_respond_to("cached_exist_find_by_user_guid_and_client_guid?")
92
+ end
93
+
94
+ it "creates 'cached_exist_search_by_user_guid_and_client_guid?'" do
95
+ ExistMethodClass.must_respond_to("cached_exist_search_by_user_guid_and_client_guid?")
96
+ end
97
+
98
+ it "creates 'cached_exist_find_by_client_guid_and_user_guid?'" do
99
+ ExistMethodClass.must_respond_to("cached_exist_find_by_client_guid_and_user_guid?")
100
+ end
101
+
102
+ it "creates 'cached_exist_search_by_client_guid_and_user_guid?'" do
103
+ ExistMethodClass.must_respond_to("cached_exist_search_by_client_guid_and_user_guid?")
104
+ end
105
+
106
+ it "creates 'cached_exist_find_by_derp_and_user_guid_and_client_guid?'" do
107
+ ExistMethodClass.must_respond_to("cached_exist_find_by_derp_and_user_guid_and_client_guid?")
108
+ end
109
+
110
+ it "creates 'cached_exist_search_by_derp_and_user_guid_and_client_guid?'" do
111
+ ExistMethodClass.must_respond_to("cached_exist_search_by_derp_and_user_guid_and_client_guid?")
112
+ end
113
+
114
+ it "creates 'cached_exist_find_by_client_guid_and_derp_and_user_guid?'" do
115
+ ExistMethodClass.must_respond_to("cached_exist_find_by_client_guid_and_derp_and_user_guid?")
116
+ end
117
+
118
+ it "creates 'cached_exist_search_by_client_guid_and_derp_and_user_guid?'" do
119
+ ExistMethodClass.must_respond_to("cached_exist_search_by_client_guid_and_derp_and_user_guid?")
120
+ end
121
+
122
+ it "creates 'cached_exist_find_by_client_guid_and_user_guid_and_derp?'" do
123
+ ExistMethodClass.must_respond_to("cached_exist_find_by_client_guid_and_user_guid_and_derp?")
124
+ end
125
+
126
+ it "creates 'cached_exist_search_by_client_guid_and_user_guid_and_derp?'" do
127
+ ExistMethodClass.must_respond_to("cached_exist_search_by_client_guid_and_user_guid_and_derp?")
71
128
  end
72
129
  end
73
130
  end
@@ -66,7 +66,7 @@ describe FindMethodClass do
66
66
  end
67
67
 
68
68
  it "merges the default options in for the fetch call" do
69
- ::ActiveRemote::Cached.cache.expects(:fetch).with([FindMethodClass.name, :guid], :expires_in => 100).returns(:hello)
69
+ ::ActiveRemote::Cached.cache.expects(:fetch).with([FindMethodClass.name, "#find", :guid], :expires_in => 100).returns(:hello)
70
70
 
71
71
  FindMethodClass.stub(:find, :hello) do
72
72
  FindMethodClass.cached_find_by_guid(:guid).must_equal(:hello)
@@ -74,7 +74,7 @@ describe FindMethodClass do
74
74
  end
75
75
 
76
76
  it "overrides the default options with local options for the fetch call" do
77
- ::ActiveRemote::Cached.cache.expects(:fetch).with([FindMethodClass.name, :guid], :expires_in => 200).returns(:hello)
77
+ ::ActiveRemote::Cached.cache.expects(:fetch).with([FindMethodClass.name, "#find", :guid], :expires_in => 200).returns(:hello)
78
78
 
79
79
  FindMethodClass.stub(:find, :hello) do
80
80
  FindMethodClass.cached_find_by_guid(:guid, :expires_in => 200).must_equal(:hello)
@@ -66,7 +66,7 @@ describe SearchMethodClass do
66
66
  end
67
67
 
68
68
  it "merges the default options in for the fetch call" do
69
- ::ActiveRemote::Cached.cache.expects(:fetch).with([SearchMethodClass.name, :guid], :expires_in => 100).returns(:hello)
69
+ ::ActiveRemote::Cached.cache.expects(:fetch).with([SearchMethodClass.name, "#search", :guid], :expires_in => 100).returns(:hello)
70
70
 
71
71
  SearchMethodClass.stub(:search, :hello) do
72
72
  SearchMethodClass.cached_search_by_guid(:guid).must_equal(:hello)
@@ -74,7 +74,7 @@ describe SearchMethodClass do
74
74
  end
75
75
 
76
76
  it "overrides the default options with local options for the fetch call" do
77
- ::ActiveRemote::Cached.cache.expects(:fetch).with([SearchMethodClass.name, :guid], :expires_in => 200).returns(:hello)
77
+ ::ActiveRemote::Cached.cache.expects(:fetch).with([SearchMethodClass.name, "#search", :guid], :expires_in => 200).returns(:hello)
78
78
 
79
79
  SearchMethodClass.stub(:search, :hello) do
80
80
  SearchMethodClass.cached_search_by_guid(:guid, :expires_in => 200).must_equal(:hello)
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.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Dewitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-26 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_remote