class EntitySnapshot::Postgres

Constants

Error

Attributes

session[RW]

Public Class Methods

assure(store) click to toggle source
# File lib/entity_snapshot/postgres/postgres.rb, line 58
def self.assure(store)
  if [store.snapshot_class, store.snapshot_interval].include?(nil)
    raise EntityCache::Store::External::Error
  end
end

Public Instance Methods

category() click to toggle source
# File lib/entity_snapshot/postgres/postgres.rb, line 15
def category
  StreamName.category(entity_class, specifier)
end
configure(session: nil) click to toggle source
# File lib/entity_snapshot/postgres/postgres.rb, line 19
def configure(session: nil)
  MessageStore::Postgres::Session.configure(self, session: session)
  MessageStore::Postgres::Put.configure(self, session: self.session, attr_name: :write)
  MessageStore::Postgres::Get::Stream::Last.configure(self, session: self.session, attr_name: :read)
end
put(id, entity, version, time) click to toggle source
# File lib/entity_snapshot/postgres/postgres.rb, line 25
def put(id, entity, version, time)
  unless entity.is_a?(entity_class)
    error_msg = "Persistent storage for #{entity_class} cannot store #{entity}"
    logger.error() { error_msg }
    raise Error, error_msg
  end

  stream_name = snapshot_stream_name(id)

  logger.trace(tags: [:cache, :put]) { "Writing snapshot (Stream: #{stream_name.inspect}, Entity Class: #{entity.class.name}, Version: #{version.inspect}, Time: #{time.utc.iso8601(3)})" }

  entity_data = Transform::Write.raw_data(entity)

  event_data = MessageStore::MessageData::Write.new

  iso8601_time = Clock::UTC.iso8601(time)

  data = {
    entity_data: entity_data,
    entity_version: version,
    time: iso8601_time
  }

  event_data.type = 'Recorded'
  event_data.data = data

  position = write.(event_data, stream_name)

  logger.debug(tags: [:cache, :put]) { "Wrote snapshot (Stream: #{stream_name.inspect}, Entity Class: #{entity.class.name}, Version: #{version.inspect}, Time: #{time.utc.iso8601(3)})" }

  position
end