class MemcacheArray
Attributes
key[R]
Public Class Methods
new(key, client = nil)
click to toggle source
# File lib/memcache_array.rb, line 5 def initialize(key, client = nil) @key = key @client = client || Rails.cache end
Public Instance Methods
<<(data, metadata = nil)
click to toggle source
# File lib/memcache_array.rb, line 10 def <<(data, metadata = nil) raise ArgumentError, "You can only append arrays." unless data.is_a? Array index = next_index @client.write(metadata_key_with_index(index), metadata) if metadata @client.write(key_with_index(index), data) end
all(options = {}) { |metadata| ... }
click to toggle source
# File lib/memcache_array.rb, line 17 def all(options = {}) delete = options[:delete] indices.inject([]) do |accumulator, i| key = key_with_index(i) include_data = if block_given? metadata = @client.read(metadata_key_with_index(i)) metadata ? yield(metadata) : false else true end if include_data value = @client.read(key) delete_bucket(i) if delete accumulator += value.is_a?(Array) ? value : [] else accumulator end end end
delete!()
click to toggle source
# File lib/memcache_array.rb, line 38 def delete! indices.each do |i| @client.delete(key_with_index(i)) @client.delete(metadata_key_with_index(i)) end @client.delete(index_key) end
delete_bucket(index)
click to toggle source
# File lib/memcache_array.rb, line 46 def delete_bucket(index) delete_index(index) @client.delete(key_with_index(index)) end
delete_index(index)
click to toggle source
# File lib/memcache_array.rb, line 58 def delete_index(index) @client.write(index_key, (indices - [index])) end
index_key()
click to toggle source
# File lib/memcache_array.rb, line 66 def index_key "#{@key}_indices" end
indices()
click to toggle source
# File lib/memcache_array.rb, line 62 def indices @client.read(index_key) || [] end
key_with_index(index)
click to toggle source
# File lib/memcache_array.rb, line 70 def key_with_index(index) "#{@key}_#{index}" end
metadata_key_with_index(index)
click to toggle source
# File lib/memcache_array.rb, line 74 def metadata_key_with_index(index) "#{key_with_index(index)}_meta" end
next_index()
click to toggle source
# File lib/memcache_array.rb, line 51 def next_index indices_new = indices.dup || [] indices_new << (indices.last || -1) + 1 @client.write(index_key, indices_new) indices.last end