Sha256: bdabc8e17e332745afcbc3c72c3d63d6909165c9479175fc0ef60188b04f58a0

Contents?: true

Size: 773 Bytes

Versions: 1

Compression:

Stored size: 773 Bytes

Contents

module Kamerling class Repo
  NotFound = Class.new RuntimeError

  def initialize klass, source
    @klass, @source = klass, source
  end

  def << object
    hash = object.to_h
    warn_off { source << hash }
  rescue Sequel::UniqueConstraintViolation
    warn_off { source.where(uuid: object.uuid).update hash }
  end

  def [] uuid
    hash = warn_off { source[uuid: uuid] }
    raise NotFound, "#{klass} with UUID #{uuid}" unless hash
    klass.from_h hash
  end

  def all
    source.all.map { |hash| klass.from_h hash }
  end

  def related_to object
    key = "#{object.class.name.split('::').last.downcase}_uuid".to_sym
    source.where(key => object.uuid).map { |hash| klass.from_h hash }
  end

  attr_reader :klass, :source
  private     :klass, :source
end end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kamerling-0.0.1 lib/kamerling/repo.rb