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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sequent +65 -0
  3. data/db/sequent_schema.rb +9 -8
  4. data/lib/sequent.rb +3 -0
  5. data/lib/sequent/configuration.rb +67 -0
  6. data/lib/sequent/core/aggregate_repository.rb +1 -1
  7. data/lib/sequent/core/core.rb +2 -2
  8. data/lib/sequent/core/event_store.rb +2 -2
  9. data/lib/sequent/core/helpers/attribute_support.rb +3 -0
  10. data/lib/sequent/core/helpers/self_applier.rb +1 -1
  11. data/lib/sequent/core/{record_sessions/active_record_session.rb → persistors/active_record_persistor.rb} +21 -19
  12. data/lib/sequent/core/persistors/persistor.rb +84 -0
  13. data/lib/sequent/core/persistors/persistors.rb +3 -0
  14. data/lib/sequent/core/{record_sessions/replay_events_session.rb → persistors/replay_optimized_postgres_persistor.rb} +16 -7
  15. data/lib/sequent/core/projector.rb +96 -0
  16. data/lib/sequent/generator.rb +2 -0
  17. data/lib/sequent/generator/aggregate.rb +71 -0
  18. data/lib/sequent/generator/project.rb +61 -0
  19. data/lib/sequent/generator/template_aggregate/template_aggregate.rb +4 -0
  20. data/lib/sequent/generator/template_aggregate/template_aggregate/commands.rb +2 -0
  21. data/lib/sequent/generator/template_aggregate/template_aggregate/events.rb +2 -0
  22. data/lib/sequent/generator/template_aggregate/template_aggregate/template_aggregate.rb +9 -0
  23. data/lib/sequent/generator/template_aggregate/template_aggregate/template_aggregate_command_handler.rb +5 -0
  24. data/lib/sequent/generator/template_project/Gemfile +11 -0
  25. data/lib/sequent/generator/template_project/Gemfile.lock +72 -0
  26. data/lib/sequent/generator/template_project/Rakefile +12 -0
  27. data/lib/sequent/generator/template_project/app/projectors/post_projector.rb +22 -0
  28. data/lib/sequent/generator/template_project/app/records/post_record.rb +2 -0
  29. data/lib/sequent/generator/template_project/config/initializers/sequent.rb +13 -0
  30. data/lib/sequent/generator/template_project/db/database.yml +17 -0
  31. data/lib/sequent/generator/template_project/db/migrations.rb +17 -0
  32. data/lib/sequent/generator/template_project/db/sequent_schema.rb +51 -0
  33. data/lib/sequent/generator/template_project/db/tables/post_records.sql +10 -0
  34. data/lib/sequent/generator/template_project/lib/post.rb +4 -0
  35. data/lib/sequent/generator/template_project/lib/post/commands.rb +4 -0
  36. data/lib/sequent/generator/template_project/lib/post/events.rb +14 -0
  37. data/lib/sequent/generator/template_project/lib/post/post.rb +24 -0
  38. data/lib/sequent/generator/template_project/lib/post/post_command_handler.rb +5 -0
  39. data/lib/sequent/generator/template_project/my_app.rb +11 -0
  40. data/lib/sequent/generator/template_project/spec/app/projectors/post_projector_spec.rb +32 -0
  41. data/lib/sequent/generator/template_project/spec/lib/post/post_command_handler_spec.rb +20 -0
  42. data/lib/sequent/generator/template_project/spec/spec_helper.rb +29 -0
  43. data/lib/sequent/migrations/migrate_events.rb +1 -0
  44. data/lib/sequent/migrations/migrations.rb +2 -0
  45. data/lib/sequent/migrations/projectors.rb +18 -0
  46. data/lib/sequent/migrations/view_schema.rb +364 -0
  47. data/lib/sequent/rake/migration_tasks.rb +109 -0
  48. data/lib/sequent/rake/tasks.rb +16 -0
  49. data/lib/sequent/sequent.rb +53 -13
  50. data/lib/sequent/support/database.rb +53 -8
  51. data/lib/sequent/util/printer.rb +16 -0
  52. data/lib/sequent/util/timer.rb +14 -0
  53. data/lib/sequent/util/util.rb +2 -0
  54. data/lib/version.rb +1 -1
  55. metadata +67 -14
  56. data/lib/sequent/core/base_event_handler.rb +0 -54
  57. 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
@@ -1,2 +0,0 @@
1
- require_relative 'active_record_session'
2
- require_relative 'replay_events_session'