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
@@ -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
@@ -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
@@ -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
- require 'logger'
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
- def self.logger
14
- @logger ||= Logger.new(STDOUT).tap {|l| l.level = Logger::INFO }
15
- end
16
-
17
- def self.logger=(logger)
18
- @logger = logger
19
- end
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
- sql = "CREATE SCHEMA IF NOT EXISTS #{schema}"
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
- ActiveRecord::Base.connection.execute(
45
- "DROP SCHEMA IF EXISTS #{schema} CASCADE"
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
+
@@ -0,0 +1,14 @@
1
+ module Sequent
2
+ module Util
3
+ module Timer
4
+ def time(msg)
5
+ start = Time.now
6
+ yield
7
+ ensure
8
+ stop = Time.now
9
+ seconds = stop - start
10
+ Sequent.logger.debug("#{msg} in #{seconds} seconds") if seconds > 1
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1 +1,3 @@
1
1
  require_relative 'skip_if_already_processing'
2
+ require_relative 'timer'
3
+ require_relative 'printer'
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sequent
2
- VERSION = '2.1.0'
2
+ VERSION = '3.0.0'
3
3
  end
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: 2.1.0
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-05-18 00:00:00.000000000 Z
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: '4.0'
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: '4.0'
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: '4.0'
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: '4.0'
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.18'
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.18'
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
- executables: []
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.3
338
+ rubygems_version: 2.7.6
286
339
  signing_key:
287
340
  specification_version: 4
288
341
  summary: Event sourcing framework for Ruby