Event driven Rails application with Rails Event Store
New Rails application with Rails Event Store gem
Used 13 times
A
Arkency
Usage
Just use provided application template and run:
rails new -m https://railseventstore.org/new YOUR-APP-NAME
See more at https://railseventstore.org/docs/start/
Run this command in your Rails app directory in the terminal:
rails app:template LOCATION="https://railsbytes.com/script/Vqqsn4"
Template Source
Review the code before running this template on your machine.
gem 'rails_event_store', '~> 1.0.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(->(event) { SendOrderConfirmation.new.call(event) }, to: [OrderSubmitted])
# store.subscribe_to_all_events(->(event) { Rails.logger.info(event.type) })
# 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