rails_event_store_active_record 0.19.0 → 0.20.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c45bf6b63a5317bf916c5bc831573fab866c762
4
- data.tar.gz: a0a1a1ad2c1c662911b3da70829bae860741bc51
3
+ metadata.gz: 870a6b6052a42cee07f40861b1a9ace1a173984f
4
+ data.tar.gz: 8a4c447a0c33358373a5f8143b45f41f0f44949d
5
5
  SHA512:
6
- metadata.gz: 4f936d894bf5b5d64395527873cbdc300abfe18b8ee9536c4989e53a48bfad17703bf5e4f7b81633279490917d73074863b7b0ed63330c32d7cff565219624cd
7
- data.tar.gz: 6f5c2f8e1b899bb296439728a84b745bb4c772e4b1f39924e27c3d327b95d5a98c66b75eed88afbf932d02b5c90fd5c52a37165f941a1709aa7b38cb02762602
6
+ metadata.gz: 308760f7dfc995d9b535541150f32c4797f581deb00e349fde26f19320110af803305835cf53814d614aed981fe6cbcc819573a296883a7cfb0c8d34df406762
7
+ data.tar.gz: b9894d086f193ede1b9e46cd74344f8a8c6a921a4495c7c31e37e77d350dfc087d1c4088394a353b87a4b5de92655021f9e39389bce3e27af03dad1cb5ab2ec6
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  gem 'ruby_event_store', path: '../ruby_event_store'
5
+
6
+ if v = ENV['RAILS_VERSION']
7
+ gem 'rails', v
8
+ end
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # RailsEventStoreActiveRecord
2
2
 
3
- An Active Record based implementation of events repository for [Rails Event Store](http://github.com/RailsEventStore/rails_event_store/rails_event_store).
3
+ An Active Record based implementation of events repository for [Rails Event Store](https://github.com/RailsEventStore/rails_event_store/rails_event_store).
4
4
 
5
5
  This is the default repository used in `rails_event_store` gem.
@@ -4,8 +4,6 @@ module RailsEventStoreActiveRecord
4
4
  class Event < ::ActiveRecord::Base
5
5
  self.primary_key = :id
6
6
  self.table_name = 'event_store_events'
7
- serialize :metadata
8
- serialize :data
9
7
  end
10
8
 
11
9
  class EventInStream < ::ActiveRecord::Base
@@ -6,8 +6,9 @@ module RailsEventStoreActiveRecord
6
6
 
7
7
  POSITION_SHIFT = 1
8
8
 
9
- def initialize
9
+ def initialize(mapper: RubyEventStore::Mappers::Default.new)
10
10
  verify_correct_schema_present
11
+ @mapper = mapper
11
12
  end
12
13
 
13
14
  def append_to_stream(events, stream_name, expected_version)
@@ -32,14 +33,10 @@ module RailsEventStoreActiveRecord
32
33
  position = unless expected_version.equal?(:any)
33
34
  expected_version + index + POSITION_SHIFT
34
35
  end
35
- Event.create!(
36
- id: event.event_id,
37
- data: event.data,
38
- metadata: event.metadata,
39
- event_type: event.class,
40
- )
36
+ build_event_record(event).save!
41
37
  events = [{
42
38
  stream: RubyEventStore::GLOBAL_STREAM,
39
+ position: nil,
43
40
  event_id: event.event_id
44
41
  }]
45
42
  events.unshift({
@@ -68,9 +65,8 @@ module RailsEventStoreActiveRecord
68
65
  end
69
66
 
70
67
  def last_stream_event(stream_name)
71
- build_event_entity(
72
- EventInStream.where(stream: stream_name).order('position DESC, id DESC').first
73
- )
68
+ record = EventInStream.where(stream: stream_name).order('position DESC, id DESC').first
69
+ record && build_event_instance(record)
74
70
  end
75
71
 
76
72
  def read_events_forward(stream_name, after_event_id, count)
@@ -81,7 +77,7 @@ module RailsEventStoreActiveRecord
81
77
  end
82
78
 
83
79
  stream.preload(:event).order('position ASC, id ASC').limit(count)
84
- .map(&method(:build_event_entity))
80
+ .map(&method(:build_event_instance))
85
81
  end
86
82
 
87
83
  def read_events_backward(stream_name, before_event_id, count)
@@ -92,17 +88,17 @@ module RailsEventStoreActiveRecord
92
88
  end
93
89
 
94
90
  stream.preload(:event).order('position DESC, id DESC').limit(count)
95
- .map(&method(:build_event_entity))
91
+ .map(&method(:build_event_instance))
96
92
  end
97
93
 
98
94
  def read_stream_events_forward(stream_name)
99
95
  EventInStream.preload(:event).where(stream: stream_name).order('position ASC, id ASC')
100
- .map(&method(:build_event_entity))
96
+ .map(&method(:build_event_instance))
101
97
  end
102
98
 
103
99
  def read_stream_events_backward(stream_name)
104
100
  EventInStream.preload(:event).where(stream: stream_name).order('position DESC, id DESC')
105
- .map(&method(:build_event_entity))
101
+ .map(&method(:build_event_instance))
106
102
  end
107
103
 
108
104
  def read_all_streams_forward(after_event_id, count)
@@ -113,7 +109,7 @@ module RailsEventStoreActiveRecord
113
109
  end
114
110
 
115
111
  stream.preload(:event).order('id ASC').limit(count)
116
- .map(&method(:build_event_entity))
112
+ .map(&method(:build_event_instance))
117
113
  end
118
114
 
119
115
  def read_all_streams_backward(before_event_id, count)
@@ -124,24 +120,37 @@ module RailsEventStoreActiveRecord
124
120
  end
125
121
 
126
122
  stream.preload(:event).order('id DESC').limit(count)
127
- .map(&method(:build_event_entity))
123
+ .map(&method(:build_event_instance))
128
124
  end
129
125
 
130
126
  private
131
127
 
128
+ attr_reader :mapper
129
+
132
130
  def detect_pkey_index_violated(e)
133
131
  e.message.include?("for key 'PRIMARY'") || # MySQL
134
132
  e.message.include?("event_store_events_pkey") || # Postgresql
135
133
  e.message.include?("event_store_events.id") # Sqlite3
136
134
  end
137
135
 
138
- def build_event_entity(record)
139
- return nil unless record
140
- record.event.event_type.constantize.new(
141
- event_id: record.event.id,
142
- metadata: record.event.metadata,
143
- data: record.event.data
136
+ def build_event_record(event)
137
+ serialized_record = mapper.event_to_serialized_record(event)
138
+ Event.new(
139
+ id: serialized_record.event_id,
140
+ data: serialized_record.data,
141
+ metadata: serialized_record.metadata,
142
+ event_type: serialized_record.event_type
143
+ )
144
+ end
145
+
146
+ def build_event_instance(record)
147
+ serialized_record = RubyEventStore::SerializedRecord.new(
148
+ event_id: record.event.id,
149
+ metadata: record.event.metadata,
150
+ data: record.event.data,
151
+ event_type: record.event.event_type
144
152
  )
153
+ mapper.serialized_record_to_event(serialized_record)
145
154
  end
146
155
 
147
156
  def normalize_to_array(events)
@@ -1,6 +1,8 @@
1
1
  class CreateEventStoreEvents < ActiveRecord::Migration<%= migration_version %>
2
2
  def change
3
3
  postgres = ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
4
+ sqlite = ActiveRecord::Base.connection.adapter_name == "SQLite"
5
+ rails_42 = Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("5.0.0")
4
6
  enable_extension "pgcrypto" if postgres
5
7
  create_table(:event_store_events_in_streams, force: false) do |t|
6
8
  t.string :stream, null: false
@@ -31,6 +33,9 @@ class CreateEventStoreEvents < ActiveRecord::Migration<%= migration_version %>
31
33
  t.text :data, null: false
32
34
  t.datetime :created_at, null: false
33
35
  end
36
+ if sqlite && rails_42
37
+ add_index :event_store_events, :id, unique: true
38
+ end
34
39
  end
35
40
  add_index :event_store_events, :created_at
36
41
  end
@@ -13,6 +13,7 @@ class MigrateResSchemaV1ToV2 < ActiveRecord::Migration<%= migration_version %>
13
13
  postgres = ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
14
14
  mysql = ActiveRecord::Base.connection.adapter_name == "Mysql2"
15
15
  sqlite = ActiveRecord::Base.connection.adapter_name == "SQLite"
16
+ rails_42 = Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("5.0.0")
16
17
  enable_extension "pgcrypto" if postgres
17
18
  create_table(:event_store_events_in_streams, force: false) do |t|
18
19
  t.string :stream, null: false
@@ -68,6 +69,7 @@ class MigrateResSchemaV1ToV2 < ActiveRecord::Migration<%= migration_version %>
68
69
  t.text :data, null: false
69
70
  t.datetime :created_at, null: false
70
71
  end
72
+ add_index :event_store_events, :id, unique: true if rails_42
71
73
  add_index :event_store_events, :created_at
72
74
  execute <<-SQL
73
75
  INSERT INTO event_store_events(id, event_type, metadata, data, created_at)
@@ -81,7 +83,7 @@ class MigrateResSchemaV1ToV2 < ActiveRecord::Migration<%= migration_version %>
81
83
  end
82
84
 
83
85
  def preserve_positions?(stream_name)
84
- # http://railseventstore.org/docs/expected_version/
86
+ # https://railseventstore.org/docs/expected_version/
85
87
  #
86
88
  # return true if you use given stream for event sourcing
87
89
  # (especially with AggregateRoot gem)
@@ -94,4 +96,4 @@ class MigrateResSchemaV1ToV2 < ActiveRecord::Migration<%= migration_version %>
94
96
  raise NotImplementedError
95
97
  # false
96
98
  end
97
- end
99
+ end
@@ -11,6 +11,18 @@ module RailsEventStoreActiveRecord
11
11
 
12
12
  private_constant :LegacyEvent
13
13
 
14
+ def initialize
15
+ warn <<-MSG
16
+ `RailsEventStoreActiveRecord::LegacyEventRepository` has been deprecated.
17
+
18
+ Please migrate to new database schema and use `RailsEventStoreActiveRecord::EventRepository`
19
+ instead:
20
+
21
+ rails generate rails_event_store_active_record:v1_v2_migration
22
+
23
+ MSG
24
+ end
25
+
14
26
  def append_to_stream(events, stream_name, expected_version)
15
27
  validate_expected_version_is_not_auto(expected_version)
16
28
  validate_expected_version_is_any_for_global_stream(expected_version, stream_name)
@@ -1,3 +1,3 @@
1
1
  module RailsEventStoreActiveRecord
2
- VERSION = "0.19.0"
2
+ VERSION = "0.20.0"
3
3
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
 
13
13
  spec.summary = %q{Active Record events repository for Rails Event Store}
14
14
  spec.description = %q{Implementation of events repository based on Rails Active Record for Rails Event Store'}
15
- spec.homepage = 'https://github.com/arkency/rails_event_store_active_record'
15
+ spec.homepage = 'https://github.com/RailsEventStore/rails_event_store_active_record'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
18
  spec.bindir = 'exe'
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'fakefs', '~> 0.11.2'
31
31
  spec.add_development_dependency 'childprocess'
32
32
 
33
- spec.add_dependency 'ruby_event_store', '= 0.19.0'
33
+ spec.add_dependency 'ruby_event_store', '= 0.20.0'
34
34
  spec.add_dependency 'activesupport', '>= 3.0'
35
35
  spec.add_dependency 'activemodel', '>= 3.0'
36
- spec.add_dependency 'activerecord-import'
36
+ spec.add_dependency 'activerecord-import', '~> 0.21'
37
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_event_store_active_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-06 00:00:00.000000000 Z
11
+ date: 2017-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - '='
158
158
  - !ruby/object:Gem::Version
159
- version: 0.19.0
159
+ version: 0.20.0
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - '='
165
165
  - !ruby/object:Gem::Version
166
- version: 0.19.0
166
+ version: 0.20.0
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: activesupport
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -196,16 +196,16 @@ dependencies:
196
196
  name: activerecord-import
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ">="
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '0'
201
+ version: '0.21'
202
202
  type: :runtime
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - ">="
206
+ - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '0'
208
+ version: '0.21'
209
209
  description: Implementation of events repository based on Rails Active Record for
210
210
  Rails Event Store'
211
211
  email:
@@ -230,7 +230,7 @@ files:
230
230
  - lib/rails_event_store_active_record/legacy_event_repository.rb
231
231
  - lib/rails_event_store_active_record/version.rb
232
232
  - rails_event_store_active_record.gemspec
233
- homepage: https://github.com/arkency/rails_event_store_active_record
233
+ homepage: https://github.com/RailsEventStore/rails_event_store_active_record
234
234
  licenses:
235
235
  - MIT
236
236
  metadata: {}
@@ -250,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
250
250
  version: '0'
251
251
  requirements: []
252
252
  rubyforge_project:
253
- rubygems_version: 2.6.12
253
+ rubygems_version: 2.6.11
254
254
  signing_key:
255
255
  specification_version: 4
256
256
  summary: Active Record events repository for Rails Event Store