ruby_event_store-active_record 2.9.1 → 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: 531bd49e9c928fcdcbdeea01035c260b6019198d2d5357c7ecafe8aa6edcf54e
4
- data.tar.gz: 891761c440d9b732ab456177d9b6276994841bcd90aaa1c2eccd37a75bde8360
3
+ metadata.gz: 1625a6e2249c0ddac54baa8564bfece80a81b36a2e8cdd4fba198557b83e0ecf
4
+ data.tar.gz: 18ae89b42a29c0f562a6d93ce3c8264bf40f9d70ae975bd1a1a2124bc76b4ed1
5
5
  SHA512:
6
- metadata.gz: 488d98960694b1c32936c7caf1b45901d9355d0cc2a8cbc9be49dc147c2ea57567c56b43387cd4cb46fce796b2914d194852372d8be8dc2deb93b9bea19da8ee
7
- data.tar.gz: 69c47a6136633f58af8605b3c371041bb71c84fe425e472867d3b01ff7f66a4ee55c2156d8f75bd28c98f9912e2097a1ed9e2f631b448a692b2e2f775a7ea149
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)
@@ -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
@@ -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.binary :metadata
18
- t.binary :data, null: false
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 = 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")
6
7
  ::ActiveRecord::Base.establish_connection(ENV["DATABASE_URL"])
7
8
  database_adapter = ::ActiveRecord::Base.connection.adapter_name
8
9
 
9
- path = RubyEventStore::ActiveRecord::MigrationGenerator
10
- .new
11
- .call(data_type, database_adapter, 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
+ )
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyEventStore
4
4
  module ActiveRecord
5
- VERSION = "2.9.1"
5
+ VERSION = "2.10"
6
6
  end
7
7
  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.9.1
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-02-03 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.1
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.1
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.3.7
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