class EventSource::Postgres::Get::Last

Public Class Methods

build(session: nil) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 9
def self.build(session: nil)
  new.tap do |instance|
    instance.configure(session: session)
  end
end
call(stream_name, session: nil) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 25
def self.call(stream_name, session: nil)
  instance = build(session: session)
  instance.(stream_name)
end
configure(receiver, attr_name: nil, session: nil) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 15
def self.configure(receiver, attr_name: nil, session: nil)
  attr_name ||= :get_last
  instance = build(session: session)
  receiver.public_send "#{attr_name}=", instance
end

Public Instance Methods

__convert(records) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 73
def __convert(records)
  logger.trace { "Converting records to event data (Records Count: #{records.ntuples})" }

  events = records.map do |record|
    record['data'] = Deserialize.data(record['data'])
    record['metadata'] = Deserialize.metadata(record['metadata'])
    record['time'] = Time.utc_coerced(record['time'])

    EventData::Read.build record

    break
  end

  logger.debug { "Converted records to event data (Event Data Count: #{events.length})" }

  events
end
call(stream_name) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 30
def call(stream_name)
  logger.trace { "Getting last event data (Stream Name: #{stream_name})" }

  record = get_record(stream_name)

  return nil if record.nil?

  event = convert(record)

  logger.info { "Finished getting event data (Stream Name: #{stream_name})" }
  logger.info(tags: [:data, :event_data]) { event.pretty_inspect }

  event
end
configure(session: nil) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 21
def configure(session: nil)
  Session.configure self, session: session
end
convert(record) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 59
def convert(record)
  logger.trace { "Converting record to event data" }

  record['data'] = Deserialize.data(record['data'])
  record['metadata'] = Deserialize.metadata(record['metadata'])
  record['time'] = Time.utc_coerced(record['time'])

  event = EventData::Read.build(record)

  logger.debug { "Converted record to event data" }

  event
end
get_record(stream_name) click to toggle source
# File lib/event_source/postgres/get/last.rb, line 45
def get_record(stream_name)
  logger.trace { "Getting last record (Stream: #{stream_name})" }

  select_statement = SelectStatement.build(stream_name)

  records = session.execute(select_statement.sql)

  logger.debug { "Finished getting record (Stream: #{stream_name})" }

  return nil if records.ntuples == 0

  records[0]
end