sequent 2.1.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|