Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
90 lines (64 sloc) 1.89 KB
title
Publishing events

Defining an event

Firstly you have to define your own event model extending RailsEventStore::Event class.

class OrderPlaced < RailsEventStore::Event
end

# or

OrderPlaced = Class.new(RailsEventStore::Event)

Publishing an event

Then you can use publish method.

stream_name = "order_1"
event = OrderPlaced.new(data: {
  order_id: 1,
  order_data: "sample",
  festival_id: "b2d506fd-409d-4ec7-b02f-c6d2295c7edd"
})

#publishing an event for a specific stream
event_store.publish(event, stream_name: stream_name)

Publishing an event with optimistic locking

Publishing an event with optimistic locking requires providing explicitly expected_version parameter.

event = OrderPlaced.new(data: {
  order_id: 1,
  order_data: "sample",
  festival_id: "b2d506fd-409d-4ec7-b02f-c6d2295c7edd"
})

event_store.publish(
  event,
  stream_name: "order_1",
  expected_version: 3 # the position of the last
                      # event in this stream
)

expected_version

Providing expected_version is optional. The default value is :any. Allowed values are:

  • :any:
  • Integer such as -1, 0, 1, 2, 3...
  • :auto

For more information about when should you use which one, read expected_version explained

No stream

Providing stream_name is optional (but recommended).

event_store.publish(event)

If you don't provide the stream_name you can only read the events with read.to_a and read.backward.to_a queries (without filtering on particular stream name).

Appending an event to stream

In order to skip handlers you can append an event to a stream. This won't trigger the subscribed listeners.

event = OrderPlaced.new(data: {
  order_id: 1,
  order_data: "sample",
  festival_id: "b2d506fd-409d-4ec7-b02f-c6d2295c7edd"
})

event_store.append(
  event,
  stream_name: "order_1"
)