module ORMivore::Repo

Attributes

entity_class[R]
port[R]

Public Class Methods

included(base) click to toggle source
# File lib/ormivore/repo.rb, line 10
def self.included(base)
  base.extend(ClassMethods)
end
new(port, entity_class = nil) click to toggle source
# File lib/ormivore/repo.rb, line 14
def initialize(port, entity_class = nil)
  @port = port
  @entity_class = entity_class || self.class.default_entity_class
end

Public Instance Methods

find_by_id(id, options = {}) click to toggle source
# File lib/ormivore/repo.rb, line 19
def find_by_id(id, options = {})
  quiet = options.fetch(:quiet, false)

  attrs_to_entity(port.find(
      { id: id },
      [:id].concat(entity_class.attributes_list),
      {}
    ).first
 ).tap { |record|
   raise RecordNotFound, "#{entity_class.name} with id #{id} was not found" if record.nil? && !quiet
 }
end
persist(entity) click to toggle source
# File lib/ormivore/repo.rb, line 32
def persist(entity)
  if entity.id
    count = port.update(entity.changes, { :id => entity.id })
    raise ORMivore::StorageError, 'No records updated' if count.zero?
    raise ORMivore::StorageError, 'WTF' if count > 1

    entity_class.construct(entity.attributes, entity.id)
  else
    attrs_to_entity(port.create(entity.changes))
  end
end

Private Instance Methods

attrs_to_entity(attrs) click to toggle source
# File lib/ormivore/repo.rb, line 48
def attrs_to_entity(attrs)
  if attrs
    entity_id = attrs.delete(:id)
    attrs.reject! {|k,v| v.nil? }
    entity_class.construct(attrs, entity_id)
  else
    nil
  end
end