cacheable_delegator 1.1.0 → 1.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 +8 -8
- data/VERSION +1 -1
- data/cacheable_delegator.gemspec +2 -2
- data/lib/cacheable_delegator.rb +38 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Yjc0MjE1Y2JmODg4NDYyYTkxOGZkMjQ0MTQxYmZkOGE3MGY4MDUwNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWI1NTlhMDBmNTY4NDAyNGM4M2VjZmEwMzQyOTI5OGFkYjhlYjcwYw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2ZmOWQyNDQ3Yjg4MjE4YjYyNzFiOGU5ZmI4N2VkOTIzMDk4NjhlOGQ3YzEz
|
10
|
+
Mjg4M2NlNDZiZmFjZmRhZmMzMGZkOTE2OTllMTAyNjcwMzY5MmVjZTc4MWMw
|
11
|
+
OWQ3NGY2MGZiYWNjNTAwMDc2MGNmNGYzNTY4NWZiZTQ2ODdjNmQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWE1ODZlNjEzMzdiYWRjNWQ4YzcyMzhlM2NjYjMyYmJhNzIwZjY5N2ZlZjBj
|
14
|
+
ZWM2NTc1NTFjZDUxMTc2Njk3OTE1MDE2ZmVmNTFhYzdmMTJiYjc0MmIzODY5
|
15
|
+
Mjk2NjFkMTIwODJmNjIzNDQxYzU3YzM4OTcwYjg3NThlMzQ1ZTc=
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/cacheable_delegator.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cacheable_delegator"
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dan Nguyen"]
|
12
|
-
s.date = "2013-10-
|
12
|
+
s.date = "2013-10-29"
|
13
13
|
s.description = "Create a cache model for your active records"
|
14
14
|
s.email = "dansonguyen@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/cacheable_delegator.rb
CHANGED
@@ -15,13 +15,16 @@ module CacheableDelegator
|
|
15
15
|
|
16
16
|
module ClassMethods
|
17
17
|
|
18
|
-
|
19
|
-
# it does not change the schema unless invoked with the bang!
|
20
|
-
def cache_and_delegate(klass, opts={}, &blk)
|
18
|
+
def cache_record_class(klass)
|
21
19
|
raise ArgumentError, "Must pass in a class, not a #{klass}" unless klass.is_a?(Class)
|
22
20
|
self.source_class = klass
|
23
|
-
belongs_to :source_record, class_name: self.source_class.to_s
|
21
|
+
belongs_to :source_record, class_name: self.source_class.to_s
|
22
|
+
end
|
24
23
|
|
24
|
+
# this method defines the relation to an existing ActiveModel
|
25
|
+
# it does not change the schema unless invoked with the bang!
|
26
|
+
def cache_and_delegate(klass, opts={}, &blk)
|
27
|
+
cache_record_class(klass)
|
25
28
|
# This is why you have to define custom columns in the given block
|
26
29
|
# or after the call to cache and delegate
|
27
30
|
|
@@ -84,6 +87,10 @@ module CacheableDelegator
|
|
84
87
|
source_class.columns.reject{|c| EXCLUDED_FIELDS.any?{|f| f.to_s == c.name }}
|
85
88
|
end
|
86
89
|
|
90
|
+
def source_column_names
|
91
|
+
source_columns.map{|s| s.name}
|
92
|
+
end
|
93
|
+
|
87
94
|
def source_reflections
|
88
95
|
source_class.reflections
|
89
96
|
end
|
@@ -112,15 +119,15 @@ module CacheableDelegator
|
|
112
119
|
def add_custom_column(col_name, opts={})
|
113
120
|
col_str = col_name.to_s
|
114
121
|
is_bespoke = opts.delete :bespoke
|
115
|
-
if !self.source_class.method_defined?(col_str) && is_bespoke != true
|
116
|
-
raise ArgumentError, "Since :bespoke != true, #{self.source_class} was expected to respond_to? :#{col_str}"
|
122
|
+
if !(self.source_class.method_defined?(col_str) || self.source_class.new.respond_to?(col_str)) && is_bespoke != true
|
123
|
+
raise ArgumentError, "Since :bespoke != true, instance of #{self.source_class} was expected to respond_to? :#{col_str}"
|
117
124
|
end
|
118
125
|
|
119
126
|
custom_columns[col_name.to_s] = opts
|
120
127
|
end
|
121
128
|
|
122
129
|
def custom_columns
|
123
|
-
self._custom_columns
|
130
|
+
self._custom_columns
|
124
131
|
end
|
125
132
|
|
126
133
|
def reset_custom_columns!
|
@@ -158,16 +165,23 @@ module CacheableDelegator
|
|
158
165
|
|
159
166
|
################### Builder methods
|
160
167
|
module ClassMethods
|
161
|
-
|
168
|
+
|
169
|
+
def build_attributes_hash(source_obj)
|
162
170
|
att_hsh = self.value_column_names.inject({}) do |hsh, cname|
|
163
|
-
|
171
|
+
if source_obj.respond_to?(cname)
|
172
|
+
hsh[cname] = source_obj.send cname
|
173
|
+
end
|
164
174
|
hsh
|
165
175
|
end
|
176
|
+
end
|
166
177
|
|
167
|
-
|
168
|
-
|
178
|
+
def build_cache(source_obj)
|
179
|
+
att_hsh = build_attributes_hash(source_obj)
|
169
180
|
|
170
|
-
|
181
|
+
c_record = self.new(att_hsh)
|
182
|
+
c_record.source_record = source_obj
|
183
|
+
|
184
|
+
c_record
|
171
185
|
end
|
172
186
|
|
173
187
|
def create_cache(obj)
|
@@ -178,5 +192,17 @@ module CacheableDelegator
|
|
178
192
|
end
|
179
193
|
end
|
180
194
|
|
195
|
+
# instance method
|
196
|
+
# pre: must already have source_record set
|
197
|
+
|
198
|
+
|
199
|
+
def refresh_cache!
|
200
|
+
atts = self.class.build_attributes_hash(self.source_record)
|
201
|
+
self.update_attributes(obj)
|
202
|
+
|
203
|
+
self
|
204
|
+
end
|
205
|
+
|
206
|
+
|
181
207
|
end
|
182
208
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cacheable_delegator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|