class Kybus::Storage::Datasource::Repository

Base class for repositories. The ID generator might get deprecated. It provides the interface for storing objects inside any persistance provider implemented. TODO: Find a better strategy for primary key handling.

Public Class Methods

new(id, id_generator) click to toggle source
# File lib/kybus/storage/datasource/repository.rb, line 14
def initialize(id, id_generator)
  @id = id
  @id_generator = id_generator
end

Public Instance Methods

create(id = nil) click to toggle source
# File lib/kybus/storage/datasource/repository.rb, line 27
def create(id = nil)
  data = create_initial_object(id)
  existent = exist?(data[@id])
  raise(ObjectAlreadyExists.new(data[@id], existent)) if existent

  create_(data)
end
create_initial_object(id) click to toggle source
# File lib/kybus/storage/datasource/repository.rb, line 19
def create_initial_object(id)
  return id if @id.nil? && id.is_a?(Hash)

  object = { @id => @id_generator.call(id, @id) }
  object.merge!(id) if id.is_a?(Hash)
  object
end
exist?(id) click to toggle source
# File lib/kybus/storage/datasource/repository.rb, line 35
def exist?(id)
  # Not the better solution, but works for objects that don't contain
  # a unique id.
  return if id.nil?

  get(id)
rescue ObjectNotFound
  nil
end