sequent 2.1.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/sequent +65 -0
- data/db/sequent_schema.rb +9 -8
- data/lib/sequent.rb +3 -0
- data/lib/sequent/configuration.rb +67 -0
- data/lib/sequent/core/aggregate_repository.rb +1 -1
- data/lib/sequent/core/core.rb +2 -2
- data/lib/sequent/core/event_store.rb +2 -2
- data/lib/sequent/core/helpers/attribute_support.rb +3 -0
- data/lib/sequent/core/helpers/self_applier.rb +1 -1
- data/lib/sequent/core/{record_sessions/active_record_session.rb → persistors/active_record_persistor.rb} +21 -19
- data/lib/sequent/core/persistors/persistor.rb +84 -0
- data/lib/sequent/core/persistors/persistors.rb +3 -0
- data/lib/sequent/core/{record_sessions/replay_events_session.rb → persistors/replay_optimized_postgres_persistor.rb} +16 -7
- data/lib/sequent/core/projector.rb +96 -0
- data/lib/sequent/generator.rb +2 -0
- data/lib/sequent/generator/aggregate.rb +71 -0
- data/lib/sequent/generator/project.rb +61 -0
- data/lib/sequent/generator/template_aggregate/template_aggregate.rb +4 -0
- data/lib/sequent/generator/template_aggregate/template_aggregate/commands.rb +2 -0
- data/lib/sequent/generator/template_aggregate/template_aggregate/events.rb +2 -0
- data/lib/sequent/generator/template_aggregate/template_aggregate/template_aggregate.rb +9 -0
- data/lib/sequent/generator/template_aggregate/template_aggregate/template_aggregate_command_handler.rb +5 -0
- data/lib/sequent/generator/template_project/Gemfile +11 -0
- data/lib/sequent/generator/template_project/Gemfile.lock +72 -0
- data/lib/sequent/generator/template_project/Rakefile +12 -0
- data/lib/sequent/generator/template_project/app/projectors/post_projector.rb +22 -0
- data/lib/sequent/generator/template_project/app/records/post_record.rb +2 -0
- data/lib/sequent/generator/template_project/config/initializers/sequent.rb +13 -0
- data/lib/sequent/generator/template_project/db/database.yml +17 -0
- data/lib/sequent/generator/template_project/db/migrations.rb +17 -0
- data/lib/sequent/generator/template_project/db/sequent_schema.rb +51 -0
- data/lib/sequent/generator/template_project/db/tables/post_records.sql +10 -0
- data/lib/sequent/generator/template_project/lib/post.rb +4 -0
- data/lib/sequent/generator/template_project/lib/post/commands.rb +4 -0
- data/lib/sequent/generator/template_project/lib/post/events.rb +14 -0
- data/lib/sequent/generator/template_project/lib/post/post.rb +24 -0
- data/lib/sequent/generator/template_project/lib/post/post_command_handler.rb +5 -0
- data/lib/sequent/generator/template_project/my_app.rb +11 -0
- data/lib/sequent/generator/template_project/spec/app/projectors/post_projector_spec.rb +32 -0
- data/lib/sequent/generator/template_project/spec/lib/post/post_command_handler_spec.rb +20 -0
- data/lib/sequent/generator/template_project/spec/spec_helper.rb +29 -0
- data/lib/sequent/migrations/migrate_events.rb +1 -0
- data/lib/sequent/migrations/migrations.rb +2 -0
- data/lib/sequent/migrations/projectors.rb +18 -0
- data/lib/sequent/migrations/view_schema.rb +364 -0
- data/lib/sequent/rake/migration_tasks.rb +109 -0
- data/lib/sequent/rake/tasks.rb +16 -0
- data/lib/sequent/sequent.rb +53 -13
- data/lib/sequent/support/database.rb +53 -8
- data/lib/sequent/util/printer.rb +16 -0
- data/lib/sequent/util/timer.rb +14 -0
- data/lib/sequent/util/util.rb +2 -0
- data/lib/version.rb +1 -1
- metadata +67 -14
- data/lib/sequent/core/base_event_handler.rb +0 -54
- data/lib/sequent/core/record_sessions/record_sessions.rb +0 -2
@@ -1,54 +0,0 @@
|
|
1
|
-
require_relative 'helpers/self_applier'
|
2
|
-
|
3
|
-
module Sequent
|
4
|
-
module Core
|
5
|
-
# EventHandlers listen to events and handle them according to their responsibility.
|
6
|
-
#
|
7
|
-
# Examples:
|
8
|
-
# * Updating view states
|
9
|
-
# * Sending emails
|
10
|
-
# * Executing other commands based on events (chainging)
|
11
|
-
#
|
12
|
-
# Example of updating view state, in this case the InvoiceRecord table representing an Invoice
|
13
|
-
#
|
14
|
-
# class InvoiceCommandHandler < Sequent::Core::BaseCommandHandler
|
15
|
-
# on CreateInvoiceCommand do |command|
|
16
|
-
# create_record(
|
17
|
-
# InvoiceRecord,
|
18
|
-
# recipient: command.recipient,
|
19
|
-
# amount: command.amount
|
20
|
-
# )
|
21
|
-
# end
|
22
|
-
# end
|
23
|
-
#
|
24
|
-
# Please note that the actual storage is abstracted away in the +record_session+. Reason
|
25
|
-
# is when replaying the entire event_store our default choice, active_record, is too slow.
|
26
|
-
# Also we want to give the opportunity to use other storage mechanisms for the view state.
|
27
|
-
# See the +def_delegators+ which method to implement.
|
28
|
-
# Due to this abstraction you can not traverse into child objects when using ActiveRecord
|
29
|
-
# like you are used to:
|
30
|
-
#
|
31
|
-
# invoice_record.line_item_records << create_record(LineItemRecord, ...)
|
32
|
-
#
|
33
|
-
# In this case you should simply do:
|
34
|
-
#
|
35
|
-
# create_record(LineItemRecord, invoice_id: invoice_record.aggregate_id)
|
36
|
-
#
|
37
|
-
class BaseEventHandler
|
38
|
-
extend Forwardable
|
39
|
-
include Helpers::SelfApplier
|
40
|
-
|
41
|
-
def initialize(record_session = Sequent::Core::RecordSessions::ActiveRecordSession.new)
|
42
|
-
@record_session = record_session
|
43
|
-
end
|
44
|
-
|
45
|
-
def_delegators :@record_session, :update_record, :create_record, :create_records, :create_or_update_record, :get_record!, :get_record,
|
46
|
-
:delete_all_records, :update_all_records, :do_with_records, :do_with_record, :delete_record,
|
47
|
-
:find_records, :last_record, :execute
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
# Alias the above class
|
52
|
-
Projector = BaseEventHandler
|
53
|
-
end
|
54
|
-
end
|