Class: Sequent::Core::Projector

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Helpers::MessageHandler, Migratable
Defined in:
lib/sequent/core/projector.rb

Overview

Projectors listen to events and update the view state as they see fit.

Example of updating view state, in this case the InvoiceRecord table representing an Invoice

class InvoiceProjector < Sequent::Core::Projector
  manages_tables InvoiceRecord

  on InvoiceCreated do |event|
    create_record(
      InvoiceRecord,
      recipient: event.recipient,
      amount: event.amount
    )
  end
end

Please note that the actual storage is abstracted away in the persistors. Due to this abstraction you can not traverse persist or traverse child objects like you are used to do with ActiveRecord. The following example will not work:

invoice_record.line_item_records << create_record(LineItemRecord, ...)

In this case you should simply do:

create_record(LineItemRecord, invoice_id: invoice_record.aggregate_id)

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Migratable

all, included, #managed_tables, none, projectors

Methods included from Helpers::MessageHandler

#handle_message, included

Constructor Details

#initialize(persistor = Sequent::Core::Persistors::ActiveRecordPersistor.new) ⇒ Projector

Returns a new instance of Projector.



72
73
74
75
# File 'lib/sequent/core/projector.rb', line 72

def initialize(persistor = Sequent::Core::Persistors::ActiveRecordPersistor.new)
  ensure_valid!
  @persistor = persistor
end

Class Method Details

.replay_persistorObject



77
78
79
# File 'lib/sequent/core/projector.rb', line 77

def self.replay_persistor
  nil
end