cache2base 0.0.5 → 0.0.6
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.
- data/lib/cache2base/core.rb +67 -16
- data/lib/cache2base/version.rb +1 -1
- metadata +3 -3
data/lib/cache2base/core.rb
CHANGED
@@ -4,6 +4,7 @@ module Cache2base
|
|
4
4
|
klass.class_eval "@ttl ||= 0"
|
5
5
|
klass.class_eval "@collections ||= []"
|
6
6
|
klass.class_eval "@server ||= Cache2base.server"
|
7
|
+
klass.class_eval "attr_accessor :values"
|
7
8
|
klass.extend(ClassMethods)
|
8
9
|
end
|
9
10
|
|
@@ -26,9 +27,10 @@ module Cache2base
|
|
26
27
|
|
27
28
|
def initialize(hsh = {}, params = {})
|
28
29
|
@new_instance = params[:new_instance].nil? ? true : params[:new_instance]
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
@values ||= hsh
|
31
|
+
#hsh.each_pair do |k,v|
|
32
|
+
# self.send(:"#{k}=", v)
|
33
|
+
#end
|
32
34
|
end
|
33
35
|
|
34
36
|
def new?
|
@@ -54,17 +56,22 @@ module Cache2base
|
|
54
56
|
end
|
55
57
|
|
56
58
|
def field_hash
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
@values
|
60
|
+
#o = {}
|
61
|
+
#self.class.fields.each do |field|
|
62
|
+
# o[field] = self.send(field) if !self.send(field).nil?
|
63
|
+
#end
|
64
|
+
#o
|
62
65
|
end
|
63
66
|
|
64
67
|
def collection_key(field)
|
65
68
|
self.class.collection_key(Hash[Array(field).collect {|f| [f, self.send(f)]}])
|
66
69
|
end
|
67
70
|
|
71
|
+
def collection_max(field)
|
72
|
+
self.class.collection_max(field)
|
73
|
+
end
|
74
|
+
|
68
75
|
def add_to_collections
|
69
76
|
self.class.collections.each do |field|
|
70
77
|
raise "Could not add field #{field} collection" unless add_to_collection(field)
|
@@ -75,6 +82,7 @@ module Cache2base
|
|
75
82
|
Array(field).each { |f| return 'could_not_add' if self.send(f).nil? } # still evaluates to true, so add_to_collections does not fail
|
76
83
|
success = server.cas(collection_key(field), self.class.ttl) do |value|
|
77
84
|
value << self.key unless value.include?(self.key)
|
85
|
+
value = value.drop(value.length - collection_max(field)) if collection_max(field) && value.length > collection_max(field)
|
78
86
|
value
|
79
87
|
end
|
80
88
|
|
@@ -140,6 +148,13 @@ module Cache2base
|
|
140
148
|
@server
|
141
149
|
end
|
142
150
|
|
151
|
+
def field_accessor(*fields)
|
152
|
+
fields.each do |field|
|
153
|
+
class_eval "def #{field}; @values[:\"#{field}\"]; end"
|
154
|
+
class_eval "def #{field}=(v); @values[:\"#{field}\"] = v; end"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
143
158
|
def set_primary_key(mk, params = {})
|
144
159
|
@primary_key = Array(mk)
|
145
160
|
#o = '#{self.class}'
|
@@ -173,7 +188,7 @@ module Cache2base
|
|
173
188
|
def set_fields(*fields)
|
174
189
|
@fields = @fields ? (@fields + (fields)) : (fields)
|
175
190
|
fields.each do |field|
|
176
|
-
class_eval "
|
191
|
+
class_eval "field_accessor :#{field}"
|
177
192
|
end
|
178
193
|
end
|
179
194
|
|
@@ -185,7 +200,7 @@ module Cache2base
|
|
185
200
|
@field_meta[field] ||= {}
|
186
201
|
@field_meta[field][:hash] = true
|
187
202
|
end
|
188
|
-
class_eval "
|
203
|
+
class_eval "field_accessor :#{field}"
|
189
204
|
end
|
190
205
|
|
191
206
|
def uses_hash?(field)
|
@@ -196,8 +211,10 @@ module Cache2base
|
|
196
211
|
fields = Array(fields).sort { |a,b| a.to_s <=> b.to_s }
|
197
212
|
@collections ||= []
|
198
213
|
@collections << fields
|
199
|
-
@
|
200
|
-
@
|
214
|
+
@collection_settings ||= {}
|
215
|
+
@collection_settings[fields.join(",").to_s] = {}
|
216
|
+
@collection_settings[fields.join(",").to_s][:hash_key] = true if params[:hash_key]
|
217
|
+
@collection_settings[fields.join(",").to_s][:max] = params[:max].to_i if params[:max]
|
201
218
|
end
|
202
219
|
|
203
220
|
def collections
|
@@ -209,12 +226,16 @@ module Cache2base
|
|
209
226
|
"#{@basename}_c_#{hash_collection?(keys) ? hash_key(keys.collect {|field| vhsh[field].to_s.gsub('_','-') }.join("_")) : keys.collect {|field| vhsh[field].to_s.gsub('_','-') }.join("_")}"
|
210
227
|
end
|
211
228
|
|
229
|
+
def collection_max(field)
|
230
|
+
@collection_settings[Array(field).join(',').to_s][:max]
|
231
|
+
end
|
232
|
+
|
212
233
|
def fields
|
213
234
|
@fields
|
214
235
|
end
|
215
236
|
|
216
237
|
def hash_collection?(field)
|
217
|
-
@
|
238
|
+
@collection_settings[Array(field).join(',').to_s][:hash_key]
|
218
239
|
end
|
219
240
|
|
220
241
|
def find(fields, params = {})
|
@@ -232,7 +253,7 @@ module Cache2base
|
|
232
253
|
def find_by_keys(keys)
|
233
254
|
hsh = server.get_multi(keys)
|
234
255
|
keys.collect do |key| # to get it back in order since get_multi results in a hash
|
235
|
-
self.from_hash(Marshal.load(hsh[key]))
|
256
|
+
hsh[key] ? self.from_hash(Marshal.load(hsh[key])) : nil
|
236
257
|
end.compact
|
237
258
|
end
|
238
259
|
|
@@ -245,9 +266,39 @@ module Cache2base
|
|
245
266
|
o.save
|
246
267
|
end
|
247
268
|
|
269
|
+
def clean_nil_keys(fields, keys)
|
270
|
+
server.cas(collection_key(fields), @ttl) do |current_keys|
|
271
|
+
keys.each do |key|
|
272
|
+
current_keys.delete(key)
|
273
|
+
end
|
274
|
+
|
275
|
+
current_keys
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
248
279
|
def all(fields, params = {})
|
249
|
-
|
250
|
-
|
280
|
+
keys = server.get(collection_key(fields))
|
281
|
+
hsh = server.get_multi(keys)
|
282
|
+
nils = []
|
283
|
+
|
284
|
+
o = (keys||[]).collect do |key| # to get it back in order since get_multi results in a hash
|
285
|
+
if hsh[key]
|
286
|
+
self.from_hash(Marshal.load(hsh[key]))
|
287
|
+
else
|
288
|
+
nils << key
|
289
|
+
nil
|
290
|
+
end
|
291
|
+
end.compact
|
292
|
+
|
293
|
+
# I do not like doing "garbage collection" on read, but cant find any other place to put it.
|
294
|
+
clean_nil_keys(fields, nils) if @ttl > 0 && !nils.empty?
|
295
|
+
|
296
|
+
o
|
251
297
|
end
|
298
|
+
|
299
|
+
#def all(fields, params = {})
|
300
|
+
# arr = server.get(collection_key(fields))
|
301
|
+
# find_by_keys(Array(arr)).compact
|
302
|
+
#end
|
252
303
|
end
|
253
304
|
end
|
data/lib/cache2base/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cache2base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jason Pearlman
|