sequent 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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