sequent 5.0.0 → 6.0.1
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 +1 -1
- data/db/sequent_schema.rb +3 -3
- data/lib/sequent/configuration.rb +19 -1
- data/lib/sequent/core/aggregate_root.rb +2 -6
- data/lib/sequent/core/aggregate_roots.rb +2 -6
- data/lib/sequent/core/command.rb +8 -12
- data/lib/sequent/core/command_service.rb +13 -2
- data/lib/sequent/core/core.rb +1 -0
- data/lib/sequent/core/event.rb +2 -2
- data/lib/sequent/core/event_store.rb +15 -2
- data/lib/sequent/core/ext/ext.rb +17 -0
- data/lib/sequent/core/helpers/attribute_support.rb +1 -0
- data/lib/sequent/core/helpers/default_validators.rb +3 -0
- data/lib/sequent/core/helpers/param_support.rb +2 -0
- data/lib/sequent/core/helpers/string_to_value_parsers.rb +5 -0
- data/lib/sequent/core/helpers/time_validator.rb +23 -0
- data/lib/sequent/core/helpers/value_validators.rb +11 -0
- data/lib/sequent/core/middleware/chain.rb +37 -0
- data/lib/sequent/core/middleware/middleware.rb +3 -0
- data/lib/sequent/core/projector.rb +3 -11
- data/lib/sequent/core/workflow.rb +3 -11
- data/lib/sequent/generator/template_project/Rakefile +2 -2
- data/lib/sequent/generator/template_project/db/sequent_schema.rb +3 -3
- data/lib/sequent/generator/template_project/spec/spec_helper.rb +1 -1
- data/lib/sequent/migrations/migrations.rb +1 -0
- data/lib/sequent/migrations/projectors.rb +2 -2
- data/lib/sequent/migrations/sequent_schema.rb +40 -0
- data/lib/sequent/migrations/view_schema.rb +39 -3
- data/lib/sequent/rake/migration_tasks.rb +36 -33
- data/lib/sequent/support/database.rb +29 -13
- data/lib/sequent/test/command_handler_helpers.rb +1 -1
- data/lib/sequent/test/database_helpers.rb +20 -0
- data/lib/sequent/test/time_comparison.rb +2 -5
- data/lib/sequent/test/{event_handler_helpers.rb → workflow_helpers.rb} +24 -10
- data/lib/sequent/test.rb +2 -1
- data/lib/sequent/util/dry_run.rb +1 -1
- data/lib/version.rb +1 -1
- metadata +22 -12
- data/lib/sequent/rake/tasks.rb +0 -121
@@ -79,6 +79,29 @@ module Sequent
|
|
79
79
|
|
80
80
|
attr_reader :view_schema, :db_config, :logger
|
81
81
|
|
82
|
+
class << self
|
83
|
+
# @see #create_view_tables
|
84
|
+
# @param env [String] The environment used for connecting the database
|
85
|
+
def create_view_tables(env:)
|
86
|
+
fail ArgumentError, 'env is required' if env.blank?
|
87
|
+
|
88
|
+
db_config = Sequent::Support::Database.read_config(env)
|
89
|
+
Sequent::Support::Database.establish_connection(db_config)
|
90
|
+
new(db_config: db_config).create_view_tables
|
91
|
+
end
|
92
|
+
|
93
|
+
# @see #create_view_schema_if_not_exists
|
94
|
+
# @param env [String] The environment used for connecting the database
|
95
|
+
def create_view_schema_if_not_exists(env:)
|
96
|
+
fail ArgumentError, 'env is required' if env.blank?
|
97
|
+
|
98
|
+
db_config = Sequent::Support::Database.read_config(env)
|
99
|
+
Sequent::Support::Database.establish_connection(db_config)
|
100
|
+
|
101
|
+
new(db_config: db_config).create_view_schema_if_not_exists
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
82
105
|
def initialize(db_config:)
|
83
106
|
@db_config = db_config
|
84
107
|
@view_schema = Sequent.configuration.view_schema_name
|
@@ -98,6 +121,9 @@ module Sequent
|
|
98
121
|
# the entire view schema without replaying the events
|
99
122
|
def create_view_tables
|
100
123
|
create_view_schema_if_not_exists
|
124
|
+
return if Sequent.migration_class == Sequent::Migrations::Projectors
|
125
|
+
return if Sequent.new_version == current_version
|
126
|
+
|
101
127
|
in_view_schema do
|
102
128
|
Sequent::Core::Migratable.all.flat_map(&:managed_tables).each do |table|
|
103
129
|
sql_file = "#{Sequent.configuration.migration_sql_files_directory}/#{table.table_name}.sql"
|
@@ -112,6 +138,7 @@ module Sequent
|
|
112
138
|
statements.each(&method(:exec_sql))
|
113
139
|
end
|
114
140
|
end
|
141
|
+
Versions.create!(version: Sequent.new_version)
|
115
142
|
end
|
116
143
|
end
|
117
144
|
|
@@ -119,8 +146,12 @@ module Sequent
|
|
119
146
|
# Utility method that replays events for all managed_tables from all Sequent::Core::Projector's
|
120
147
|
#
|
121
148
|
# This method is mainly useful in test scenario's or development tasks
|
122
|
-
def replay_all!
|
123
|
-
replay!(
|
149
|
+
def replay_all!(group_exponent: 1)
|
150
|
+
replay!(
|
151
|
+
Sequent.configuration.online_replay_persistor_class.new,
|
152
|
+
projectors: Core::Migratable.projectors,
|
153
|
+
group_exponent: group_exponent,
|
154
|
+
)
|
124
155
|
end
|
125
156
|
|
126
157
|
##
|
@@ -158,6 +189,8 @@ module Sequent
|
|
158
189
|
# These tables will be called `table_name_VERSION`.
|
159
190
|
# 3. Replay all events to populate the tables
|
160
191
|
# It keeps track of all events that are already replayed.
|
192
|
+
# 4. Resets the table names of the activerecord models (projections)
|
193
|
+
# back to their original values (so without the VERSION suffix)
|
161
194
|
#
|
162
195
|
# If anything fails an exception is raised and everything is rolled back
|
163
196
|
#
|
@@ -178,6 +211,7 @@ module Sequent
|
|
178
211
|
in_view_schema do
|
179
212
|
executor.create_indexes_after_execute_online(plan)
|
180
213
|
end
|
214
|
+
executor.reset_table_names(plan)
|
181
215
|
# rubocop:disable Lint/RescueException
|
182
216
|
rescue Exception => e
|
183
217
|
# rubocop:enable Lint/RescueException
|
@@ -391,7 +425,9 @@ module Sequent
|
|
391
425
|
.where("NOT EXISTS (SELECT 1 FROM #{ReplayedIds.table_name} WHERE event_id = event_records.id)")
|
392
426
|
end
|
393
427
|
event_stream = event_stream.where('event_records.created_at > ?', 1.day.ago) if exclude_already_replayed
|
394
|
-
event_stream
|
428
|
+
event_stream
|
429
|
+
.order('aggregate_id ASC, sequence_number ASC')
|
430
|
+
.select('id, event_type, event_json, sequence_number')
|
395
431
|
end
|
396
432
|
|
397
433
|
## shortcut methods
|
@@ -6,6 +6,7 @@ require 'rake/tasklib'
|
|
6
6
|
|
7
7
|
require 'sequent/support'
|
8
8
|
require 'sequent/migrations/view_schema'
|
9
|
+
require 'sequent/migrations/sequent_schema'
|
9
10
|
|
10
11
|
module Sequent
|
11
12
|
module Rake
|
@@ -15,24 +16,35 @@ module Sequent
|
|
15
16
|
def register_tasks!
|
16
17
|
namespace :sequent do
|
17
18
|
desc <<~EOS
|
18
|
-
|
19
|
+
Set the SEQUENT_ENV to RAILS_ENV or RACK_ENV if not already set
|
19
20
|
EOS
|
20
|
-
task :
|
21
|
+
task :set_env_var do
|
22
|
+
ENV['SEQUENT_ENV'] ||= ENV['RAILS_ENV'] || ENV['RACK_ENV']
|
23
|
+
end
|
24
|
+
|
25
|
+
desc <<~EOS
|
26
|
+
Rake task that runs before all sequent rake tasks and after the environment is set.
|
27
|
+
Hook applications can use to for instance run other rake tasks:
|
28
|
+
|
29
|
+
Rake::Task['sequent:init'].enhance(['my_task'])
|
30
|
+
|
31
|
+
EOS
|
32
|
+
task init: :set_env_var
|
21
33
|
|
22
34
|
namespace :db do
|
23
35
|
desc 'Creates the database and initializes the event_store schema for the current env'
|
24
36
|
task create: ['sequent:init'] do
|
25
|
-
|
37
|
+
ensure_sequent_env_set!
|
26
38
|
|
27
39
|
db_config = Sequent::Support::Database.read_config(@env)
|
28
40
|
Sequent::Support::Database.create!(db_config)
|
29
41
|
|
30
|
-
|
42
|
+
Sequent::Migrations::SequentSchema.create_sequent_schema_if_not_exists(env: @env, fail_if_exists: true)
|
31
43
|
end
|
32
44
|
|
33
45
|
desc 'Drops the database for the current env'
|
34
46
|
task :drop, [:production] => ['sequent:init'] do |_t, args|
|
35
|
-
|
47
|
+
ensure_sequent_env_set!
|
36
48
|
|
37
49
|
if @env == 'production' && args[:production] != 'yes_drop_production'
|
38
50
|
fail <<~OES
|
@@ -46,39 +58,30 @@ module Sequent
|
|
46
58
|
|
47
59
|
desc 'Creates the view schema for the current env'
|
48
60
|
task create_view_schema: ['sequent:init'] do
|
49
|
-
|
61
|
+
ensure_sequent_env_set!
|
50
62
|
|
51
|
-
|
52
|
-
Sequent::Support::Database.establish_connection(db_config)
|
53
|
-
Sequent::Migrations::ViewSchema.new(db_config: db_config).create_view_schema_if_not_exists
|
63
|
+
Sequent::Migrations::ViewSchema.create_view_schema_if_not_exists(env: @env)
|
54
64
|
end
|
55
65
|
|
56
66
|
desc 'Creates the event_store schema for the current env'
|
57
67
|
task create_event_store: ['sequent:init'] do
|
58
|
-
|
59
|
-
|
60
|
-
create_event_store(db_config)
|
68
|
+
ensure_sequent_env_set!
|
69
|
+
Sequent::Migrations::SequentSchema.create_sequent_schema_if_not_exists(env: @env, fail_if_exists: true)
|
61
70
|
end
|
62
71
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
unless File.exist?(sequent_schema)
|
68
|
-
fail "File #{sequent_schema} does not exist. Check your Sequent configuration."
|
69
|
-
end
|
72
|
+
desc 'Utility tasks that can be used to guard against unsafe usage of rails db:migrate directly'
|
73
|
+
task :dont_use_db_migrate_directly do
|
74
|
+
fail <<~EOS unless ENV['SEQUENT_MIGRATION_SCHEMAS'].present?
|
75
|
+
Don't call rails db:migrate directly but wrap in your own task instead:
|
70
76
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
77
|
+
task :migrate_db do
|
78
|
+
ENV['SEQUENT_MIGRATION_SCHEMAS'] = 'public'
|
79
|
+
Rake::Task['db:migrate'].invoke
|
80
|
+
end
|
75
81
|
|
76
|
-
|
77
|
-
|
78
|
-
load(sequent_schema)
|
79
|
-
end
|
82
|
+
You can choose whatever name for migrate_db you like.
|
83
|
+
EOS
|
80
84
|
end
|
81
|
-
# rubocop:enable Lint/NestedMethodDefinition
|
82
85
|
end
|
83
86
|
|
84
87
|
namespace :migrate do
|
@@ -89,7 +92,7 @@ module Sequent
|
|
89
92
|
|
90
93
|
desc 'Prints the current version in the database'
|
91
94
|
task current_version: ['sequent:init', :init] do
|
92
|
-
|
95
|
+
ensure_sequent_env_set!
|
93
96
|
|
94
97
|
Sequent::Support::Database.connect!(@env)
|
95
98
|
|
@@ -100,7 +103,7 @@ module Sequent
|
|
100
103
|
Migrates the Projectors while the app is running. Call +sequent:migrate:offline+ after this successfully completed.
|
101
104
|
EOS
|
102
105
|
task online: ['sequent:init', :init] do
|
103
|
-
|
106
|
+
ensure_sequent_env_set!
|
104
107
|
|
105
108
|
db_config = Sequent::Support::Database.read_config(@env)
|
106
109
|
view_schema = Sequent::Migrations::ViewSchema.new(db_config: db_config)
|
@@ -112,7 +115,7 @@ module Sequent
|
|
112
115
|
Migrates the events inserted while +online+ was running. It is expected +sequent:migrate:online+ ran first.
|
113
116
|
EOS
|
114
117
|
task offline: ['sequent:init', :init] do
|
115
|
-
|
118
|
+
ensure_sequent_env_set!
|
116
119
|
|
117
120
|
db_config = Sequent::Support::Database.read_config(@env)
|
118
121
|
view_schema = Sequent::Migrations::ViewSchema.new(db_config: db_config)
|
@@ -160,8 +163,8 @@ module Sequent
|
|
160
163
|
private
|
161
164
|
|
162
165
|
# rubocop:disable Naming/MemoizedInstanceVariableName
|
163
|
-
def
|
164
|
-
@env ||= ENV['
|
166
|
+
def ensure_sequent_env_set!
|
167
|
+
@env ||= ENV['SEQUENT_ENV'] || fail('SEQUENT_ENV not set')
|
165
168
|
end
|
166
169
|
# rubocop:enable Naming/MemoizedInstanceVariableName
|
167
170
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'erb'
|
3
4
|
require 'active_support/hash_with_indifferent_access'
|
4
5
|
|
5
6
|
module Sequent
|
@@ -30,17 +31,37 @@ module Sequent
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def self.create!(db_config)
|
33
|
-
|
34
|
-
ActiveRecord::Base.connection.create_database(db_config
|
34
|
+
establish_connection(db_config, {database: 'postgres'})
|
35
|
+
ActiveRecord::Base.connection.create_database(get_db_config_attribute(db_config, :database))
|
35
36
|
end
|
36
37
|
|
37
38
|
def self.drop!(db_config)
|
38
|
-
|
39
|
-
ActiveRecord::Base.connection.drop_database(db_config
|
39
|
+
establish_connection(db_config, {database: 'postgres'})
|
40
|
+
ActiveRecord::Base.connection.drop_database(get_db_config_attribute(db_config, :database))
|
40
41
|
end
|
41
42
|
|
42
|
-
def self.
|
43
|
-
|
43
|
+
def self.get_db_config_attribute(db_config, attribute)
|
44
|
+
if Sequent.configuration.can_use_multiple_databases?
|
45
|
+
db_config[Sequent.configuration.primary_database_key][attribute]
|
46
|
+
else
|
47
|
+
db_config[attribute]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.establish_connection(db_config, db_config_overrides = {})
|
52
|
+
if Sequent.configuration.can_use_multiple_databases?
|
53
|
+
db_config = db_config.deep_merge(
|
54
|
+
Sequent.configuration.primary_database_key => db_config_overrides,
|
55
|
+
).stringify_keys
|
56
|
+
ActiveRecord.legacy_connection_handling = false
|
57
|
+
ActiveRecord::Base.configurations = db_config.stringify_keys
|
58
|
+
ActiveRecord::Base.connects_to database: {
|
59
|
+
Sequent.configuration.primary_database_role => Sequent.configuration.primary_database_key,
|
60
|
+
}
|
61
|
+
else
|
62
|
+
db_config = db_config.merge(db_config_overrides)
|
63
|
+
ActiveRecord::Base.establish_connection(db_config)
|
64
|
+
end
|
44
65
|
end
|
45
66
|
|
46
67
|
def self.disconnect!
|
@@ -62,25 +83,20 @@ module Sequent
|
|
62
83
|
execute_sql "DROP SCHEMA if exists #{schema_name} cascade"
|
63
84
|
end
|
64
85
|
|
65
|
-
def self.with_schema_search_path(search_path, db_config, env = ENV['
|
86
|
+
def self.with_schema_search_path(search_path, db_config, env = ENV['SEQUENT_ENV'])
|
66
87
|
fail ArgumentError, 'env is required' unless env
|
67
88
|
|
68
89
|
disconnect!
|
69
|
-
original_search_paths = db_config[:schema_search_path].dup
|
70
90
|
|
71
91
|
if ActiveRecord::VERSION::MAJOR < 6
|
72
92
|
ActiveRecord::Base.configurations[env.to_s] =
|
73
93
|
ActiveSupport::HashWithIndifferentAccess.new(db_config).stringify_keys
|
74
94
|
end
|
75
95
|
|
76
|
-
db_config
|
77
|
-
|
78
|
-
ActiveRecord::Base.establish_connection db_config
|
79
|
-
|
96
|
+
establish_connection(db_config, {schema_search_path: search_path})
|
80
97
|
yield
|
81
98
|
ensure
|
82
99
|
disconnect!
|
83
|
-
db_config[:schema_search_path] = original_search_paths
|
84
100
|
establish_connection(db_config)
|
85
101
|
end
|
86
102
|
|
@@ -125,7 +125,7 @@ module Sequent
|
|
125
125
|
def aggregate_type_for_event(event)
|
126
126
|
@event_to_aggregate_type ||= ThreadSafe::Cache.new
|
127
127
|
@event_to_aggregate_type.fetch_or_store(event.class) do |klass|
|
128
|
-
Sequent::Core::
|
128
|
+
Sequent::Core::AggregateRoot.descendants.find { |x| x.message_mapping.key?(klass) }
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sequent
|
4
|
+
module Test
|
5
|
+
module DatabaseHelpers
|
6
|
+
ALLOWED_ENVS = %w[development test spec].freeze
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# Utility method to let Sequent handle creation of sequent_schema and view_schema
|
10
|
+
# rather than using the available rake tasks.
|
11
|
+
def maintain_test_database_schema(env: 'test')
|
12
|
+
fail ArgumentError, "env must one of [#{ALLOWED_ENVS.join(',')}] '#{env}'" unless ALLOWED_ENVS.include?(env)
|
13
|
+
|
14
|
+
Migrations::SequentSchema.create_sequent_schema_if_not_exists(env: env, fail_if_exists: false)
|
15
|
+
Migrations::ViewSchema.create_view_tables(env: env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -17,11 +17,8 @@ module Sequent
|
|
17
17
|
# omit nsec in datetime comparisons
|
18
18
|
def <=>(other)
|
19
19
|
if other&.is_a?(DateTimePatches::Normalize)
|
20
|
-
|
21
|
-
return
|
22
|
-
|
23
|
-
# use usec here, which *truncates* the nsec (ie. like Postgres)
|
24
|
-
return normalize.usec <=> other.normalize.usec
|
20
|
+
precision = Sequent.configuration.time_precision
|
21
|
+
return normalize.iso8601(precision) <=> other.normalize.iso8601(precision)
|
25
22
|
end
|
26
23
|
public_send(:'___<=>', other)
|
27
24
|
end
|
@@ -5,7 +5,7 @@ module Sequent
|
|
5
5
|
##
|
6
6
|
# Use in tests
|
7
7
|
#
|
8
|
-
# This provides a nice DSL for testing your
|
8
|
+
# This provides a nice DSL for testing your Workflows.
|
9
9
|
# E.g.
|
10
10
|
#
|
11
11
|
# when_event UserWasRegistered.new(args)
|
@@ -14,12 +14,15 @@ module Sequent
|
|
14
14
|
# Example for Rspec config
|
15
15
|
#
|
16
16
|
# RSpec.configure do |config|
|
17
|
-
# config.include Sequent::Test::WorkflowHelpers
|
17
|
+
# config.include Sequent::Test::WorkflowHelpers, workflows: true
|
18
18
|
# end
|
19
19
|
#
|
20
|
-
#
|
20
|
+
# Please note that you **must** add the metadata tag `workflows` since
|
21
|
+
# the WorkflowHelpers will use a `FakeCommandService` to track
|
22
|
+
# the commands enqueued for execution. You can set the metadata
|
23
|
+
# on group level or on an individual spec.
|
21
24
|
#
|
22
|
-
# describe SendWelcomeMailWorkflow do
|
25
|
+
# describe SendWelcomeMailWorkflow, workflows: true do
|
23
26
|
# let(:workflow) { SendWelcomeMailWorkflow.new }
|
24
27
|
#
|
25
28
|
# it "sends a welcome mail" do
|
@@ -75,7 +78,9 @@ module Sequent
|
|
75
78
|
end
|
76
79
|
|
77
80
|
def when_event(event)
|
78
|
-
|
81
|
+
fake_transaction_provider.transactional do
|
82
|
+
workflow.handle_message event
|
83
|
+
end
|
79
84
|
end
|
80
85
|
|
81
86
|
def then_commands(*commands)
|
@@ -86,13 +91,22 @@ module Sequent
|
|
86
91
|
end
|
87
92
|
|
88
93
|
def self.included(spec)
|
94
|
+
fail "Missing metadata argument `workflows: true` when including #{name}" unless spec.metadata[:workflows]
|
95
|
+
|
89
96
|
spec.let(:fake_command_service) { FakeCommandService.new }
|
90
97
|
spec.let(:fake_transaction_provider) { FakeTransactionProvider.new }
|
91
|
-
spec.
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
98
|
+
spec.let(:old_config) { Sequent.configuration }
|
99
|
+
spec.before :each, :workflows do
|
100
|
+
new_config = old_config.dup
|
101
|
+
|
102
|
+
new_config.command_service = fake_command_service
|
103
|
+
new_config.transaction_provider = fake_transaction_provider
|
104
|
+
|
105
|
+
Sequent::Configuration.restore(new_config)
|
106
|
+
end
|
107
|
+
|
108
|
+
spec.after :each, :workflows do
|
109
|
+
Sequent::Configuration.restore(old_config)
|
96
110
|
end
|
97
111
|
end
|
98
112
|
end
|
data/lib/sequent/test.rb
CHANGED
data/lib/sequent/util/dry_run.rb
CHANGED
@@ -66,7 +66,7 @@ module Sequent
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def process_event(event)
|
69
|
-
[*Sequent::Core::
|
69
|
+
[*Sequent::Core::Workflow.descendants, *Sequent::Core::Projector.descendants].each do |handler_class|
|
70
70
|
next unless handler_class.handles_message?(event)
|
71
71
|
|
72
72
|
if handler_class < Sequent::Workflow
|
data/lib/version.rb
CHANGED
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: 6.0.1
|
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: 2023-09-28 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: activemodel
|
@@ -119,7 +119,7 @@ dependencies:
|
|
119
119
|
version: 2.6.5
|
120
120
|
- - "<"
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: '3.
|
122
|
+
version: '3.3'
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -129,7 +129,7 @@ dependencies:
|
|
129
129
|
version: 2.6.5
|
130
130
|
- - "<"
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: '3.
|
132
|
+
version: '3.3'
|
133
133
|
- !ruby/object:Gem::Dependency
|
134
134
|
name: pg
|
135
135
|
requirement: !ruby/object:Gem::Requirement
|
@@ -260,16 +260,22 @@ dependencies:
|
|
260
260
|
name: rubocop
|
261
261
|
requirement: !ruby/object:Gem::Requirement
|
262
262
|
requirements:
|
263
|
-
- - "
|
263
|
+
- - "~>"
|
264
|
+
- !ruby/object:Gem::Version
|
265
|
+
version: '1.56'
|
266
|
+
- - ">="
|
264
267
|
- !ruby/object:Gem::Version
|
265
|
-
version:
|
268
|
+
version: 1.56.3
|
266
269
|
type: :development
|
267
270
|
prerelease: false
|
268
271
|
version_requirements: !ruby/object:Gem::Requirement
|
269
272
|
requirements:
|
270
|
-
- - "
|
273
|
+
- - "~>"
|
274
|
+
- !ruby/object:Gem::Version
|
275
|
+
version: '1.56'
|
276
|
+
- - ">="
|
271
277
|
- !ruby/object:Gem::Version
|
272
|
-
version:
|
278
|
+
version: 1.56.3
|
273
279
|
- !ruby/object:Gem::Dependency
|
274
280
|
name: simplecov
|
275
281
|
requirement: !ruby/object:Gem::Requirement
|
@@ -304,7 +310,7 @@ email:
|
|
304
310
|
- bforma@zilverline.com
|
305
311
|
- erozendaal@zilverline.com
|
306
312
|
- mvdiepen@zilverline.com
|
307
|
-
-
|
313
|
+
- stephan@vandiepen.info
|
308
314
|
executables:
|
309
315
|
- sequent
|
310
316
|
extensions: []
|
@@ -370,9 +376,12 @@ files:
|
|
370
376
|
- lib/sequent/core/helpers/string_support.rb
|
371
377
|
- lib/sequent/core/helpers/string_to_value_parsers.rb
|
372
378
|
- lib/sequent/core/helpers/string_validator.rb
|
379
|
+
- lib/sequent/core/helpers/time_validator.rb
|
373
380
|
- lib/sequent/core/helpers/type_conversion_support.rb
|
374
381
|
- lib/sequent/core/helpers/uuid_helper.rb
|
375
382
|
- lib/sequent/core/helpers/value_validators.rb
|
383
|
+
- lib/sequent/core/middleware/chain.rb
|
384
|
+
- lib/sequent/core/middleware/middleware.rb
|
376
385
|
- lib/sequent/core/persistors/active_record_persistor.rb
|
377
386
|
- lib/sequent/core/persistors/persistor.rb
|
378
387
|
- lib/sequent/core/persistors/persistors.rb
|
@@ -425,10 +434,10 @@ files:
|
|
425
434
|
- lib/sequent/migrations/migrations.rb
|
426
435
|
- lib/sequent/migrations/planner.rb
|
427
436
|
- lib/sequent/migrations/projectors.rb
|
437
|
+
- lib/sequent/migrations/sequent_schema.rb
|
428
438
|
- lib/sequent/migrations/sql.rb
|
429
439
|
- lib/sequent/migrations/view_schema.rb
|
430
440
|
- lib/sequent/rake/migration_tasks.rb
|
431
|
-
- lib/sequent/rake/tasks.rb
|
432
441
|
- lib/sequent/sequent.rb
|
433
442
|
- lib/sequent/support.rb
|
434
443
|
- lib/sequent/support/database.rb
|
@@ -436,9 +445,10 @@ files:
|
|
436
445
|
- lib/sequent/support/view_schema.rb
|
437
446
|
- lib/sequent/test.rb
|
438
447
|
- lib/sequent/test/command_handler_helpers.rb
|
439
|
-
- lib/sequent/test/
|
448
|
+
- lib/sequent/test/database_helpers.rb
|
440
449
|
- lib/sequent/test/event_stream_helpers.rb
|
441
450
|
- lib/sequent/test/time_comparison.rb
|
451
|
+
- lib/sequent/test/workflow_helpers.rb
|
442
452
|
- lib/sequent/util/dry_run.rb
|
443
453
|
- lib/sequent/util/printer.rb
|
444
454
|
- lib/sequent/util/skip_if_already_processing.rb
|
@@ -464,7 +474,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
464
474
|
- !ruby/object:Gem::Version
|
465
475
|
version: '0'
|
466
476
|
requirements: []
|
467
|
-
rubygems_version: 3.
|
477
|
+
rubygems_version: 3.4.10
|
468
478
|
signing_key:
|
469
479
|
specification_version: 4
|
470
480
|
summary: Event sourcing framework for Ruby
|