ruby_event_store-active_record 2.9.0 → 2.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b42559ca51848ea6e388b9cfe5a73c9058691a4a2281000c6ba0da5f3899a40e
4
- data.tar.gz: 17440ba2550814acb3bc4d0a9522570783ab21306c318dac218b85d98065f1e2
3
+ metadata.gz: 1625a6e2249c0ddac54baa8564bfece80a81b36a2e8cdd4fba198557b83e0ecf
4
+ data.tar.gz: 18ae89b42a29c0f562a6d93ce3c8264bf40f9d70ae975bd1a1a2124bc76b4ed1
5
5
  SHA512:
6
- metadata.gz: 2870b19f168fd7730a9e3a1ab4cdfe7ec8d4c1ff3b9bda2d6f9a2f4a769a9e4c54f4fe85149525c1b4d5ee950151f01276fb17a079c1f1fd09753008dc80b3f7
7
- data.tar.gz: 5c72abb8e403fb1e2a2f387943c04de84992ce7e6517feb0a457e949ef0c9b74eb3d6aabd60f2e7e15d85772b925e6a6e8c5e2ea5a65f66606460f881680a4d1
6
+ metadata.gz: 7ea84bed37d8183a5ee6ad111720c1c92bf36ced3651b8b72d02eb7d9c86c165133eaa22acac891d6e11403bada2e222e4f1e3ce1a0db061da50985456a0d0a0
7
+ data.tar.gz: a08404348cdbffef94a6f50968b67732b494d69e8f70f3adecbce84313dfe1b370debc870fcb147982cf6bf45d7f3c6ed6edf6bc16f6fac73fea03b6bbe96b52
@@ -114,11 +114,13 @@ module RubyEventStore
114
114
  end
115
115
 
116
116
  def as_of(spec)
117
- Arel.sql("COALESCE(#{@event_klass.table_name}.valid_at, #{@event_klass.table_name}.created_at) #{order(spec)}")
117
+ expr = coalesce(@event_klass.arel_table[:valid_at], @event_klass.arel_table[:created_at])
118
+ spec.forward? ? expr.asc : expr.desc
118
119
  end
119
120
 
120
121
  def as_at(spec)
121
- "#{@event_klass.table_name}.created_at #{order(spec)}"
122
+ expr = @event_klass.arel_table[:created_at]
123
+ spec.forward? ? expr.asc : expr.desc
122
124
  end
123
125
 
124
126
  def start_offset_condition(specification, record_id, search_in)
@@ -163,28 +165,32 @@ module RubyEventStore
163
165
  )
164
166
  end
165
167
 
168
+ def coalesce(*exprs)
169
+ Arel::Nodes::NamedFunction.new "COALESCE", exprs
170
+ end
171
+
166
172
  def time_comparison_field(specification)
167
173
  if specification.time_sort_by_as_of?
168
- "COALESCE(#{@event_klass.table_name}.valid_at, #{@event_klass.table_name}.created_at)"
174
+ coalesce(@event_klass.arel_table[:valid_at], @event_klass.arel_table[:created_at])
169
175
  else
170
- "#{@event_klass.table_name}.created_at"
176
+ @event_klass.arel_table[:created_at]
171
177
  end
172
178
  end
173
179
 
174
180
  def older_than_condition(specification)
175
- ["#{time_comparison_field(specification)} < ?", specification.older_than]
181
+ time_comparison_field(specification).lt(specification.older_than)
176
182
  end
177
183
 
178
184
  def older_than_or_equal_condition(specification)
179
- ["#{time_comparison_field(specification)} <= ?", specification.older_than_or_equal]
185
+ time_comparison_field(specification).lteq(specification.older_than_or_equal)
180
186
  end
181
187
 
182
188
  def newer_than_condition(specification)
183
- ["#{time_comparison_field(specification)} > ?", specification.newer_than]
189
+ time_comparison_field(specification).gt(specification.newer_than)
184
190
  end
185
191
 
186
192
  def newer_than_or_equal_condition(specification)
187
- ["#{time_comparison_field(specification)} >= ?", specification.newer_than_or_equal]
193
+ time_comparison_field(specification).gteq(specification.newer_than_or_equal)
188
194
  end
189
195
 
190
196
  def order(spec)
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module ActiveRecord
5
+ class EventIdIndexMigrationGenerator
6
+ def call(migration_path)
7
+ path = build_path(migration_path)
8
+ write_to_file(path)
9
+ path
10
+ end
11
+
12
+ private
13
+
14
+ def absolute_path(path)
15
+ File.expand_path(path, __dir__)
16
+ end
17
+
18
+ def migration_code
19
+ migration_template.result_with_hash(migration_version: migration_version)
20
+ end
21
+
22
+ def migration_template
23
+ ERB.new(
24
+ File.read(
25
+ File.join(absolute_path("./templates"), "add_event_id_index_to_event_store_events_in_streams_template.erb")
26
+ )
27
+ )
28
+ end
29
+
30
+ def migration_version
31
+ ::ActiveRecord::Migration.current_version
32
+ end
33
+
34
+ def timestamp
35
+ Time.now.strftime("%Y%m%d%H%M%S")
36
+ end
37
+
38
+ def write_to_file(path)
39
+ File.write(path, migration_code)
40
+ end
41
+
42
+ def build_path(migration_path)
43
+ File.join("#{migration_path}", "#{timestamp}_add_event_id_index_to_event_store_events_in_streams.rb")
44
+ end
45
+ end
46
+ end
47
+ end
@@ -6,10 +6,11 @@ module RubyEventStore
6
6
  class MigrationGenerator
7
7
  DATA_TYPES = %w[binary json jsonb].freeze
8
8
 
9
- def call(data_type, migration_path)
9
+ def call(data_type, database_adapter, migration_path)
10
10
  raise ArgumentError, "Invalid value for data type. Supported for options are: #{DATA_TYPES.join(", ")}." unless DATA_TYPES.include?(data_type)
11
+ VerifyDataTypeForAdapter.new.call(database_adapter, data_type)
11
12
 
12
- migration_code = migration_code(data_type)
13
+ migration_code = migration_code(data_type, database_adapter)
13
14
  path = build_path(migration_path)
14
15
  write_to_file(migration_code, path)
15
16
  path
@@ -21,8 +22,16 @@ module RubyEventStore
21
22
  File.expand_path(path, __dir__)
22
23
  end
23
24
 
24
- def migration_code(data_type)
25
- migration_template(absolute_path("./templates"), "create_event_store_events").result_with_hash(migration_version: migration_version, data_type: data_type)
25
+ def migration_code(data_type, database_adapter)
26
+ migration_template(template_root(database_adapter), "create_event_store_events").result_with_hash(migration_version: migration_version, data_type: data_type)
27
+ end
28
+
29
+ def template_root(database_adapter)
30
+ absolute_path("./templates/#{template_directory(database_adapter)}")
31
+ end
32
+
33
+ def template_directory(database_adapter)
34
+ TemplateDirectory.for_adapter(database_adapter)
26
35
  end
27
36
 
28
37
  def migration_template(template_root, name)
@@ -30,7 +39,7 @@ module RubyEventStore
30
39
  end
31
40
 
32
41
  def migration_version
33
- "[4.2]"
42
+ ::ActiveRecord::Migration.current_version
34
43
  end
35
44
 
36
45
  def timestamp
@@ -42,7 +51,7 @@ module RubyEventStore
42
51
  end
43
52
 
44
53
  def build_path(migration_path)
45
- File.join( "#{migration_path}", "#{timestamp}_create_event_store_events.rb")
54
+ File.join("#{migration_path}", "#{timestamp}_create_event_store_events.rb")
46
55
  end
47
56
  end
48
57
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require "rails/generators"
5
+ rescue LoadError
6
+ end
7
+
8
+ if defined?(Rails::Generators::Base)
9
+ module RubyEventStore
10
+ module ActiveRecord
11
+ class RailsEventIdIndexMigrationGenerator < Rails::Generators::Base
12
+ class Error < Thor::Error
13
+ end
14
+
15
+ namespace "rails_event_store_active_record:migration_for_missing_event_id_index"
16
+
17
+ source_root File.expand_path(File.join(File.dirname(__FILE__), "../generators/templates"))
18
+
19
+ def create_migration
20
+ template "add_event_id_index_to_event_store_events_in_streams_template.erb",
21
+ "db/migrate/#{timestamp}_add_event_id_index_to_event_store_events_in_streams.rb"
22
+ end
23
+
24
+ private
25
+
26
+ def migration_version
27
+ ::ActiveRecord::Migration.current_version
28
+ end
29
+
30
+ def timestamp
31
+ Time.now.strftime("%Y%m%d%H%M%S")
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -27,23 +27,35 @@ module RubyEventStore
27
27
  def initialize(*args)
28
28
  super
29
29
 
30
- if DATA_TYPES.exclude?(options.fetch(:data_type))
30
+ if DATA_TYPES.exclude?(data_type)
31
31
  raise Error, "Invalid value for --data-type option. Supported for options are: #{DATA_TYPES.join(", ")}."
32
32
  end
33
+
34
+ VerifyDataTypeForAdapter.new.call(adapter, data_type)
35
+ rescue InvalidDataTypeForAdapter, UnsupportedAdapter => e
36
+ raise Error, e.message
33
37
  end
34
38
 
35
39
  def create_migration
36
- template "create_event_store_events_template.erb", "db/migrate/#{timestamp}_create_event_store_events.rb"
40
+ template "#{template_directory}create_event_store_events_template.erb", "db/migrate/#{timestamp}_create_event_store_events.rb"
37
41
  end
38
42
 
39
43
  private
40
44
 
45
+ def template_directory
46
+ TemplateDirectory.for_adapter(adapter)
47
+ end
48
+
41
49
  def data_type
42
50
  options.fetch("data_type")
43
51
  end
44
52
 
53
+ def adapter
54
+ ::ActiveRecord::Base.connection.adapter_name.downcase
55
+ end
56
+
45
57
  def migration_version
46
- "[4.2]"
58
+ ::ActiveRecord::Migration.current_version
47
59
  end
48
60
 
49
61
  def timestamp
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddEventIdIndexToEventStoreEventsInStreams < ActiveRecord::Migration[<%= migration_version %>]
4
+ def change
5
+ return if index_exists?(:event_store_events_in_streams, :event_id)
6
+
7
+ add_index :event_store_events_in_streams, [:event_id]
8
+ end
9
+ end
@@ -1,55 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class CreateEventStoreEvents < ActiveRecord::Migration<%= migration_version %>
3
+ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
4
4
  def change
5
- postgres =
6
- ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
7
- if postgres
8
- create_table(:event_store_events_in_streams, id: :bigserial, force: false) do |t|
9
- t.string :stream, null: false
10
- t.integer :position, null: true
11
- t.references :event, null: false, type: :uuid
12
- t.datetime :created_at, null: false
13
- end
14
- add_index :event_store_events_in_streams, [:stream, :position], unique: true
15
- add_index :event_store_events_in_streams, [:created_at]
16
- add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
17
-
18
- create_table(:event_store_events, id: :bigserial, force: false) do |t|
19
- t.references :event, null: false, type: :uuid
20
- t.string :event_type, null: false
21
- t.<%= data_type %> :metadata
22
- t.<%= data_type %> :data, null: false
23
- t.datetime :created_at, null: false
24
- t.datetime :valid_at, null: true
25
- end
26
- add_index :event_store_events, :event_id, unique: true
27
- add_index :event_store_events, :created_at
28
- add_index :event_store_events, :valid_at
29
- add_index :event_store_events, :event_type
30
- else
31
- create_table(:event_store_events_in_streams, force: false) do |t|
32
- t.string :stream, null: false
33
- t.integer :position, null: true
34
- t.references :event, null: false, type: :string, limit: 36
35
- t.datetime :created_at, null: false, precision: 6
36
- end
37
- add_index :event_store_events_in_streams, [:stream, :position], unique: true
38
- add_index :event_store_events_in_streams, [:created_at]
39
- add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
5
+ create_table(:event_store_events_in_streams, force: false) do |t|
6
+ t.string :stream, null: false
7
+ t.integer :position, null: true
8
+ t.references :event, null: false, type: :string, limit: 36, index: false
9
+ t.datetime :created_at, null: false, precision: 6, index: true
10
+ end
11
+ add_index :event_store_events_in_streams, [:stream, :position], unique: true
12
+ add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
13
+ add_index :event_store_events_in_streams, [:event_id]
40
14
 
41
- create_table(:event_store_events, force: false) do |t|
42
- t.references :event, null: false, type: :string, limit: 36
43
- t.string :event_type, null: false
44
- t.binary :metadata
45
- t.binary :data, null: false
46
- t.datetime :created_at, null: false, precision: 6
47
- t.datetime :valid_at, null: true, precision: 6
48
- end
49
- add_index :event_store_events, :event_id, unique: true
50
- add_index :event_store_events, :created_at
51
- add_index :event_store_events, :valid_at
52
- add_index :event_store_events, :event_type
15
+ create_table(:event_store_events, force: false) do |t|
16
+ t.references :event, null: false, type: :string, limit: 36, index: { unique: true }
17
+ t.string :event_type, null: false, index: true
18
+ t.binary :metadata
19
+ t.binary :data, null: false
20
+ t.datetime :created_at, null: false, precision: 6, index: true
21
+ t.datetime :valid_at, null: true, precision: 6, index: true
53
22
  end
54
23
  end
55
24
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
4
+ def change
5
+ create_table(:event_store_events_in_streams, force: false) do |t|
6
+ t.string :stream, null: false
7
+ t.integer :position, null: true
8
+ t.references :event, null: false, type: :string, limit: 36, index: false
9
+ t.datetime :created_at, null: false, precision: 6, index: true
10
+ end
11
+ add_index :event_store_events_in_streams, [:stream, :position], unique: true
12
+ add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
13
+ add_index :event_store_events_in_streams, [:event_id]
14
+
15
+ create_table(:event_store_events, force: false) do |t|
16
+ t.references :event, null: false, type: :string, limit: 36, index: { unique: true }
17
+ t.string :event_type, null: false, index: true
18
+ t.<%= data_type %> :metadata
19
+ t.<%= data_type %> :data, null: false
20
+ t.datetime :created_at, null: false, precision: 6, index: true
21
+ t.datetime :valid_at, null: true, precision: 6, index: true
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
4
+ def change
5
+ create_table(:event_store_events_in_streams, id: :bigserial, force: false) do |t|
6
+ t.string :stream, null: false
7
+ t.integer :position, null: true
8
+ t.references :event, null: false, type: :uuid, index: false
9
+ t.datetime :created_at, null: false, type: :timestamp, precision: 6, index: true
10
+ end
11
+ add_index :event_store_events_in_streams, [:stream, :position], unique: true
12
+ add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
13
+ add_index :event_store_events_in_streams, [:event_id]
14
+
15
+ create_table(:event_store_events, id: :bigserial, force: false) do |t|
16
+ t.references :event, null: false, type: :uuid, index: { unique: true }
17
+ t.string :event_type, null: false, index: true
18
+ t.<%= data_type %> :metadata
19
+ t.<%= data_type %> :data, null: false
20
+ t.datetime :created_at, null: false, type: :timestamp, precision: 6, index: true
21
+ t.datetime :valid_at, null: true, type: :timestamp, precision: 6, index: true
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module ActiveRecord
5
+ class TemplateDirectory
6
+ def self.for_adapter(database_adapter)
7
+ case database_adapter.downcase
8
+ when "postgresql"
9
+ "postgres/"
10
+ when "mysql2"
11
+ "mysql/"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module ActiveRecord
5
+ InvalidDataTypeForAdapter = Class.new(StandardError)
6
+ UnsupportedAdapter = Class.new(StandardError)
7
+
8
+ class VerifyDataTypeForAdapter
9
+ SUPPORTED_POSTGRES_DATA_TYPES = %w[binary json jsonb].freeze
10
+ SUPPORTED_MYSQL_DATA_TYPES = %w[binary json].freeze
11
+ SUPPORTED_SQLITE_DATA_TYPES = %w[binary].freeze
12
+
13
+ def call(adapter, data_type)
14
+ raise UnsupportedAdapter, "Unsupported adapter" unless supported?(adapter)
15
+ raise InvalidDataTypeForAdapter, "MySQL2 doesn't support #{data_type}" if is_mysql2?(adapter) && !SUPPORTED_MYSQL_DATA_TYPES.include?(data_type)
16
+ raise InvalidDataTypeForAdapter, "sqlite doesn't support #{data_type}" if is_sqlite?(adapter) && supported_by_sqlite?(data_type)
17
+ raise InvalidDataTypeForAdapter, "PostgreSQL doesn't support #{data_type}" unless supported_by_postgres?(data_type)
18
+ end
19
+
20
+ private
21
+
22
+ private_constant :SUPPORTED_POSTGRES_DATA_TYPES, :SUPPORTED_MYSQL_DATA_TYPES, :SUPPORTED_SQLITE_DATA_TYPES
23
+
24
+ def supported?(adapter)
25
+ %w[mysql2 postgresql sqlite].include?(adapter.downcase)
26
+ end
27
+
28
+ def is_sqlite?(adapter)
29
+ adapter.downcase.eql?("sqlite")
30
+ end
31
+
32
+ def is_mysql2?(adapter)
33
+ adapter.downcase.eql?("mysql2")
34
+ end
35
+
36
+ def supported_by_sqlite?(data_type)
37
+ !SUPPORTED_SQLITE_DATA_TYPES.include?(data_type)
38
+ end
39
+
40
+ def supported_by_postgres?(data_type)
41
+ SUPPORTED_POSTGRES_DATA_TYPES.include?(data_type)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -2,11 +2,26 @@ require_relative "../generators/migration_generator"
2
2
 
3
3
  desc "Generate migration"
4
4
  task "db:migrations:copy" do
5
- data_type = ENV["DATA_TYPE"] || raise("Specify data type (binary, json, jsonb): rake db:migrations:copy DATA_TYPE=json")
5
+ data_type =
6
+ ENV["DATA_TYPE"] || raise("Specify data type (binary, json, jsonb): rake db:migrations:copy DATA_TYPE=json")
7
+ ::ActiveRecord::Base.establish_connection(ENV["DATABASE_URL"])
8
+ database_adapter = ::ActiveRecord::Base.connection.adapter_name
6
9
 
7
- path = RubyEventStore::ActiveRecord::MigrationGenerator
8
- .new
9
- .call(data_type, ENV["MIGRATION_PATH"] || "db/migrate")
10
+ path =
11
+ RubyEventStore::ActiveRecord::MigrationGenerator.new.call(
12
+ data_type,
13
+ database_adapter,
14
+ ENV["MIGRATION_PATH"] || "db/migrate"
15
+ )
10
16
 
11
17
  puts "Migration file created #{path}"
12
- end
18
+ end
19
+
20
+ desc "Generate migration for missing event_id index"
21
+ task "db:migrations:fix_missing_event_id_index" do
22
+ ::ActiveRecord::Base.establish_connection(ENV["DATABASE_URL"])
23
+
24
+ path = RubyEventStore::ActiveRecord::EventIdIndexMigrationGenerator.new.call(ENV["MIGRATION_PATH"] || "db/migrate")
25
+
26
+ puts "Migration file created #{path}"
27
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyEventStore
4
4
  module ActiveRecord
5
- VERSION = "2.9.0"
5
+ VERSION = "2.10"
6
6
  end
7
7
  end
@@ -2,6 +2,10 @@
2
2
 
3
3
  require_relative "active_record/generators/migration_generator"
4
4
  require_relative "active_record/generators/rails_migration_generator"
5
+ require_relative "active_record/generators/templates/template_directory"
6
+ require_relative "active_record/generators/verify_data_type_for_adapter"
7
+ require_relative "active_record/generators/event_id_index_migration_generator"
8
+ require_relative "active_record/generators/rails_event_id_index_migration_generator"
5
9
  require_relative "active_record/event"
6
10
  require_relative "active_record/with_default_models"
7
11
  require_relative "active_record/with_abstract_base_class"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store-active_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.0
4
+ version: '2.10'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-24 00:00:00.000000000 Z
11
+ date: 2023-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby_event_store
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 2.9.0
19
+ version: '2.10'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 2.9.0
26
+ version: '2.10'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -57,9 +57,16 @@ files:
57
57
  - lib/ruby_event_store/active_record/event.rb
58
58
  - lib/ruby_event_store/active_record/event_repository.rb
59
59
  - lib/ruby_event_store/active_record/event_repository_reader.rb
60
+ - lib/ruby_event_store/active_record/generators/event_id_index_migration_generator.rb
60
61
  - lib/ruby_event_store/active_record/generators/migration_generator.rb
62
+ - lib/ruby_event_store/active_record/generators/rails_event_id_index_migration_generator.rb
61
63
  - lib/ruby_event_store/active_record/generators/rails_migration_generator.rb
64
+ - lib/ruby_event_store/active_record/generators/templates/add_event_id_index_to_event_store_events_in_streams_template.erb
62
65
  - lib/ruby_event_store/active_record/generators/templates/create_event_store_events_template.erb
66
+ - lib/ruby_event_store/active_record/generators/templates/mysql/create_event_store_events_template.erb
67
+ - lib/ruby_event_store/active_record/generators/templates/postgres/create_event_store_events_template.erb
68
+ - lib/ruby_event_store/active_record/generators/templates/template_directory.rb
69
+ - lib/ruby_event_store/active_record/generators/verify_data_type_for_adapter.rb
63
70
  - lib/ruby_event_store/active_record/index_violation_detector.rb
64
71
  - lib/ruby_event_store/active_record/pg_linearized_event_repository.rb
65
72
  - lib/ruby_event_store/active_record/railtie.rb
@@ -92,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
99
  - !ruby/object:Gem::Version
93
100
  version: '0'
94
101
  requirements: []
95
- rubygems_version: 3.3.26
102
+ rubygems_version: 3.4.1
96
103
  signing_key:
97
104
  specification_version: 4
98
105
  summary: Persistent event repository implementation for RubyEventStore based on ActiveRecord