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
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
require 'sequent/support'
|
6
|
+
require 'sequent/migrations/view_schema'
|
7
|
+
|
8
|
+
module Sequent
|
9
|
+
module Rake
|
10
|
+
class MigrationTasks < ::Rake::TaskLib
|
11
|
+
include ::Rake::DSL
|
12
|
+
|
13
|
+
def register_tasks!
|
14
|
+
namespace :sequent do
|
15
|
+
desc 'Rake task that runs before all sequent rake tasks. Hook applications can use to for instance run other rake tasks.'
|
16
|
+
task :init
|
17
|
+
|
18
|
+
namespace :db do
|
19
|
+
|
20
|
+
desc 'Create the database for the current env'
|
21
|
+
task :create => ['sequent:init'] do
|
22
|
+
ensure_rack_env_set!
|
23
|
+
sequent_schema = File.join(Sequent.configuration.database_config_directory, "#{Sequent.configuration.event_store_schema_name}.rb")
|
24
|
+
|
25
|
+
fail "File #{sequent_schema} does not exist. Check your Sequent configuration." unless File.exists?(sequent_schema)
|
26
|
+
|
27
|
+
db_config = Sequent::Support::Database.read_config(@env)
|
28
|
+
Sequent::Support::Database.create!(db_config)
|
29
|
+
|
30
|
+
Sequent::Support::Database.establish_connection(db_config)
|
31
|
+
Sequent::Support::Database.create_schema(Sequent.configuration.event_store_schema_name)
|
32
|
+
load(sequent_schema)
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'Drops the database for the current env'
|
36
|
+
task :drop, [:production] => ['sequent:init'] do |_t, args|
|
37
|
+
ensure_rack_env_set!
|
38
|
+
|
39
|
+
fail "Wont drop db in production unless you whitelist the environment as follows: rake sequent:db:drop[production]" if @env == 'production' && args[:production] != 'production'
|
40
|
+
|
41
|
+
db_config = Sequent::Support::Database.read_config(@env)
|
42
|
+
Sequent::Support::Database.drop!(db_config)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
namespace :migrate do
|
48
|
+
desc 'Rake task that runs before all migrate rake tasks. Hook applications can use to for instance run other rake tasks.'
|
49
|
+
task :init
|
50
|
+
|
51
|
+
desc 'Prints the current version in the database'
|
52
|
+
task :current_version => ['sequent:init', :init] do
|
53
|
+
ensure_rack_env_set!
|
54
|
+
|
55
|
+
Sequent::Support::Database.connect!(@env)
|
56
|
+
|
57
|
+
puts "Current version in the database is: #{Sequent::Migrations::ViewSchema::Versions.maximum(:version)}"
|
58
|
+
end
|
59
|
+
|
60
|
+
desc 'Migrates the Projectors while the app is running. Call +sequent:migrate:offline+ after this successfully completed.'
|
61
|
+
task :online => ['sequent:init', :init] do
|
62
|
+
ensure_rack_env_set!
|
63
|
+
|
64
|
+
db_config = Sequent::Support::Database.read_config(@env)
|
65
|
+
view_schema = Sequent::Migrations::ViewSchema.new(db_config: db_config)
|
66
|
+
|
67
|
+
view_schema.migrate_online
|
68
|
+
end
|
69
|
+
|
70
|
+
desc 'Migrates the events inserted while +online+ was running. It is expected +sequent:migrate:online+ ran first.'
|
71
|
+
task :offline => ['sequent:init', :init] do
|
72
|
+
ensure_rack_env_set!
|
73
|
+
|
74
|
+
db_config = Sequent::Support::Database.read_config(@env)
|
75
|
+
view_schema = Sequent::Migrations::ViewSchema.new(db_config: db_config)
|
76
|
+
|
77
|
+
view_schema.migrate_offline
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
namespace :snapshots do
|
82
|
+
desc 'Rake task that runs before all snapshots rake tasks. Hook applications can use to for instance run other rake tasks.'
|
83
|
+
task :init
|
84
|
+
|
85
|
+
task :set_snapshot_threshold, [:aggregate_type,:threshold] => ['sequent:init', :init] do
|
86
|
+
aggregate_type = args['aggregate_type']
|
87
|
+
threshold = args['threshold']
|
88
|
+
|
89
|
+
fail ArgumentError.new('usage rake sequent:snapshots:set_snapshot_threshold[AggregegateType,threshold]') unless aggregate_type
|
90
|
+
fail ArgumentError.new('usage rake sequent:snapshots:set_snapshot_threshold[AggregegateType,threshold]') unless threshold
|
91
|
+
|
92
|
+
execute "UPDATE #{Sequent.configuration.stream_record_class} SET snapshot_threshold = #{threshold.to_i} WHERE aggregate_type = '#{aggregate_type}'"
|
93
|
+
end
|
94
|
+
|
95
|
+
task :delete_all => ['sequent:init', :init] do
|
96
|
+
result = ActiveRecord::Base.connection.execute("DELETE FROM #{Sequent.configuration.event_record_class.table_name} WHERE event_type = 'Sequent::Core::SnapshotEvent'")
|
97
|
+
Sequent.logger.info "Deleted #{result.cmd_tuples} aggregate snapshots from the event store"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
def ensure_rack_env_set!
|
105
|
+
@env ||= ENV['RACK_ENV'] || fail("RACK_ENV not set")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/lib/sequent/rake/tasks.rb
CHANGED
@@ -20,7 +20,13 @@ module Sequent
|
|
20
20
|
@options = DEFAULT_OPTIONS.merge(options)
|
21
21
|
end
|
22
22
|
|
23
|
+
def display_deprecation_warning
|
24
|
+
warn '[DEPRECATED] Sequent::Rake::Tasks is deprecated. Please use Sequent::Rake::MigrationTasks tasks instead.'
|
25
|
+
end
|
26
|
+
|
23
27
|
def register!
|
28
|
+
display_deprecation_warning
|
29
|
+
|
24
30
|
register_db_tasks!
|
25
31
|
register_view_schema_tasks!
|
26
32
|
end
|
@@ -29,6 +35,8 @@ module Sequent
|
|
29
35
|
namespace :db do
|
30
36
|
desc 'Create the database'
|
31
37
|
task :create do
|
38
|
+
display_deprecation_warning
|
39
|
+
|
32
40
|
current_environments.each do |env|
|
33
41
|
env_db = db_config(env)
|
34
42
|
puts "Create database #{env_db['database']}"
|
@@ -38,6 +46,8 @@ module Sequent
|
|
38
46
|
|
39
47
|
desc 'Drop the database'
|
40
48
|
task :drop do
|
49
|
+
display_deprecation_warning
|
50
|
+
|
41
51
|
current_environments.each do |env|
|
42
52
|
env_db = db_config(env)
|
43
53
|
puts "Drop database #{env_db['database']}"
|
@@ -52,6 +62,8 @@ module Sequent
|
|
52
62
|
|
53
63
|
desc 'Migrate the database'
|
54
64
|
task migrate: :establish_connection do
|
65
|
+
display_deprecation_warning
|
66
|
+
|
55
67
|
database.create_schema!(options.fetch(:event_store_schema))
|
56
68
|
database.migrate(options.fetch(:migrations_path))
|
57
69
|
end
|
@@ -62,6 +74,8 @@ module Sequent
|
|
62
74
|
namespace :view_schema do
|
63
75
|
desc 'Build the view schema'
|
64
76
|
task build: :'db:establish_connection' do
|
77
|
+
display_deprecation_warning
|
78
|
+
|
65
79
|
if database.schema_exists?(view_projection.schema_name)
|
66
80
|
puts "View version #{view_projection.version} already exists; no need to build it"
|
67
81
|
else
|
@@ -72,6 +86,8 @@ module Sequent
|
|
72
86
|
|
73
87
|
desc 'Drop the view schema'
|
74
88
|
task drop: :'db:establish_connection' do
|
89
|
+
display_deprecation_warning
|
90
|
+
|
75
91
|
database.drop_schema!(view_projection.schema_name)
|
76
92
|
end
|
77
93
|
end
|
data/lib/sequent/sequent.rb
CHANGED
@@ -1,23 +1,37 @@
|
|
1
|
-
require_relative 'core/core'
|
2
|
-
require_relative 'util/util'
|
3
|
-
require_relative 'migrations/migrations'
|
4
1
|
require_relative 'configuration'
|
5
|
-
|
6
|
-
|
2
|
+
require_relative 'core/event'
|
3
|
+
require_relative 'core/command'
|
4
|
+
require_relative 'core/base_command_handler'
|
5
|
+
require_relative 'core/aggregate_root'
|
6
|
+
require_relative 'core/projector'
|
7
|
+
require_relative 'core/workflow'
|
8
|
+
require_relative 'generator'
|
7
9
|
|
8
10
|
module Sequent
|
9
11
|
def self.new_uuid
|
10
12
|
Sequent.configuration.uuid_generator.uuid
|
11
13
|
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
#
|
16
|
+
# Setup Sequent.
|
17
|
+
#
|
18
|
+
# Setup is typically called in an +initializer+ or setup phase of your application.
|
19
|
+
# A minimal setup could look like this:
|
20
|
+
#
|
21
|
+
# Sequent.configure do |config|
|
22
|
+
# config.event_handlers = [
|
23
|
+
# MyProjector.new,
|
24
|
+
# AnotherProjector.new,
|
25
|
+
# MyWorkflow.new,
|
26
|
+
# ]
|
27
|
+
#
|
28
|
+
# config.command_handlers = [
|
29
|
+
# MyCommandHandler.new,
|
30
|
+
# ]
|
31
|
+
#
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
#
|
21
35
|
def self.configure
|
22
36
|
yield Configuration.instance
|
23
37
|
end
|
@@ -30,4 +44,30 @@ module Sequent
|
|
30
44
|
def self.command_service
|
31
45
|
configuration.command_service
|
32
46
|
end
|
47
|
+
|
48
|
+
def self.new_version
|
49
|
+
migration_class.version
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.migration_class
|
53
|
+
Class.const_get(configuration.migrations_class_name)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Short hand for Sequent.configuration.logger
|
57
|
+
def self.logger
|
58
|
+
configuration.logger
|
59
|
+
end
|
60
|
+
|
61
|
+
# Short hand for Sequent.configuration.aggregate_repository
|
62
|
+
def self.aggregate_repository
|
63
|
+
configuration.aggregate_repository
|
64
|
+
end
|
65
|
+
|
66
|
+
# Shortcut classes for easy usage
|
67
|
+
Event = Sequent::Core::Event
|
68
|
+
Command = Sequent::Core::Command
|
69
|
+
CommandHandler = Sequent::Core::BaseCommandHandler
|
70
|
+
AggregateRoot = Sequent::Core::AggregateRoot
|
71
|
+
Projector = Sequent::Core::Projector
|
72
|
+
Workflow = Sequent::Core::Workflow
|
33
73
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/hash_with_indifferent_access'
|
2
|
+
|
1
3
|
module Sequent
|
2
4
|
module Support
|
3
5
|
# Offers support operations for a postgres database.
|
@@ -8,6 +10,18 @@ module Sequent
|
|
8
10
|
class Database
|
9
11
|
attr_reader :db_config
|
10
12
|
|
13
|
+
def self.connect!(env)
|
14
|
+
db_config = read_config(env)
|
15
|
+
establish_connection(db_config)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.read_config(env)
|
19
|
+
fail ArgumentError.new("env is mandatory") unless env
|
20
|
+
|
21
|
+
database_yml = File.join(Sequent.configuration.database_config_directory, 'database.yml')
|
22
|
+
YAML.load(ERB.new(File.read(database_yml)).result)[env]
|
23
|
+
end
|
24
|
+
|
11
25
|
def self.create!(db_config)
|
12
26
|
ActiveRecord::Base.establish_connection(db_config.merge('database' => 'postgres'))
|
13
27
|
ActiveRecord::Base.connection.create_database(db_config['database'])
|
@@ -26,6 +40,39 @@ module Sequent
|
|
26
40
|
ActiveRecord::Base.connection_pool.disconnect!
|
27
41
|
end
|
28
42
|
|
43
|
+
def self.execute_sql(sql)
|
44
|
+
ActiveRecord::Base.connection.execute(sql)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.create_schema(schema)
|
48
|
+
sql = "CREATE SCHEMA IF NOT EXISTS #{schema}"
|
49
|
+
if user = ActiveRecord::Base.connection_config[:username]
|
50
|
+
sql += " AUTHORIZATION #{user}"
|
51
|
+
end
|
52
|
+
execute_sql(sql)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.drop_schema!(schema_name)
|
56
|
+
execute_sql "DROP SCHEMA if exists #{schema_name} cascade"
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.with_schema_search_path(search_path, db_config, env = ENV['RACK_ENV'])
|
60
|
+
fail ArgumentError.new("env is required") unless env
|
61
|
+
|
62
|
+
disconnect!
|
63
|
+
original_search_paths = db_config['schema_search_path'].dup
|
64
|
+
ActiveRecord::Base.configurations[env.to_s] = ActiveSupport::HashWithIndifferentAccess.new(db_config).stringify_keys
|
65
|
+
db_config['schema_search_path'] = search_path
|
66
|
+
ActiveRecord::Base.establish_connection db_config
|
67
|
+
|
68
|
+
yield
|
69
|
+
|
70
|
+
ensure
|
71
|
+
disconnect!
|
72
|
+
db_config['schema_search_path'] = original_search_paths
|
73
|
+
establish_connection(db_config)
|
74
|
+
end
|
75
|
+
|
29
76
|
def schema_exists?(schema)
|
30
77
|
ActiveRecord::Base.connection.execute(
|
31
78
|
"SELECT schema_name FROM information_schema.schemata WHERE schema_name like '#{schema}'"
|
@@ -33,17 +80,15 @@ module Sequent
|
|
33
80
|
end
|
34
81
|
|
35
82
|
def create_schema!(schema)
|
36
|
-
|
37
|
-
if user = ActiveRecord::Base.connection_config[:username]
|
38
|
-
sql += " AUTHORIZATION #{user}"
|
39
|
-
end
|
40
|
-
ActiveRecord::Base.connection.execute(sql)
|
83
|
+
self.class.create_schema(schema)
|
41
84
|
end
|
42
85
|
|
43
86
|
def drop_schema!(schema)
|
44
|
-
|
45
|
-
|
46
|
-
|
87
|
+
self.class.drop_schema!(schema)
|
88
|
+
end
|
89
|
+
|
90
|
+
def execute_sql(sql)
|
91
|
+
self.class.execute_sql(sql)
|
47
92
|
end
|
48
93
|
|
49
94
|
def migrate(migrations_path, verbose: true)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Sequent
|
2
|
+
module Util
|
3
|
+
module Printer
|
4
|
+
def recursively_print(e)
|
5
|
+
logger.error "#{e.to_s}\n\n#{e.backtrace.join("\n")}"
|
6
|
+
|
7
|
+
while e.cause do
|
8
|
+
logger.error "+++++++++++++++ CAUSE +++++++++++++++"
|
9
|
+
logger.error "#{e.cause.to_s}\n\n#{e.cause.backtrace.join("\n")}"
|
10
|
+
e = e.cause
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
data/lib/sequent/util/util.rb
CHANGED
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Vonk
|
8
8
|
- Bob Forma
|
9
9
|
- Erik Rozendaal
|
10
|
+
- Mike van Diepen
|
11
|
+
- Stephan van Diepen
|
10
12
|
autorequire:
|
11
13
|
bindir: bin
|
12
14
|
cert_chain: []
|
13
|
-
date: 2018-
|
15
|
+
date: 2018-06-08 00:00:00.000000000 Z
|
14
16
|
dependencies:
|
15
17
|
- !ruby/object:Gem::Dependency
|
16
18
|
name: activerecord
|
@@ -18,7 +20,7 @@ dependencies:
|
|
18
20
|
requirements:
|
19
21
|
- - ">="
|
20
22
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
23
|
+
version: '5.0'
|
22
24
|
- - "<"
|
23
25
|
- !ruby/object:Gem::Version
|
24
26
|
version: '5.2'
|
@@ -28,7 +30,7 @@ dependencies:
|
|
28
30
|
requirements:
|
29
31
|
- - ">="
|
30
32
|
- !ruby/object:Gem::Version
|
31
|
-
version: '
|
33
|
+
version: '5.0'
|
32
34
|
- - "<"
|
33
35
|
- !ruby/object:Gem::Version
|
34
36
|
version: '5.2'
|
@@ -38,7 +40,7 @@ dependencies:
|
|
38
40
|
requirements:
|
39
41
|
- - ">="
|
40
42
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
43
|
+
version: '5.0'
|
42
44
|
- - "<"
|
43
45
|
- !ruby/object:Gem::Version
|
44
46
|
version: '5.2'
|
@@ -48,7 +50,7 @@ dependencies:
|
|
48
50
|
requirements:
|
49
51
|
- - ">="
|
50
52
|
- !ruby/object:Gem::Version
|
51
|
-
version: '
|
53
|
+
version: '5.0'
|
52
54
|
- - "<"
|
53
55
|
- !ruby/object:Gem::Version
|
54
56
|
version: '5.2'
|
@@ -58,14 +60,14 @@ dependencies:
|
|
58
60
|
requirements:
|
59
61
|
- - "~>"
|
60
62
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0
|
63
|
+
version: '1.0'
|
62
64
|
type: :runtime
|
63
65
|
prerelease: false
|
64
66
|
version_requirements: !ruby/object:Gem::Requirement
|
65
67
|
requirements:
|
66
68
|
- - "~>"
|
67
69
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0
|
70
|
+
version: '1.0'
|
69
71
|
- !ruby/object:Gem::Dependency
|
70
72
|
name: postgresql_cursor
|
71
73
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +110,20 @@ dependencies:
|
|
108
110
|
- - "~>"
|
109
111
|
- !ruby/object:Gem::Version
|
110
112
|
version: 0.3.5
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: parallel
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 1.12.1
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 1.12.1
|
111
127
|
- !ruby/object:Gem::Dependency
|
112
128
|
name: rspec
|
113
129
|
requirement: !ruby/object:Gem::Requirement
|
@@ -197,10 +213,14 @@ email:
|
|
197
213
|
- lars.vonk@gmail.com
|
198
214
|
- bforma@zilverline.com
|
199
215
|
- erozendaal@zilverline.com
|
200
|
-
|
216
|
+
- mvdiepen@zilverline.com
|
217
|
+
- svdiepen@zilverline.com
|
218
|
+
executables:
|
219
|
+
- sequent
|
201
220
|
extensions: []
|
202
221
|
extra_rdoc_files: []
|
203
222
|
files:
|
223
|
+
- bin/sequent
|
204
224
|
- db/sequent_schema.rb
|
205
225
|
- lib/sequent.rb
|
206
226
|
- lib/sequent/configuration.rb
|
@@ -208,7 +228,6 @@ files:
|
|
208
228
|
- lib/sequent/core/aggregate_root.rb
|
209
229
|
- lib/sequent/core/aggregate_snapshotter.rb
|
210
230
|
- lib/sequent/core/base_command_handler.rb
|
211
|
-
- lib/sequent/core/base_event_handler.rb
|
212
231
|
- lib/sequent/core/command.rb
|
213
232
|
- lib/sequent/core/command_record.rb
|
214
233
|
- lib/sequent/core/command_service.rb
|
@@ -235,10 +254,12 @@ files:
|
|
235
254
|
- lib/sequent/core/helpers/type_conversion_support.rb
|
236
255
|
- lib/sequent/core/helpers/uuid_helper.rb
|
237
256
|
- lib/sequent/core/helpers/value_validators.rb
|
257
|
+
- lib/sequent/core/persistors/active_record_persistor.rb
|
258
|
+
- lib/sequent/core/persistors/persistor.rb
|
259
|
+
- lib/sequent/core/persistors/persistors.rb
|
260
|
+
- lib/sequent/core/persistors/replay_optimized_postgres_persistor.rb
|
261
|
+
- lib/sequent/core/projector.rb
|
238
262
|
- lib/sequent/core/random_uuid_generator.rb
|
239
|
-
- lib/sequent/core/record_sessions/active_record_session.rb
|
240
|
-
- lib/sequent/core/record_sessions/record_sessions.rb
|
241
|
-
- lib/sequent/core/record_sessions/replay_events_session.rb
|
242
263
|
- lib/sequent/core/sequent_oj.rb
|
243
264
|
- lib/sequent/core/stream_record.rb
|
244
265
|
- lib/sequent/core/transactions/active_record_transaction_provider.rb
|
@@ -246,8 +267,38 @@ files:
|
|
246
267
|
- lib/sequent/core/transactions/transactions.rb
|
247
268
|
- lib/sequent/core/value_object.rb
|
248
269
|
- lib/sequent/core/workflow.rb
|
270
|
+
- lib/sequent/generator.rb
|
271
|
+
- lib/sequent/generator/aggregate.rb
|
272
|
+
- lib/sequent/generator/project.rb
|
273
|
+
- lib/sequent/generator/template_aggregate/template_aggregate.rb
|
274
|
+
- lib/sequent/generator/template_aggregate/template_aggregate/commands.rb
|
275
|
+
- lib/sequent/generator/template_aggregate/template_aggregate/events.rb
|
276
|
+
- lib/sequent/generator/template_aggregate/template_aggregate/template_aggregate.rb
|
277
|
+
- lib/sequent/generator/template_aggregate/template_aggregate/template_aggregate_command_handler.rb
|
278
|
+
- lib/sequent/generator/template_project/Gemfile
|
279
|
+
- lib/sequent/generator/template_project/Gemfile.lock
|
280
|
+
- lib/sequent/generator/template_project/Rakefile
|
281
|
+
- lib/sequent/generator/template_project/app/projectors/post_projector.rb
|
282
|
+
- lib/sequent/generator/template_project/app/records/post_record.rb
|
283
|
+
- lib/sequent/generator/template_project/config/initializers/sequent.rb
|
284
|
+
- lib/sequent/generator/template_project/db/database.yml
|
285
|
+
- lib/sequent/generator/template_project/db/migrations.rb
|
286
|
+
- lib/sequent/generator/template_project/db/sequent_schema.rb
|
287
|
+
- lib/sequent/generator/template_project/db/tables/post_records.sql
|
288
|
+
- lib/sequent/generator/template_project/lib/post.rb
|
289
|
+
- lib/sequent/generator/template_project/lib/post/commands.rb
|
290
|
+
- lib/sequent/generator/template_project/lib/post/events.rb
|
291
|
+
- lib/sequent/generator/template_project/lib/post/post.rb
|
292
|
+
- lib/sequent/generator/template_project/lib/post/post_command_handler.rb
|
293
|
+
- lib/sequent/generator/template_project/my_app.rb
|
294
|
+
- lib/sequent/generator/template_project/spec/app/projectors/post_projector_spec.rb
|
295
|
+
- lib/sequent/generator/template_project/spec/lib/post/post_command_handler_spec.rb
|
296
|
+
- lib/sequent/generator/template_project/spec/spec_helper.rb
|
249
297
|
- lib/sequent/migrations/migrate_events.rb
|
250
298
|
- lib/sequent/migrations/migrations.rb
|
299
|
+
- lib/sequent/migrations/projectors.rb
|
300
|
+
- lib/sequent/migrations/view_schema.rb
|
301
|
+
- lib/sequent/rake/migration_tasks.rb
|
251
302
|
- lib/sequent/rake/tasks.rb
|
252
303
|
- lib/sequent/sequent.rb
|
253
304
|
- lib/sequent/support.rb
|
@@ -259,7 +310,9 @@ files:
|
|
259
310
|
- lib/sequent/test/event_handler_helpers.rb
|
260
311
|
- lib/sequent/test/event_stream_helpers.rb
|
261
312
|
- lib/sequent/test/time_comparison.rb
|
313
|
+
- lib/sequent/util/printer.rb
|
262
314
|
- lib/sequent/util/skip_if_already_processing.rb
|
315
|
+
- lib/sequent/util/timer.rb
|
263
316
|
- lib/sequent/util/util.rb
|
264
317
|
- lib/version.rb
|
265
318
|
homepage: https://github.com/zilverline/sequent
|
@@ -282,7 +335,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
335
|
version: '0'
|
283
336
|
requirements: []
|
284
337
|
rubyforge_project:
|
285
|
-
rubygems_version: 2.7.
|
338
|
+
rubygems_version: 2.7.6
|
286
339
|
signing_key:
|
287
340
|
specification_version: 4
|
288
341
|
summary: Event sourcing framework for Ruby
|