ruby_event_store-active_record 2.9.0 → 2.9.1

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: 531bd49e9c928fcdcbdeea01035c260b6019198d2d5357c7ecafe8aa6edcf54e
4
+ data.tar.gz: 891761c440d9b732ab456177d9b6276994841bcd90aaa1c2eccd37a75bde8360
5
5
  SHA512:
6
- metadata.gz: 2870b19f168fd7730a9e3a1ab4cdfe7ec8d4c1ff3b9bda2d6f9a2f4a769a9e4c54f4fe85149525c1b4d5ee950151f01276fb17a079c1f1fd09753008dc80b3f7
7
- data.tar.gz: 5c72abb8e403fb1e2a2f387943c04de84992ce7e6517feb0a457e949ef0c9b74eb3d6aabd60f2e7e15d85772b925e6a6e8c5e2ea5a65f66606460f881680a4d1
6
+ metadata.gz: 488d98960694b1c32936c7caf1b45901d9355d0cc2a8cbc9be49dc147c2ea57567c56b43387cd4cb46fce796b2914d194852372d8be8dc2deb93b9bea19da8ee
7
+ data.tar.gz: 69c47a6136633f58af8605b3c371041bb71c84fe425e472867d3b01ff7f66a4ee55c2156d8f75bd28c98f9912e2097a1ed9e2f631b448a692b2e2f775a7ea149
@@ -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)
@@ -6,10 +6,10 @@ 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
11
 
12
- migration_code = migration_code(data_type)
12
+ migration_code = migration_code(data_type, database_adapter)
13
13
  path = build_path(migration_path)
14
14
  write_to_file(migration_code, path)
15
15
  path
@@ -21,8 +21,16 @@ module RubyEventStore
21
21
  File.expand_path(path, __dir__)
22
22
  end
23
23
 
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)
24
+ def migration_code(data_type, database_adapter)
25
+ migration_template(template_root(database_adapter), "create_event_store_events").result_with_hash(migration_version: migration_version, data_type: data_type)
26
+ end
27
+
28
+ def template_root(database_adapter)
29
+ absolute_path("./templates/#{template_directory(database_adapter)}")
30
+ end
31
+
32
+ def template_directory(database_adapter)
33
+ TemplateDirectory.for_adapter(database_adapter)
26
34
  end
27
35
 
28
36
  def migration_template(template_root, name)
@@ -30,7 +38,7 @@ module RubyEventStore
30
38
  end
31
39
 
32
40
  def migration_version
33
- "[4.2]"
41
+ ::ActiveRecord::Migration.current_version
34
42
  end
35
43
 
36
44
  def timestamp
@@ -42,7 +50,7 @@ module RubyEventStore
42
50
  end
43
51
 
44
52
  def build_path(migration_path)
45
- File.join( "#{migration_path}", "#{timestamp}_create_event_store_events.rb")
53
+ File.join("#{migration_path}", "#{timestamp}_create_event_store_events.rb")
46
54
  end
47
55
  end
48
56
  end
@@ -27,23 +27,31 @@ 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
33
  end
34
34
 
35
35
  def create_migration
36
- template "create_event_store_events_template.erb", "db/migrate/#{timestamp}_create_event_store_events.rb"
36
+ template "#{template_directory}create_event_store_events_template.erb", "db/migrate/#{timestamp}_create_event_store_events.rb"
37
37
  end
38
38
 
39
39
  private
40
40
 
41
+ def template_directory
42
+ TemplateDirectory.for_adapter(adapter)
43
+ end
44
+
41
45
  def data_type
42
46
  options.fetch("data_type")
43
47
  end
44
48
 
49
+ def adapter
50
+ ::ActiveRecord::Base.connection.adapter_name.downcase
51
+ end
52
+
45
53
  def migration_version
46
- "[4.2]"
54
+ ::ActiveRecord::Migration.current_version
47
55
  end
48
56
 
49
57
  def timestamp
@@ -1,55 +1,23 @@
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
40
13
 
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
14
+ create_table(:event_store_events, force: false) do |t|
15
+ t.references :event, null: false, type: :string, limit: 36, index: { unique: true }
16
+ t.string :event_type, null: false, index: true
17
+ t.binary :metadata
18
+ t.binary :data, null: false
19
+ t.datetime :created_at, null: false, precision: 6, index: true
20
+ t.datetime :valid_at, null: true, precision: 6, index: true
53
21
  end
54
22
  end
55
23
  end
@@ -0,0 +1,23 @@
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
+
14
+ create_table(:event_store_events, force: false) do |t|
15
+ t.references :event, null: false, type: :string, limit: 36, index: { unique: true }
16
+ t.string :event_type, null: false, index: true
17
+ t.binary :metadata
18
+ t.binary :data, null: false
19
+ t.datetime :created_at, null: false, precision: 6, index: true
20
+ t.datetime :valid_at, null: true, precision: 6, index: true
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
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
+
14
+ create_table(:event_store_events, id: :bigserial, force: false) do |t|
15
+ t.references :event, null: false, type: :uuid, index: { unique: true }
16
+ t.string :event_type, null: false, index: true
17
+ t.<%= data_type %> :metadata
18
+ t.<%= data_type %> :data, null: false
19
+ t.datetime :created_at, null: false, type: :timestamp, precision: 6, index: true
20
+ t.datetime :valid_at, null: true, type: :timestamp, precision: 6, index: true
21
+ end
22
+ end
23
+ 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
@@ -3,10 +3,12 @@ require_relative "../generators/migration_generator"
3
3
  desc "Generate migration"
4
4
  task "db:migrations:copy" do
5
5
  data_type = ENV["DATA_TYPE"] || raise("Specify data type (binary, json, jsonb): rake db:migrations:copy DATA_TYPE=json")
6
+ ::ActiveRecord::Base.establish_connection(ENV["DATABASE_URL"])
7
+ database_adapter = ::ActiveRecord::Base.connection.adapter_name
6
8
 
7
9
  path = RubyEventStore::ActiveRecord::MigrationGenerator
8
10
  .new
9
- .call(data_type, ENV["MIGRATION_PATH"] || "db/migrate")
11
+ .call(data_type, database_adapter, ENV["MIGRATION_PATH"] || "db/migrate")
10
12
 
11
13
  puts "Migration file created #{path}"
12
14
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyEventStore
4
4
  module ActiveRecord
5
- VERSION = "2.9.0"
5
+ VERSION = "2.9.1"
6
6
  end
7
7
  end
@@ -2,6 +2,7 @@
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"
5
6
  require_relative "active_record/event"
6
7
  require_relative "active_record/with_default_models"
7
8
  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.9.1
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-02-03 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.9.1
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.9.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -60,6 +60,9 @@ files:
60
60
  - lib/ruby_event_store/active_record/generators/migration_generator.rb
61
61
  - lib/ruby_event_store/active_record/generators/rails_migration_generator.rb
62
62
  - lib/ruby_event_store/active_record/generators/templates/create_event_store_events_template.erb
63
+ - lib/ruby_event_store/active_record/generators/templates/mysql/create_event_store_events_template.erb
64
+ - lib/ruby_event_store/active_record/generators/templates/postgres/create_event_store_events_template.erb
65
+ - lib/ruby_event_store/active_record/generators/templates/template_directory.rb
63
66
  - lib/ruby_event_store/active_record/index_violation_detector.rb
64
67
  - lib/ruby_event_store/active_record/pg_linearized_event_repository.rb
65
68
  - lib/ruby_event_store/active_record/railtie.rb
@@ -92,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  requirements: []
95
- rubygems_version: 3.3.26
98
+ rubygems_version: 3.3.7
96
99
  signing_key:
97
100
  specification_version: 4
98
101
  summary: Persistent event repository implementation for RubyEventStore based on ActiveRecord