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