sequent 6.0.1 → 7.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/db/sequent_schema.rb +5 -0
- data/lib/sequent/configuration.rb +64 -13
- data/lib/sequent/core/aggregate_repository.rb +2 -2
- data/lib/sequent/core/aggregate_snapshotter.rb +4 -0
- data/lib/sequent/core/base_command_handler.rb +5 -0
- data/lib/sequent/core/core.rb +1 -1
- data/lib/sequent/core/event.rb +2 -2
- data/lib/sequent/core/event_record.rb +1 -0
- data/lib/sequent/core/event_store.rb +20 -16
- data/lib/sequent/core/helpers/attribute_support.rb +7 -7
- data/lib/sequent/core/helpers/message_handler.rb +10 -11
- data/lib/sequent/core/helpers/message_router.rb +13 -7
- data/lib/sequent/core/persistors/active_record_persistor.rb +4 -0
- data/lib/sequent/core/persistors/persistor.rb +5 -0
- data/lib/sequent/core/persistors/replay_optimized_postgres_persistor.rb +140 -133
- data/lib/sequent/core/projector.rb +4 -0
- data/lib/sequent/core/transactions/active_record_transaction_provider.rb +2 -1
- data/lib/sequent/core/workflow.rb +4 -0
- data/lib/sequent/dry_run/dry_run.rb +4 -0
- data/lib/sequent/dry_run/read_only_replay_optimized_postgres_persistor.rb +26 -0
- data/lib/sequent/dry_run/view_schema.rb +36 -0
- data/lib/sequent/generator/template_project/db/sequent_schema.rb +1 -0
- data/lib/sequent/migrations/errors.rb +12 -0
- data/lib/sequent/migrations/migrations.rb +0 -1
- data/lib/sequent/migrations/planner.rb +11 -7
- data/lib/sequent/migrations/versions.rb +82 -0
- data/lib/sequent/migrations/view_schema.rb +101 -58
- data/lib/sequent/rake/migration_tasks.rb +89 -6
- data/lib/sequent/sequent.rb +4 -11
- data/lib/sequent/support/database.rb +3 -11
- data/lib/sequent/support.rb +0 -2
- data/lib/sequent/util/util.rb +1 -0
- data/lib/sequent/util/web/clear_cache.rb +19 -0
- data/lib/sequent.rb +1 -0
- data/lib/version.rb +1 -1
- metadata +20 -30
- data/lib/sequent/core/helpers/message_dispatcher.rb +0 -20
- data/lib/sequent/migrations/migrate_events.rb +0 -67
- data/lib/sequent/support/view_projection.rb +0 -61
- data/lib/sequent/support/view_schema.rb +0 -24
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Vonk
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2024-09-26 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: activemodel
|
@@ -20,40 +20,28 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
24
|
-
- - "<"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '7.1'
|
23
|
+
version: '6.0'
|
27
24
|
type: :runtime
|
28
25
|
prerelease: false
|
29
26
|
version_requirements: !ruby/object:Gem::Requirement
|
30
27
|
requirements:
|
31
28
|
- - ">="
|
32
29
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
- - "<"
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '7.1'
|
30
|
+
version: '6.0'
|
37
31
|
- !ruby/object:Gem::Dependency
|
38
32
|
name: activerecord
|
39
33
|
requirement: !ruby/object:Gem::Requirement
|
40
34
|
requirements:
|
41
35
|
- - ">="
|
42
36
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
44
|
-
- - "<"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '7.1'
|
37
|
+
version: '6.0'
|
47
38
|
type: :runtime
|
48
39
|
prerelease: false
|
49
40
|
version_requirements: !ruby/object:Gem::Requirement
|
50
41
|
requirements:
|
51
42
|
- - ">="
|
52
43
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
54
|
-
- - "<"
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '7.1'
|
44
|
+
version: '6.0'
|
57
45
|
- !ruby/object:Gem::Dependency
|
58
46
|
name: bcrypt
|
59
47
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,7 +107,7 @@ dependencies:
|
|
119
107
|
version: 2.6.5
|
120
108
|
- - "<"
|
121
109
|
- !ruby/object:Gem::Version
|
122
|
-
version: '3.
|
110
|
+
version: '3.4'
|
123
111
|
type: :runtime
|
124
112
|
prerelease: false
|
125
113
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -129,7 +117,7 @@ dependencies:
|
|
129
117
|
version: 2.6.5
|
130
118
|
- - "<"
|
131
119
|
- !ruby/object:Gem::Version
|
132
|
-
version: '3.
|
120
|
+
version: '3.4'
|
133
121
|
- !ruby/object:Gem::Dependency
|
134
122
|
name: pg
|
135
123
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,16 +164,16 @@ dependencies:
|
|
176
164
|
name: tzinfo
|
177
165
|
requirement: !ruby/object:Gem::Requirement
|
178
166
|
requirements:
|
179
|
-
- - "
|
167
|
+
- - ">="
|
180
168
|
- !ruby/object:Gem::Version
|
181
|
-
version: '
|
169
|
+
version: '1.1'
|
182
170
|
type: :runtime
|
183
171
|
prerelease: false
|
184
172
|
version_requirements: !ruby/object:Gem::Requirement
|
185
173
|
requirements:
|
186
|
-
- - "
|
174
|
+
- - ">="
|
187
175
|
- !ruby/object:Gem::Version
|
188
|
-
version: '
|
176
|
+
version: '1.1'
|
189
177
|
- !ruby/object:Gem::Dependency
|
190
178
|
name: pry
|
191
179
|
requirement: !ruby/object:Gem::Requirement
|
@@ -358,7 +346,6 @@ files:
|
|
358
346
|
- lib/sequent/core/helpers/equal_support.rb
|
359
347
|
- lib/sequent/core/helpers/helpers.rb
|
360
348
|
- lib/sequent/core/helpers/mergable.rb
|
361
|
-
- lib/sequent/core/helpers/message_dispatcher.rb
|
362
349
|
- lib/sequent/core/helpers/message_handler.rb
|
363
350
|
- lib/sequent/core/helpers/message_handler_option_registry.rb
|
364
351
|
- lib/sequent/core/helpers/message_matchers/any.rb
|
@@ -396,6 +383,9 @@ files:
|
|
396
383
|
- lib/sequent/core/transactions/transactions.rb
|
397
384
|
- lib/sequent/core/value_object.rb
|
398
385
|
- lib/sequent/core/workflow.rb
|
386
|
+
- lib/sequent/dry_run/dry_run.rb
|
387
|
+
- lib/sequent/dry_run/read_only_replay_optimized_postgres_persistor.rb
|
388
|
+
- lib/sequent/dry_run/view_schema.rb
|
399
389
|
- lib/sequent/generator.rb
|
400
390
|
- lib/sequent/generator/aggregate.rb
|
401
391
|
- lib/sequent/generator/command.rb
|
@@ -428,21 +418,20 @@ files:
|
|
428
418
|
- lib/sequent/generator/template_project/spec/app/projectors/post_projector_spec.rb
|
429
419
|
- lib/sequent/generator/template_project/spec/lib/post/post_command_handler_spec.rb
|
430
420
|
- lib/sequent/generator/template_project/spec/spec_helper.rb
|
421
|
+
- lib/sequent/migrations/errors.rb
|
431
422
|
- lib/sequent/migrations/executor.rb
|
432
423
|
- lib/sequent/migrations/functions.rb
|
433
|
-
- lib/sequent/migrations/migrate_events.rb
|
434
424
|
- lib/sequent/migrations/migrations.rb
|
435
425
|
- lib/sequent/migrations/planner.rb
|
436
426
|
- lib/sequent/migrations/projectors.rb
|
437
427
|
- lib/sequent/migrations/sequent_schema.rb
|
438
428
|
- lib/sequent/migrations/sql.rb
|
429
|
+
- lib/sequent/migrations/versions.rb
|
439
430
|
- lib/sequent/migrations/view_schema.rb
|
440
431
|
- lib/sequent/rake/migration_tasks.rb
|
441
432
|
- lib/sequent/sequent.rb
|
442
433
|
- lib/sequent/support.rb
|
443
434
|
- lib/sequent/support/database.rb
|
444
|
-
- lib/sequent/support/view_projection.rb
|
445
|
-
- lib/sequent/support/view_schema.rb
|
446
435
|
- lib/sequent/test.rb
|
447
436
|
- lib/sequent/test/command_handler_helpers.rb
|
448
437
|
- lib/sequent/test/database_helpers.rb
|
@@ -454,6 +443,7 @@ files:
|
|
454
443
|
- lib/sequent/util/skip_if_already_processing.rb
|
455
444
|
- lib/sequent/util/timer.rb
|
456
445
|
- lib/sequent/util/util.rb
|
446
|
+
- lib/sequent/util/web/clear_cache.rb
|
457
447
|
- lib/version.rb
|
458
448
|
homepage: https://github.com/zilverline/sequent
|
459
449
|
licenses:
|
@@ -467,14 +457,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
467
457
|
requirements:
|
468
458
|
- - ">="
|
469
459
|
- !ruby/object:Gem::Version
|
470
|
-
version: '
|
460
|
+
version: '3.0'
|
471
461
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
472
462
|
requirements:
|
473
463
|
- - ">="
|
474
464
|
- !ruby/object:Gem::Version
|
475
465
|
version: '0'
|
476
466
|
requirements: []
|
477
|
-
rubygems_version: 3.
|
467
|
+
rubygems_version: 3.5.16
|
478
468
|
signing_key:
|
479
469
|
specification_version: 4
|
480
470
|
summary: Event sourcing framework for Ruby
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Sequent
|
4
|
-
module Core
|
5
|
-
module Helpers
|
6
|
-
class MessageDispatcher
|
7
|
-
def initialize(message_router, context)
|
8
|
-
@message_router = message_router
|
9
|
-
@context = context
|
10
|
-
end
|
11
|
-
|
12
|
-
def dispatch_message(message)
|
13
|
-
@message_router
|
14
|
-
.match_message(message)
|
15
|
-
.each { |handler| @context.instance_exec(message, &handler) }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
##
|
4
|
-
# When you need to upgrade the event store based on information of the previous schema version
|
5
|
-
# this is the place you need to implement a migration.
|
6
|
-
# Examples are: corrupt events (due to insufficient testing for instance...)
|
7
|
-
# or adding extra events to the event stream if a new concept is introduced.
|
8
|
-
#
|
9
|
-
# To implement a migration you should create a class according to the following contract:
|
10
|
-
# module Database
|
11
|
-
# class MigrateToVersionXXX
|
12
|
-
# def initialize(env)
|
13
|
-
# @env = env
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# def migrate
|
17
|
-
# # your migration code here...
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
module Sequent
|
23
|
-
module Migrations
|
24
|
-
class MigrateEvents
|
25
|
-
##
|
26
|
-
# @param env The string representing the current environment. E.g. "development", "production"
|
27
|
-
def initialize(env)
|
28
|
-
warn <<~EOS
|
29
|
-
[DEPRECATED] Use of MigrateEvents is deprecated and will be removed from future version. Please use Sequent::Migrations::ViewSchema instead. See the changelog on how to update.
|
30
|
-
EOS
|
31
|
-
@env = env
|
32
|
-
end
|
33
|
-
|
34
|
-
##
|
35
|
-
#
|
36
|
-
# @param current_version The current version of the application. E.g. 10
|
37
|
-
# @param new_version The version to migrate to. E.g. 11
|
38
|
-
# @param &after_migration_block an optional block (with the current upgrade version as param)
|
39
|
-
# to run after the migrations run. E.g. close resources
|
40
|
-
#
|
41
|
-
def execute_migrations(current_version, new_version)
|
42
|
-
migrations(current_version, new_version).each do |migration_class|
|
43
|
-
migration = migration_class.new(@env)
|
44
|
-
begin
|
45
|
-
migration.migrate
|
46
|
-
ensure
|
47
|
-
yield(migration.version) if block_given?
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def migrations(current_version, new_version)
|
53
|
-
return [] if current_version == 0
|
54
|
-
|
55
|
-
((current_version + 1)..new_version).map do |upgrade_to_version|
|
56
|
-
Class.const_get("Database::MigrateToVersion#{upgrade_to_version}")
|
57
|
-
rescue NameError
|
58
|
-
nil
|
59
|
-
end.compact
|
60
|
-
end
|
61
|
-
|
62
|
-
def has_migrations?(current_version, new_version)
|
63
|
-
migrations(current_version, new_version).any?
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'postgresql_cursor'
|
4
|
-
|
5
|
-
module Sequent
|
6
|
-
module Support
|
7
|
-
class ViewProjection
|
8
|
-
attr_reader :name, :version, :schema_definition
|
9
|
-
|
10
|
-
def initialize(options)
|
11
|
-
@name = options.fetch(:name)
|
12
|
-
@version = options.fetch(:version)
|
13
|
-
@schema_definition = options.fetch(:definition)
|
14
|
-
@replay_event_handlers = options.fetch(:event_handlers)
|
15
|
-
end
|
16
|
-
|
17
|
-
def build!
|
18
|
-
with_default_configuration do
|
19
|
-
Sequent.configuration.event_handlers = @replay_event_handlers
|
20
|
-
|
21
|
-
load schema_definition
|
22
|
-
event_store = Sequent.configuration.event_store
|
23
|
-
ordering = Events::ORDERED_BY_STREAM
|
24
|
-
event_store.replay_events_from_cursor(
|
25
|
-
block_size: 10_000,
|
26
|
-
get_events: -> { ordering[event_store] },
|
27
|
-
)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def schema_name
|
32
|
-
"#{name}_#{version}"
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def with_default_configuration
|
38
|
-
original_configuration = Sequent.configuration
|
39
|
-
Sequent::Configuration.reset
|
40
|
-
yield
|
41
|
-
Sequent::Configuration.restore(original_configuration)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
module Events
|
46
|
-
extend ActiveRecord::ConnectionAdapters::Quoting
|
47
|
-
|
48
|
-
ORDERED_BY_STREAM = ->(_event_store) do
|
49
|
-
event_records = quote_table_name(Sequent.configuration.event_record_class.table_name)
|
50
|
-
stream_records = quote_table_name(Sequent.configuration.stream_record_class.table_name)
|
51
|
-
snapshot_event_type = quote(Sequent.configuration.snapshot_event_class)
|
52
|
-
|
53
|
-
Sequent.configuration.event_record_class
|
54
|
-
.select('event_type, event_json')
|
55
|
-
.joins("INNER JOIN #{stream_records} ON #{event_records}.stream_record_id = #{stream_records}.id")
|
56
|
-
.where("event_type <> #{snapshot_event_type}")
|
57
|
-
.order!("#{stream_records}.id, #{event_records}.sequence_number")
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Sequent
|
4
|
-
module Support
|
5
|
-
class ViewSchema < ActiveRecord::Schema
|
6
|
-
def define(info, &block)
|
7
|
-
view_projection = info[:view_projection]
|
8
|
-
switch_to_schema(view_projection) if view_projection
|
9
|
-
super
|
10
|
-
ensure
|
11
|
-
switch_back_to_original_schema if view_projection
|
12
|
-
end
|
13
|
-
|
14
|
-
def switch_to_schema(view_projection)
|
15
|
-
@original_schema_search_path = connection.schema_search_path
|
16
|
-
connection.schema_search_path = view_projection.schema_name
|
17
|
-
end
|
18
|
-
|
19
|
-
def switch_back_to_original_schema
|
20
|
-
connection.schema_search_path = @original_schema_search_path
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|