gem "rails_event_store", "~> 2.1.0" after_bundle do initializer 'rails_event_store.rb', <<~CODE require 'rails_event_store' require 'aggregate_root' require 'arkency/command_bus' Rails.configuration.to_prepare do Rails.configuration.event_store = RailsEventStore::Client.new Rails.configuration.command_bus = Arkency::CommandBus.new AggregateRoot.configure do |config| config.default_event_store = Rails.configuration.event_store end # Subscribe event handlers below Rails.configuration.event_store.tap do |store| # store.subscribe(InvoiceReadModel.new, to: [InvoicePrinted]) # store.subscribe(lambda { |event| SendOrderConfirmation.new.call(event) }, to: [OrderSubmitted]) # store.subscribe_to_all_events(lambda { |event| Rails.logger.info(event.event_type) }) store.subscribe_to_all_events(RailsEventStore::LinkByEventType.new) store.subscribe_to_all_events(RailsEventStore::LinkByCorrelationId.new) store.subscribe_to_all_events(RailsEventStore::LinkByCausationId.new) end # Register command handlers below # Rails.configuration.command_bus.tap do |bus| # bus.register(PrintInvoice, Invoicing::OnPrint.new) # bus.register(SubmitOrder, ->(cmd) { Ordering::OnSubmitOrder.new.call(cmd) }) # end end CODE generate 'rails_event_store_active_record:migration' rails_command 'db:migrate' route "mount RailsEventStore::Browser => '/res' if Rails.env.development?" end