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