rails_event_store_active_record-legacy 0.28.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8ab119ac21718ff098874a0d1f3a9f9a6d3ebf8e31be590618c1c587326e585d
4
+ data.tar.gz: 814c5b6c278c0e59f396c334b434fdaa40a6fd9e4fb363a9b10ff1670a44a0aa
5
+ SHA512:
6
+ metadata.gz: e899e7e2985dca66426c63066ce719eeac26344e6536be463c948d1bb01fb9d9459af46d364e888a9c2153b56b676723cddbbbfce8ed88d9cd720a5305c44972
7
+ data.tar.gz: 2d12fb2152109cbb695c856674bb974a7e8bf0527e10bbb202236ebf807fdc7866142c5b0c243c84dde33c9e7c48e585fa8314dd233dc3e03e15fa6d7d1aafd4
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+ gemspec
3
+
4
+ gem 'ruby_event_store', path: '../ruby_event_store'
5
+
6
+ if v = ENV['RAILS_VERSION']
7
+ gem 'rails', v
8
+ end
data/Makefile ADDED
@@ -0,0 +1,57 @@
1
+ GEM_VERSION = $(shell cat ../RES_VERSION)
2
+ GEM_NAME = rails_event_store_active_record-legacy
3
+ REQUIRE = rails_event_store_active_record/legacy
4
+ IGNORE =
5
+ SUBJECT ?= RailsEventStoreActiveRecord::Legacy*
6
+ DATABASE_URL ?= sqlite3::memory:
7
+
8
+ install: ## Install gem dependencies
9
+ @echo "Installing gem dependencies"
10
+ @bundle install
11
+
12
+ remove-lock:
13
+ @echo "Removing resolved dependency versions"
14
+ -rm Gemfile.lock
15
+
16
+ reinstall: remove-lock install ## Removing resolved dependency versions
17
+
18
+
19
+ test: ## Run unit tests
20
+ @echo "Running unit tests"
21
+ @BUNDLE_GEMFILE=Gemfile bundle exec rspec
22
+
23
+ mutate: test ## Run mutation tests
24
+ @echo "Running mutation tests"
25
+ @BUNDLE_GEMFILE=Gemfile DATABASE_URL=$(DATABASE_URL) bundle exec mutant --include lib \
26
+ $(addprefix --require ,$(REQUIRE)) \
27
+ $(addprefix --ignore-subject ,$(IGNORE)) \
28
+ --use rspec "$(SUBJECT)"
29
+
30
+ mutate-fast: ## Run mutation tests with --fail-fast
31
+ @echo "Running mutation tests with --fail-fast"
32
+ @BUNDLE_GEMFILE=Gemfile DATABASE_URL=$(DATABASE_URL) bundle exec mutant --include lib \
33
+ $(addprefix --require ,$(REQUIRE)) \
34
+ $(addprefix --ignore-subject ,$(IGNORE)) \
35
+ --fail-fast \
36
+ --use rspec "$(SUBJECT)"
37
+
38
+ build:
39
+ @echo "Building gem package"
40
+ @gem build -V $(GEM_NAME).gemspec
41
+ @mkdir -p pkg/
42
+ @mv $(GEM_NAME)-$(GEM_VERSION).gem pkg/
43
+
44
+ push:
45
+ @echo "Pushing package to RubyGems"
46
+ @gem push -k dev_arkency pkg/$(GEM_NAME)-$(GEM_VERSION).gem
47
+
48
+ clean:
49
+ @echo "Removing previously built package"
50
+ -rm pkg/$(GEM_NAME)-$(GEM_VERSION).gem
51
+
52
+ help:
53
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
54
+
55
+ .PHONY: help
56
+ .DEFAULT_GOAL := help
57
+
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # RailsEventStoreActiveRecord::Legacy
2
+
3
+ An Active Record based implementation of events repository for [Rails Event Store](https://github.com/RailsEventStore/rails_event_store).
4
+
5
+ This is the legacy repository used in `rails_event_store` gem. Exists for limited backwards-compatibilty and should not be chosen for new projects.
@@ -0,0 +1,127 @@
1
+ require 'active_record'
2
+
3
+ module RailsEventStoreActiveRecord
4
+ module Legacy
5
+ class EventRepository
6
+ SERIALIZED_GLOBAL_STREAM_NAME = 'all'.freeze
7
+
8
+ class LegacyEvent < ::ActiveRecord::Base
9
+ self.primary_key = :id
10
+ self.table_name = 'event_store_events'
11
+ serialize :metadata
12
+ serialize :data
13
+ end
14
+
15
+ private_constant :LegacyEvent
16
+
17
+ def initialize
18
+ warn <<-MSG
19
+ `RailsEventStoreActiveRecord::LegacyEventRepository` has been deprecated.
20
+
21
+ Please migrate to new database schema and use `RailsEventStoreActiveRecord::EventRepository`
22
+ instead:
23
+
24
+ rails generate rails_event_store_active_record:v1_v2_migration
25
+
26
+ MSG
27
+ end
28
+
29
+ def append_to_stream(events, stream, expected_version)
30
+ validate_unsupported_expected_version(expected_version)
31
+ validate_stream_is_empty(stream) if expected_version.none?
32
+ validate_expected_version_number(expected_version, stream) if Integer === expected_version.version
33
+
34
+ normalize_to_array(events).each do |event|
35
+ data = event.to_h
36
+ data[:stream] = stream.name
37
+ LegacyEvent.create!(data)
38
+ end
39
+ self
40
+ rescue ActiveRecord::RecordNotUnique
41
+ raise RubyEventStore::EventDuplicatedInStream
42
+ end
43
+
44
+ def link_to_stream(_event_ids, _stream, _expected_version)
45
+ raise RubyEventStore::NotSupported
46
+ end
47
+
48
+ def delete_stream(stream)
49
+ LegacyEvent.where({stream: stream.name}).update_all(stream: SERIALIZED_GLOBAL_STREAM_NAME)
50
+ end
51
+
52
+ def has_event?(event_id)
53
+ LegacyEvent.exists?(event_id: event_id)
54
+ end
55
+
56
+ def last_stream_event(stream)
57
+ build_event_entity(LegacyEvent.where(stream: stream.name).last)
58
+ end
59
+
60
+ def read_event(event_id)
61
+ build_event_entity(LegacyEvent.find_by(event_id: event_id)) or raise RubyEventStore::EventNotFound.new(event_id)
62
+ end
63
+
64
+ def read(spec)
65
+ stream = LegacyEvent.order(id: order(spec.direction))
66
+ stream = stream.limit(spec.count) if spec.limit?
67
+ stream = stream.where(start_condition(spec)) unless spec.head?
68
+ stream = stream.where(stream: spec.stream_name) unless spec.global_stream?
69
+
70
+ stream.map(&method(:build_event_entity)).each
71
+ end
72
+
73
+ private
74
+
75
+ def start_condition(specification)
76
+ event_record =
77
+ LegacyEvent.find_by!(event_id: specification.start)
78
+ case specification.direction
79
+ when :forward
80
+ ['id > ?', event_record]
81
+ else
82
+ ['id < ?', event_record]
83
+ end
84
+ end
85
+
86
+ def order(direction)
87
+ {forward: 'ASC', backward: 'DESC'}.fetch(direction)
88
+ end
89
+
90
+
91
+ def normalize_to_array(events)
92
+ return events if events.is_a?(Enumerable)
93
+ [events]
94
+ end
95
+
96
+ def build_event_entity(record)
97
+ return nil unless record
98
+ RubyEventStore::SerializedRecord.new(
99
+ event_id: record.event_id,
100
+ metadata: record.metadata,
101
+ data: record.data,
102
+ event_type: record.event_type,
103
+ )
104
+ end
105
+
106
+ def last_stream_version(stream)
107
+ LegacyEvent.where(stream: stream.name).count - 1
108
+ end
109
+
110
+ def stream_non_empty?(stream)
111
+ LegacyEvent.where(stream: stream.name).exists?
112
+ end
113
+
114
+ def validate_stream_is_empty(stream)
115
+ raise RubyEventStore::WrongExpectedEventVersion if stream_non_empty?(stream)
116
+ end
117
+
118
+ def validate_expected_version_number(expected_version, stream)
119
+ raise RubyEventStore::WrongExpectedEventVersion unless last_stream_version(stream).equal?(expected_version.version)
120
+ end
121
+
122
+ def validate_unsupported_expected_version(expected_version)
123
+ raise RubyEventStore::InvalidExpectedVersion, ":auto mode is not supported by LegacyEventRepository" if expected_version.auto?
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,5 @@
1
+ module RailsEventStoreActiveRecord
2
+ module Legacy
3
+ VERSION = "0.28.0"
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ require "rails_event_store_active_record/legacy/version"
2
+ require "rails_event_store_active_record/legacy/event_repository"
3
+
4
+ module RailsEventStoreActiveRecord
5
+ LegacyEventRepository = Legacy::EventRepository
6
+ end
@@ -0,0 +1,43 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "rails_event_store_active_record/legacy/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rails_event_store_active_record-legacy"
8
+ spec.version = RailsEventStoreActiveRecord::Legacy::VERSION
9
+ spec.licenses = ['MIT']
10
+ spec.authors = ['Arkency']
11
+ spec.email = ['dev@arkency.com']
12
+
13
+ spec.summary = %q{Active Record events repository for Rails Event Store}
14
+ spec.description = %q{Implementation of events repository based on Rails Active Record for Rails Event Store. Exists for limited backwards-compatibilty and should not be chosen for new projects.}
15
+
16
+ spec.homepage = 'https://railseventstore.org'
17
+ spec.metadata = {
18
+ "homepage_uri" => "https://railseventstore.org/",
19
+ "changelog_uri" => "https://github.com/RailsEventStore/rails_event_store/releases",
20
+ "source_code_uri" => "https://github.com/RailsEventStore/rails_event_store",
21
+ "bug_tracker_uri" => "https://github.com/RailsEventStore/rails_event_store/issues",
22
+ }
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
25
+ f.match(%r{^(test|spec|features)/})
26
+ end
27
+ spec.bindir = "exe"
28
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
+ spec.require_paths = ["lib"]
30
+
31
+ spec.add_development_dependency 'bundler', '~> 1.15'
32
+ spec.add_development_dependency 'rake', '~> 10.0'
33
+ spec.add_development_dependency 'rspec', '~> 3.6'
34
+ spec.add_development_dependency 'rails', '~> 5.2'
35
+ spec.add_development_dependency 'sqlite3', '1.3.13'
36
+ spec.add_development_dependency 'pg', '0.21'
37
+ spec.add_development_dependency 'mysql2', '0.4.10'
38
+ spec.add_development_dependency 'mutant-rspec', '~> 0.8.14'
39
+
40
+ spec.add_dependency 'ruby_event_store', '= 0.28.0'
41
+ spec.add_dependency 'activesupport', '>= 3.0'
42
+ spec.add_dependency 'activemodel', '>= 3.0'
43
+ end
metadata ADDED
@@ -0,0 +1,211 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_event_store_active_record-legacy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.28.0
5
+ platform: ruby
6
+ authors:
7
+ - Arkency
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-05-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.2'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.13
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.3.13
83
+ - !ruby/object:Gem::Dependency
84
+ name: pg
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: '0.21'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: '0.21'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mysql2
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.4.10
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.4.10
111
+ - !ruby/object:Gem::Dependency
112
+ name: mutant-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.8.14
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.8.14
125
+ - !ruby/object:Gem::Dependency
126
+ name: ruby_event_store
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 0.28.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 0.28.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: activesupport
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '3.0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '3.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: activemodel
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '3.0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '3.0'
167
+ description: Implementation of events repository based on Rails Active Record for
168
+ Rails Event Store. Exists for limited backwards-compatibilty and should not be chosen
169
+ for new projects.
170
+ email:
171
+ - dev@arkency.com
172
+ executables: []
173
+ extensions: []
174
+ extra_rdoc_files: []
175
+ files:
176
+ - Gemfile
177
+ - Makefile
178
+ - README.md
179
+ - lib/rails_event_store_active_record/legacy.rb
180
+ - lib/rails_event_store_active_record/legacy/event_repository.rb
181
+ - lib/rails_event_store_active_record/legacy/version.rb
182
+ - rails_event_store_active_record-legacy.gemspec
183
+ homepage: https://railseventstore.org
184
+ licenses:
185
+ - MIT
186
+ metadata:
187
+ homepage_uri: https://railseventstore.org/
188
+ changelog_uri: https://github.com/RailsEventStore/rails_event_store/releases
189
+ source_code_uri: https://github.com/RailsEventStore/rails_event_store
190
+ bug_tracker_uri: https://github.com/RailsEventStore/rails_event_store/issues
191
+ post_install_message:
192
+ rdoc_options: []
193
+ require_paths:
194
+ - lib
195
+ required_ruby_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ requirements: []
206
+ rubyforge_project:
207
+ rubygems_version: 2.7.6
208
+ signing_key:
209
+ specification_version: 4
210
+ summary: Active Record events repository for Rails Event Store
211
+ test_files: []