class SandthornDriverSequel::EventQuery

Attributes

storage[R]

Public Class Methods

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

Public Instance Methods

build( aggregate_types: [], take: 0, after_sequence_number: 0) click to toggle source
# File lib/sandthorn_driver_sequel/event_query.rb, line 7
def build(
  aggregate_types: [],
  take: 0,
  after_sequence_number: 0)

  aggregate_types.map!(&:to_s)

  query = storage.events
  query = add_aggregate_types(query, aggregate_types)
  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_sequel/event_query.rb, line 22
def events
  @query.all
end

Private Instance Methods

add_aggregate_types(query, aggregate_types) click to toggle source
# File lib/sandthorn_driver_sequel/event_query.rb, line 60
def add_aggregate_types(query, aggregate_types)
  if aggregate_types.any?
    query.join(storage.aggregates_table_name, id: :aggregate_table_id, aggregate_type: aggregate_types)
  else
    query.join(storage.aggregates_table_name, id: :aggregate_table_id)
  end
end
add_limit(query, take) click to toggle source
# File lib/sandthorn_driver_sequel/event_query.rb, line 30
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_sequel/event_query.rb, line 38
def add_select(query)
  query.select(*select_columns)
end
add_sequence_number(query, after_sequence_number) click to toggle source
# File lib/sandthorn_driver_sequel/event_query.rb, line 56
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_sequel/event_query.rb, line 42
def select_columns
  rel = Sequel.qualify(storage.events_table_name, :aggregate_version)
  [
    :aggregate_type,
    rel,
    :aggregate_id,
    :sequence_number,
    :event_name,
    :event_data,
    :event_metadata,
    :timestamp
  ]
end