class Endymion::Memory

Attributes

store[R]

Public Class Methods

new(opts={}) click to toggle source
# File lib/endymion/memory.rb, line 8
def initialize(opts={})
  @store = {}
end

Public Instance Methods

count(query) click to toggle source
# File lib/endymion/memory.rb, line 57
def count(query)
  find(query).length
end
create(records) click to toggle source
# File lib/endymion/memory.rb, line 21
def create(records)
  records.map do |record|
    raise 'duplicate key' if record[:key] && store.key?(record[:key])
    record[:key] ||= generate_key
    store[record[:key]] = record
    record
  end
end
delete(query) click to toggle source
# File lib/endymion/memory.rb, line 49
def delete(query)
  records = find(query)
  store.delete_if do |key, record|
    records.include?(record)
  end
  nil
end
delete_by_key(kind, key) click to toggle source
# File lib/endymion/memory.rb, line 44
def delete_by_key(kind, key)
  store.delete(key)
  nil
end
find(query) click to toggle source
# File lib/endymion/memory.rb, line 34
def find(query)
  records = store.values
  records = filter_kind(query.kind,             records)
  records = Helper.apply_filters(query.filters, records)
  records = Helper.apply_sorts(query.sorts,     records)
  records = Helper.apply_offset(query.offset,   records)
  records = Helper.apply_limit(query.limit,     records)
  records
end
find_by_key(kind, key) click to toggle source
# File lib/endymion/memory.rb, line 30
def find_by_key(kind, key)
  store[key]
end
save(records) click to toggle source
# File lib/endymion/memory.rb, line 12
def save(records)
  records.map do |record|
    key = Endymion.new?(record) ? generate_key : record[:key]
    record[:key] = key
    store[key] = record
    record
  end
end

Private Instance Methods

filter_kind(kind, records) click to toggle source
# File lib/endymion/memory.rb, line 65
def filter_kind(kind, records)
  records.select do |record|
    record[:kind] == kind
  end
end
generate_key() click to toggle source
# File lib/endymion/memory.rb, line 71
def generate_key
  Endymion::Key.generate_id
end