Rails Event Store

Client Errors

When using Rails Event Store you have to be prepared for following errors:

RubyEventStore::WrongExpectedEventVersion

Occurs when other writer has written to the same stream as we intended to and last stream version has changed:

client.publish(OrderPlaced.new, stream_name: 'Order$1', expected_version: 0)

expect do
  client.publish(OrderCompleted.new, stream_name: 'Order$1', expected_version: 0)
end.to raise_error(WrongExpectedEventVersion)

Second write to the stream should have happened with expected_version: 1 above.

RubyEventStore::EventDuplicatedInStream

Occurs when you're writing same event more than once.

order_placed = OrderPlaced.new
client.publish(order_placed, stream_name: 'Order$1', expected_version: 0)

expect do
  client.publish(order_placed, stream_name: 'Order$1', expected_version: 1)
end.to raise_error(WrongExpectedEventVersion)

If you want to have an event present in multiple streams, you have to link it with link.

RubyEventStore::InvalidExpectedVersion

Occurs when invalid exception_version is passed in append_to_stream, link_to_stream or publish. Valid values are Integer or one of :any, :none, :auto.

expect do
  client.append(OrderPlaced.new, stream_name: 'Order$1', expected_version: nil)
end.to raise_error(InvalidExpectedVersion)

RubyEventStore::IncorrectStreamData

Occurs when invalid stream_name is passed in any client method expecting it. Name must not be nil or empty string.

expect do
  client.append(OrderPlaced.new, stream_name: nil)
end.to raise_error(IncorrectStreamData)

RubyEventStore::EventNotFound

Occurs when event of given id cannot be found. This can happen either when looking for particular event details via read_event or when reading stream, starting from given event.

none_such_id = SecureRandom.uuid
expect do
  client.read.stream('Order$1').from(none_such_id).to_a
end.to raise_error(EventNotFound)

RubyEventStore::InvalidPageStart

Occurs when reading a stream with invalid start parameter passed. Must not be nil or empty string.

expect do
  client.read.stream('Order$1').from(nil).to_a
end.to raise_error(InvalidPageStart)

RubyEventStore::InvalidPageStop

Occurs when reading a stream with invalid to parameter passed. Must not be nil or empty string.

expect do
  client.read.stream('Order$1').to(nil).to_a
end.to raise_error(InvalidPageStop)

RubyEventStore::InvalidPageSize

Occurs when expecting to read less than one event from a stream:

expect do
  client.read.stream('Order$1').limit(-1).to_a
end.to raise_error(InvalidPageSize)

RubyEventStore::SubscriberNotExist

Occurs when given subscriber is nil.

expect do
  client.subscribe(nil, to: [OrderPlaced])
end.to raise_error(SubscriberNotExist)

RubyEventStore::InvalidHandler

Occurs when given subscriber is not a valid handler to given dispatcher.

subscriber = Object.new
expect do
  client.subscribe(subscriber, to: [OrderPlaced])
end.to raise_error(InvalidHandler)

RubyEventStore::ReservedInternalName

Occurs when passing stream name of all when using RailsEventStoreActiveRecord of RubyEventStore::ROM repository. This stream name is used internally to implement global stream. Use dedicated global stream readers in order to read events from it.

RubyEventStore::ProtobufEncodingFailed

Raised when event's data is not serializable by RubyEventStore::Mappers::Protobuf.