ruby_event_store-active_record 2.9.1 → 2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ruby_event_store/active_record/generators/event_id_index_migration_generator.rb +47 -0
- data/lib/ruby_event_store/active_record/generators/migration_generator.rb +1 -0
- data/lib/ruby_event_store/active_record/generators/rails_event_id_index_migration_generator.rb +36 -0
- data/lib/ruby_event_store/active_record/generators/rails_migration_generator.rb +4 -0
- data/lib/ruby_event_store/active_record/generators/templates/add_event_id_index_to_event_store_events_in_streams_template.erb +9 -0
- data/lib/ruby_event_store/active_record/generators/templates/create_event_store_events_template.erb +1 -0
- data/lib/ruby_event_store/active_record/generators/templates/mysql/create_event_store_events_template.erb +3 -2
- data/lib/ruby_event_store/active_record/generators/templates/postgres/create_event_store_events_template.erb +1 -0
- data/lib/ruby_event_store/active_record/generators/verify_data_type_for_adapter.rb +45 -0
- data/lib/ruby_event_store/active_record/tasks/migration_tasks.rake +18 -5
- data/lib/ruby_event_store/active_record/version.rb +1 -1
- data/lib/ruby_event_store/active_record.rb +3 -0
- metadata +9 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1625a6e2249c0ddac54baa8564bfece80a81b36a2e8cdd4fba198557b83e0ecf
|
|
4
|
+
data.tar.gz: 18ae89b42a29c0f562a6d93ce3c8264bf40f9d70ae975bd1a1a2124bc76b4ed1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7ea84bed37d8183a5ee6ad111720c1c92bf36ced3651b8b72d02eb7d9c86c165133eaa22acac891d6e11403bada2e222e4f1e3ce1a0db061da50985456a0d0a0
|
|
7
|
+
data.tar.gz: a08404348cdbffef94a6f50968b67732b494d69e8f70f3adecbce84313dfe1b370debc870fcb147982cf6bf45d7f3c6ed6edf6bc16f6fac73fea03b6bbe96b52
|
|
@@ -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
|
|
@@ -8,6 +8,7 @@ module RubyEventStore
|
|
|
8
8
|
|
|
9
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
13
|
migration_code = migration_code(data_type, database_adapter)
|
|
13
14
|
path = build_path(migration_path)
|
data/lib/ruby_event_store/active_record/generators/rails_event_id_index_migration_generator.rb
ADDED
|
@@ -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
|
|
@@ -30,6 +30,10 @@ module RubyEventStore
|
|
|
30
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
|
|
@@ -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
|
data/lib/ruby_event_store/active_record/generators/templates/create_event_store_events_template.erb
CHANGED
|
@@ -10,6 +10,7 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
10
10
|
end
|
|
11
11
|
add_index :event_store_events_in_streams, [:stream, :position], unique: true
|
|
12
12
|
add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
|
|
13
|
+
add_index :event_store_events_in_streams, [:event_id]
|
|
13
14
|
|
|
14
15
|
create_table(:event_store_events, force: false) do |t|
|
|
15
16
|
t.references :event, null: false, type: :string, limit: 36, index: { unique: true }
|
|
@@ -10,12 +10,13 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
10
10
|
end
|
|
11
11
|
add_index :event_store_events_in_streams, [:stream, :position], unique: true
|
|
12
12
|
add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
|
|
13
|
+
add_index :event_store_events_in_streams, [:event_id]
|
|
13
14
|
|
|
14
15
|
create_table(:event_store_events, force: false) do |t|
|
|
15
16
|
t.references :event, null: false, type: :string, limit: 36, index: { unique: true }
|
|
16
17
|
t.string :event_type, null: false, index: true
|
|
17
|
-
t
|
|
18
|
-
t
|
|
18
|
+
t.<%= data_type %> :metadata
|
|
19
|
+
t.<%= data_type %> :data, null: false
|
|
19
20
|
t.datetime :created_at, null: false, precision: 6, index: true
|
|
20
21
|
t.datetime :valid_at, null: true, precision: 6, index: true
|
|
21
22
|
end
|
|
@@ -10,6 +10,7 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
10
10
|
end
|
|
11
11
|
add_index :event_store_events_in_streams, [:stream, :position], unique: true
|
|
12
12
|
add_index :event_store_events_in_streams, [:stream, :event_id], unique: true
|
|
13
|
+
add_index :event_store_events_in_streams, [:event_id]
|
|
13
14
|
|
|
14
15
|
create_table(:event_store_events, id: :bigserial, force: false) do |t|
|
|
15
16
|
t.references :event, null: false, type: :uuid, index: { unique: true }
|
|
@@ -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,13 +2,26 @@ require_relative "../generators/migration_generator"
|
|
|
2
2
|
|
|
3
3
|
desc "Generate migration"
|
|
4
4
|
task "db:migrations:copy" do
|
|
5
|
-
data_type =
|
|
5
|
+
data_type =
|
|
6
|
+
ENV["DATA_TYPE"] || raise("Specify data type (binary, json, jsonb): rake db:migrations:copy DATA_TYPE=json")
|
|
6
7
|
::ActiveRecord::Base.establish_connection(ENV["DATABASE_URL"])
|
|
7
8
|
database_adapter = ::ActiveRecord::Base.connection.adapter_name
|
|
8
9
|
|
|
9
|
-
path =
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
path =
|
|
11
|
+
RubyEventStore::ActiveRecord::MigrationGenerator.new.call(
|
|
12
|
+
data_type,
|
|
13
|
+
database_adapter,
|
|
14
|
+
ENV["MIGRATION_PATH"] || "db/migrate"
|
|
15
|
+
)
|
|
12
16
|
|
|
13
17
|
puts "Migration file created #{path}"
|
|
14
|
-
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
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
require_relative "active_record/generators/migration_generator"
|
|
4
4
|
require_relative "active_record/generators/rails_migration_generator"
|
|
5
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"
|
|
6
9
|
require_relative "active_record/event"
|
|
7
10
|
require_relative "active_record/with_default_models"
|
|
8
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.
|
|
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-
|
|
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.
|
|
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.
|
|
26
|
+
version: '2.10'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: activerecord
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -57,12 +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
|
|
63
66
|
- lib/ruby_event_store/active_record/generators/templates/mysql/create_event_store_events_template.erb
|
|
64
67
|
- lib/ruby_event_store/active_record/generators/templates/postgres/create_event_store_events_template.erb
|
|
65
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
|
|
66
70
|
- lib/ruby_event_store/active_record/index_violation_detector.rb
|
|
67
71
|
- lib/ruby_event_store/active_record/pg_linearized_event_repository.rb
|
|
68
72
|
- lib/ruby_event_store/active_record/railtie.rb
|
|
@@ -95,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
95
99
|
- !ruby/object:Gem::Version
|
|
96
100
|
version: '0'
|
|
97
101
|
requirements: []
|
|
98
|
-
rubygems_version: 3.
|
|
102
|
+
rubygems_version: 3.4.1
|
|
99
103
|
signing_key:
|
|
100
104
|
specification_version: 4
|
|
101
105
|
summary: Persistent event repository implementation for RubyEventStore based on ActiveRecord
|