class RubyEventStore::ROM::SQL::Relations::StreamEntries

Constants

DIRECTION_MAP
SERIALIZED_GLOBAL_STREAM_NAME

Public Instance Methods

by_event_id(event_id) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 28
def by_event_id(event_id)
  where(event_id: event_id)
end
by_event_type(types) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 32
def by_event_type(types)
  join(:events).where(event_type: types)
end
by_stream(stream) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 24
def by_stream(stream)
  where(stream: normalize_stream_name(stream))
end
by_stream_and_event_id(stream, event_id) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 36
def by_stream_and_event_id(stream, event_id)
  where(stream: normalize_stream_name(stream), event_id: event_id).one!
end
create_changeset(tuples) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 20
def create_changeset(tuples)
  changeset(ROM::Changesets::CreateStreamEntries, tuples)
end
max_position(stream) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 40
def max_position(stream)
  by_stream(stream).select(:position).order(Sequel.desc(:position)).first
end
ordered(direction, stream, offset_entry_id = nil, stop_entry_id = nil) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 49
def ordered(direction, stream, offset_entry_id = nil, stop_entry_id = nil)
  order, operator_offset, operator_stop = DIRECTION_MAP[direction]

  raise ArgumentError, 'Direction must be :forward or :backward' if order.nil?

  order_columns = %i[position id]
  order_columns.delete(:position) if stream.global?

  query = by_stream(stream)
  query = query.where { id.public_send(operator_offset, offset_entry_id) } if offset_entry_id
  query = query.where { id.public_send(operator_stop, stop_entry_id) } if stop_entry_id
  query.order { |r| order_columns.map { |c| r[:stream_entries][c].public_send(order) } }
end

Private Instance Methods

normalize_stream_name(stream) click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/relations/stream_entries.rb, line 65
def normalize_stream_name(stream)
  stream.global? ? SERIALIZED_GLOBAL_STREAM_NAME : stream.name
end