class Perpetuity::Memory

Constants

VERSION

Public Class Methods

new(options = {}) click to toggle source
# File lib/perpetuity/memory.rb, line 9
def initialize options = {}
  @cache    = Hash.new
  @indexes  = Hash.new
end

Public Instance Methods

activate_index!(klass) click to toggle source
# File lib/perpetuity/memory.rb, line 103
def activate_index! klass
  true
end
active_indexes(klass) click to toggle source
# File lib/perpetuity/memory.rb, line 99
def active_indexes klass
  indexes(klass)
end
all(klass) click to toggle source
# File lib/perpetuity/memory.rb, line 51
def all klass
  collection(klass).values
end
can_serialize?(value) click to toggle source
# File lib/perpetuity/memory.rb, line 78
def can_serialize? value
  true
end
count(klass, criteria=nil, &block) click to toggle source
# File lib/perpetuity/memory.rb, line 25
def count klass, criteria=nil, &block
  if block_given?
    collection(klass).values.select(&block).size
  elsif criteria
    collection(klass).values.select(&criteria).size
  else
    collection(klass).size
  end
end
delete(object, klass=nil) click to toggle source
# File lib/perpetuity/memory.rb, line 55
def delete object, klass=nil
  klass ||= object.class
  id = object.class == String || !object.respond_to?(:id) ? object : object.id

  collection(klass).each_with_index do |record, index|
    if record[:id] === id
      collection(klass).delete_at index
    end
  end
end
delete_all(klass) click to toggle source
# File lib/perpetuity/memory.rb, line 35
def delete_all klass
  collection(klass).clear
end
find(klass, id) click to toggle source
# File lib/perpetuity/memory.rb, line 43
def find klass, id
  collection(klass)[id]
end
first(klass) click to toggle source
# File lib/perpetuity/memory.rb, line 39
def first klass
  all(klass).first
end
increment(klass, id, attribute, count=1) click to toggle source
# File lib/perpetuity/memory.rb, line 74
def increment klass, id, attribute, count=1
  find(klass, id)[attribute] += count
end
index(klass, attribute, options={}) click to toggle source
# File lib/perpetuity/memory.rb, line 91
def index klass, attribute, options={}
  indexes(klass) << attribute
end
indexes(klass) click to toggle source
# File lib/perpetuity/memory.rb, line 95
def indexes klass
  @indexes[klass] ||= Set.new
end
insert(klass, object, _) click to toggle source
# File lib/perpetuity/memory.rb, line 14
def insert klass, object, _
  if object.is_a? Array
    return object.map{|obj| insert(klass, obj, _)}
  end

  id = get_id(object) || set_id(object, SecureRandom.uuid)

  collection(klass)[id] = object
  id
end
query(&block) click to toggle source
# File lib/perpetuity/memory.rb, line 110
def query &block
  block
end
remove_index(index) click to toggle source
# File lib/perpetuity/memory.rb, line 107
def remove_index index
end
retrieve(klass, criteria, options = {}) click to toggle source
# File lib/perpetuity/memory.rb, line 47
def retrieve klass, criteria, options = {}
  collection(klass).values.find_all(&criteria)
end
serialize(object, mapper) click to toggle source
# File lib/perpetuity/memory.rb, line 82
def serialize object, mapper
  object.dup
end
unserialize(data, mapper) click to toggle source
# File lib/perpetuity/memory.rb, line 86
def unserialize data, mapper
  data.dup
end
update(klass, id, new_data) click to toggle source
# File lib/perpetuity/memory.rb, line 66
def update klass, id, new_data
  collection(klass).each_with_index do |record, index|
    if record[:id] == id
      collection(klass)[index] = record.merge(new_data)
    end
  end
end

Protected Instance Methods

collection(klass) click to toggle source
# File lib/perpetuity/memory.rb, line 116
def collection klass
  @cache[klass] = Hash.new unless @cache.has_key? klass
  @cache[klass]
end
get_id(object) click to toggle source
# File lib/perpetuity/memory.rb, line 121
def get_id(object)
  if object.respond_to?(:id)
    object.id
  elsif object.respond_to?(:fetch)
    object.fetch(:id, nil)
  elsif object.respond_to?(:[])
    object[:id] || nil
  else
    object.instance_variable_get(:@id)
  end
end
set_id(object, id) click to toggle source
# File lib/perpetuity/memory.rb, line 133
def set_id(object, id)
  if object.respond_to?(:id=)
    object.id = id
  elsif object.respond_to?(:[]=)
    object[:id] = id
  else
    object.instance_variable_set(:@id, id)
  end
  id
end