class SandthornDriverEventStore::EventQuery

Attributes

storage[R]

Public Class Methods

new(storage) click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 3
def initialize(storage)
  @storage = storage
end

Public Instance Methods

build( stream_name:, take: 0, after_sequence_number: 0) click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 7
def build(
  stream_name:,
  take: 0,
  after_sequence_number: 0)

  query = storage.events
  query = add_sequence_number(query, after_sequence_number)
  query = add_select(query)
  query = add_limit(query, take)
  @query = query.order(:sequence_number)
end
events() click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 19
def events
  @query.all
end

Private Instance Methods

add_aggregate_types(query, aggregate_types) click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 57
def add_aggregate_types(query, aggregate_types)
  if aggregate_types.any?
    query = query.where( :aggregate_type => aggregate_types )
  end
  query
end
add_limit(query, take) click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 27
def add_limit(query, take)
  if take > 0
    query.limit(take)
  else
    query
  end
end
add_select(query) click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 35
def add_select(query)
  query.select(*select_columns)
end
add_sequence_number(query, after_sequence_number) click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 53
def add_sequence_number(query, after_sequence_number)
  query.where { sequence_number > after_sequence_number }
end
select_columns() click to toggle source
# File lib/sandthorn_driver_event_store/event_query.rb, line 39
def select_columns
  aggregate_version = Sequel.qualify(storage.events_table_name, :aggregate_version)
  aggregate_id = Sequel.qualify(storage.events_table_name, :aggregate_id)
  [
    :aggregate_type,
    aggregate_version,
    aggregate_id,
    :sequence_number,
    :event_name,
    :event_data,
    :timestamp
  ]
end