rails_event_store_active_record 0.34.0 → 0.35.0

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: 7ecd9126ba4ac3a8c749122e76290b605152f25c177d12e06aa050910077bdfe
4
- data.tar.gz: ed776c89a46e9a401ba28fcebfd584fd835bd06b0a1f72846b124771a2f027d6
3
+ metadata.gz: 0543625e5144d53c19de64b10aded2fa8a0c5583d68d409a0fe0e46b786e2a9b
4
+ data.tar.gz: dcbe74fad2d9995ae8de47416c1db4c798919d0ef435a7db56a90b7b4969ac3e
5
5
  SHA512:
6
- metadata.gz: df85cbbcbeab5492145ae68dc031481058b5f2d0fa56d422f629d95808132aa5baf70d9081c5a8909ba92b7935d16155bc9fdfae81e51361559b23a821a38cb3
7
- data.tar.gz: 7ded0302fa417f62365d91e6ad275a5003e77c372f813c35f23bf6979004831210b691518a2e18d2c5c0de8c6b97a6322da215c966be4df229bf20458af183c1
6
+ metadata.gz: 913a22954ba77274a6332302d079844f604cc8e02829bcb42ed54f5e475841cebd96f33a85a9a80f648d729f9ee215b3e31b5cba6aad903a84438c3505f5aadd
7
+ data.tar.gz: a42226376f9ecd60891ec6069bddabe77e4ad8c50311f210b211e14cac6881c5f165e27423ff5c33e105044dbdcc63c717e1004a7843228e82d9a26900178ecb
data/Gemfile CHANGED
@@ -1,8 +1,12 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
- gem 'ruby_event_store', path: '../ruby_event_store'
4
+ eval_gemfile File.expand_path('../lib/Gemfile.shared', __dir__)
5
5
 
6
- if v = ENV['RAILS_VERSION']
7
- gem 'rails', v
8
- end
6
+ gem 'ruby_event_store', path: '../ruby_event_store'
7
+ gem 'sqlite3', '1.3.13'
8
+ gem 'pg', '0.21'
9
+ gem 'mysql2', '0.4.10'
10
+ gem 'fakefs', '~> 0.11.2'
11
+ gem 'childprocess'
12
+ gem 'rails', ENV['RAILS_VERSION']
data/Makefile CHANGED
@@ -7,54 +7,20 @@ IGNORE = RailsEventStoreActiveRecord::IndexViolationDetector\#detect \
7
7
  SUBJECT ?= RailsEventStoreActiveRecord*
8
8
  DATABASE_URL ?= sqlite3::memory:
9
9
 
10
- install: ## Install gem dependencies
11
- @echo "Installing gem dependencies"
12
- @bundle install
13
- @BUNDLE_GEMFILE=../lib/Gemfile.0_33_0 bundle install
10
+ include ../lib/install.mk
11
+ include ../lib/test.mk
12
+ include ../lib/mutant.mk
13
+ include ../lib/gem.mk
14
+ include ../lib/help.mk
14
15
 
15
- remove-lock:
16
- @echo "Removing resolved dependency versions"
17
- -rm Gemfile.lock
18
- -rm ../lib/Gemfile.0_33_0.lock
19
-
20
- reinstall: remove-lock install ## Removing resolved dependency versions
21
-
22
- test: ## Run unit tests
23
- @echo "Running unit tests"
24
- @BUNDLE_GEMFILE=Gemfile bundle exec rspec
25
-
26
- mutate: test ## Run mutation tests
27
- @echo "Running mutation tests"
28
- @MUTATING=true BUNDLE_GEMFILE=Gemfile DATABASE_URL=$(DATABASE_URL) bundle exec mutant --include lib \
29
- $(addprefix --require ,$(REQUIRE)) \
30
- $(addprefix --ignore-subject ,$(IGNORE)) \
31
- --use rspec "$(SUBJECT)"
32
-
33
- mutate-fast: ## Run mutation tests with --fail-fast
34
- @echo "Running mutation tests with --fail-fast"
35
- @MUTATING=true BUNDLE_GEMFILE=Gemfile DATABASE_URL=$(DATABASE_URL) bundle exec mutant --include lib \
36
- $(addprefix --require ,$(REQUIRE)) \
37
- $(addprefix --ignore-subject ,$(IGNORE)) \
38
- --fail-fast \
39
- --use rspec "$(SUBJECT)"
16
+ install: install-gemfiles
40
17
 
41
- build:
42
- @echo "Building gem package"
43
- @gem build -V $(GEM_NAME).gemspec
44
- @mkdir -p pkg/
45
- @mv $(GEM_NAME)-$(GEM_VERSION).gem pkg/
18
+ remove-lock: remove-lockfiles
46
19
 
47
- push:
48
- @echo "Pushing package to RubyGems"
49
- @gem push -k dev_arkency pkg/$(GEM_NAME)-$(GEM_VERSION).gem
50
-
51
- clean:
52
- @echo "Removing previously built package"
53
- -rm pkg/$(GEM_NAME)-$(GEM_VERSION).gem
54
-
55
- help:
56
- @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
57
-
58
- .PHONY: help
59
- .DEFAULT_GOAL := help
20
+ install-gemfiles:
21
+ @BUNDLE_GEMFILE=../lib/Gemfile.0_33_0 bundle check || BUNDLE_GEMFILE=../lib/Gemfile.0_33_0 bundle install
22
+ @BUNDLE_GEMFILE=../lib/Gemfile.0_34_0 bundle check || BUNDLE_GEMFILE=../lib/Gemfile.0_34_0 bundle install
60
23
 
24
+ remove-lockfiles:
25
+ -rm ../lib/Gemfile.0_33_0.lock
26
+ -rm ../lib/Gemfile.0_34_0.lock
@@ -1,6 +1,7 @@
1
1
  require 'rails_event_store_active_record/generators/migration_generator'
2
2
  require 'rails_event_store_active_record/generators/index_by_event_type_generator'
3
3
  require 'rails_event_store_active_record/generators/limit_for_event_id_generator'
4
+ require 'rails_event_store_active_record/generators/binary_data_and_metadata_generator'
4
5
  require 'rails_event_store_active_record/event'
5
6
  require 'rails_event_store_active_record/event_repository'
6
7
  require 'rails_event_store_active_record/event_repository_reader'
@@ -42,6 +42,10 @@ module RailsEventStoreActiveRecord
42
42
  @repo_reader.read(specification)
43
43
  end
44
44
 
45
+ def count(specification)
46
+ @repo_reader.count(specification)
47
+ end
48
+
45
49
  def update_messages(messages)
46
50
  hashes = messages.map(&:to_h)
47
51
  hashes.each{|h| h[:id] = h.delete(:event_id) }
@@ -13,13 +13,7 @@ module RailsEventStoreActiveRecord
13
13
  def read(spec)
14
14
  raise RubyEventStore::ReservedInternalName if spec.stream.name.eql?(EventRepository::SERIALIZED_GLOBAL_STREAM_NAME)
15
15
 
16
- stream = EventInStream.preload(:event).where(stream: normalize_stream_name(spec))
17
- stream = stream.where(event_id: spec.with_ids) if spec.with_ids?
18
- stream = stream.joins(:event).where(event_store_events: {event_type: spec.with_types}) if spec.with_types?
19
- stream = stream.order(position: order(spec)) unless spec.stream.global?
20
- stream = stream.limit(spec.limit) if spec.limit?
21
- stream = stream.where(start_condition(spec)) unless spec.head?
22
- stream = stream.order(id: order(spec))
16
+ stream = read_scope(spec)
23
17
 
24
18
  if spec.batched?
25
19
  batch_reader = ->(offset, limit) { stream.offset(offset).limit(limit).map(&method(:build_event_instance)) }
@@ -35,8 +29,25 @@ module RailsEventStoreActiveRecord
35
29
  end
36
30
  end
37
31
 
32
+ def count(spec)
33
+ raise RubyEventStore::ReservedInternalName if spec.stream.name.eql?(EventRepository::SERIALIZED_GLOBAL_STREAM_NAME)
34
+
35
+ read_scope(spec).count
36
+ end
37
+
38
38
  private
39
39
 
40
+ def read_scope(spec)
41
+ stream = EventInStream.preload(:event).where(stream: normalize_stream_name(spec))
42
+ stream = stream.where(event_id: spec.with_ids) if spec.with_ids?
43
+ stream = stream.joins(:event).where(event_store_events: {event_type: spec.with_types}) if spec.with_types?
44
+ stream = stream.order(position: order(spec)) unless spec.stream.global?
45
+ stream = stream.limit(spec.limit) if spec.limit?
46
+ stream = stream.where(start_condition(spec)) unless spec.head?
47
+ stream = stream.order(id: order(spec))
48
+ stream
49
+ end
50
+
40
51
  def normalize_stream_name(specification)
41
52
  specification.stream.global? ? EventRepository::SERIALIZED_GLOBAL_STREAM_NAME : specification.stream.name
42
53
  end
@@ -0,0 +1,29 @@
1
+ begin
2
+ require 'rails/generators'
3
+ rescue LoadError
4
+ end
5
+
6
+ module RailsEventStoreActiveRecord
7
+ class BinaryDataAndMetadataGenerator < Rails::Generators::Base
8
+ source_root File.expand_path(File.join(File.dirname(__FILE__), '../generators/templates'))
9
+
10
+ def create_migration
11
+ template "binary_data_and_metadata_template.rb", "db/migrate/#{timestamp}_binary_data_and_metadata.rb"
12
+ end
13
+
14
+ private
15
+
16
+ def rails_version
17
+ Rails::VERSION::STRING
18
+ end
19
+
20
+ def migration_version
21
+ return nil if Gem::Version.new(rails_version) < Gem::Version.new("5.0.0")
22
+ "[4.2]"
23
+ end
24
+
25
+ def timestamp
26
+ Time.now.strftime("%Y%m%d%H%M%S")
27
+ end
28
+ end
29
+ end if defined?(Rails::Generators::Base)
@@ -0,0 +1,33 @@
1
+ class BinaryDataAndMetadata < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ rails_42 = Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("5.0.0")
4
+
5
+ case ActiveRecord::Base.connection.adapter_name
6
+ when "SQLite"
7
+ rename_table :event_store_events, :old_event_store_events
8
+ create_table(:event_store_events, id: false, force: false) do |t|
9
+ t.string :id, limit: 36, primary_key: true, null: false
10
+ t.string :event_type, null: false
11
+ t.binary :metadata
12
+ t.binary :data, null: false
13
+ t.datetime :created_at, null: false
14
+ end
15
+ add_index :event_store_events, :id, unique: true if rails_42
16
+ add_index :event_store_events, :created_at
17
+ add_index :event_store_events, :event_type
18
+ execute <<-SQL
19
+ INSERT INTO event_store_events(id, event_type, metadata, data, created_at)
20
+ SELECT id, event_type, metadata, data, created_at FROM old_event_store_events;
21
+ SQL
22
+ drop_table :old_event_store_events
23
+ when "PostgreSQL"
24
+ execute <<-SQL
25
+ ALTER TABLE event_store_events ALTER COLUMN data TYPE bytea USING convert_to(data, 'UTF8');
26
+ ALTER TABLE event_store_events ALTER COLUMN metadata TYPE bytea USING convert_to(metadata, 'UTF8');
27
+ SQL
28
+ else
29
+ change_column :event_store_events, :data, :binary
30
+ change_column :event_store_events, :metadata, :binary
31
+ end
32
+ end
33
+ end
@@ -21,16 +21,16 @@ class CreateEventStoreEvents < ActiveRecord::Migration<%= migration_version %>
21
21
  if postgres
22
22
  create_table(:event_store_events, id: :uuid, default: 'gen_random_uuid()', force: false) do |t|
23
23
  t.string :event_type, null: false
24
- t.text :metadata
25
- t.text :data, null: false
24
+ t.binary :metadata
25
+ t.binary :data, null: false
26
26
  t.datetime :created_at, null: false
27
27
  end
28
28
  else
29
29
  create_table(:event_store_events, id: false, force: false) do |t|
30
30
  t.string :id, limit: 36, primary_key: true, null: false
31
31
  t.string :event_type, null: false
32
- t.text :metadata
33
- t.text :data, null: false
32
+ t.binary :metadata
33
+ t.binary :data, null: false
34
34
  t.datetime :created_at, null: false
35
35
  end
36
36
  if sqlite && rails_42
@@ -1,3 +1,3 @@
1
1
  module RailsEventStoreActiveRecord
2
- VERSION = "0.34.0"
2
+ VERSION = "0.35.0"
3
3
  end
@@ -25,19 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ['lib']
27
27
 
28
- spec.add_development_dependency 'bundler', '~> 1.15'
29
- spec.add_development_dependency 'rake', '~> 10.0'
30
- spec.add_development_dependency 'rspec', '~> 3.6'
31
- spec.add_development_dependency 'rails', '~> 5.2'
32
- spec.add_development_dependency 'sqlite3', '1.3.13'
33
- spec.add_development_dependency 'pg', '0.21'
34
- spec.add_development_dependency 'mysql2', '0.4.10'
35
- spec.add_development_dependency 'mutant-rspec', '= 0.8.17'
36
- spec.add_development_dependency 'fakefs', '~> 0.11.2'
37
- spec.add_development_dependency 'childprocess'
38
- spec.add_development_dependency 'google-protobuf', '~> 3.5.1.2'
39
-
40
- spec.add_dependency 'ruby_event_store', '= 0.34.0'
28
+ spec.add_dependency 'ruby_event_store', '= 0.35.0'
41
29
  spec.add_dependency 'activesupport', '>= 3.0'
42
30
  spec.add_dependency 'activemodel', '>= 3.0'
43
31
  spec.add_dependency 'activerecord-import', '~> 0.21'
metadata CHANGED
@@ -1,183 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_event_store_active_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.34.0
4
+ version: 0.35.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-23 00:00:00.000000000 Z
11
+ date: 2018-12-07 00:00:00.000000000 Z
12
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.17
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.17
125
- - !ruby/object:Gem::Dependency
126
- name: fakefs
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 0.11.2
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 0.11.2
139
- - !ruby/object:Gem::Dependency
140
- name: childprocess
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: google-protobuf
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: 3.5.1.2
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: 3.5.1.2
167
13
  - !ruby/object:Gem::Dependency
168
14
  name: ruby_event_store
169
15
  requirement: !ruby/object:Gem::Requirement
170
16
  requirements:
171
17
  - - '='
172
18
  - !ruby/object:Gem::Version
173
- version: 0.34.0
19
+ version: 0.35.0
174
20
  type: :runtime
175
21
  prerelease: false
176
22
  version_requirements: !ruby/object:Gem::Requirement
177
23
  requirements:
178
24
  - - '='
179
25
  - !ruby/object:Gem::Version
180
- version: 0.34.0
26
+ version: 0.35.0
181
27
  - !ruby/object:Gem::Dependency
182
28
  name: activesupport
183
29
  requirement: !ruby/object:Gem::Requirement
@@ -239,9 +85,11 @@ files:
239
85
  - lib/rails_event_store_active_record/event.rb
240
86
  - lib/rails_event_store_active_record/event_repository.rb
241
87
  - lib/rails_event_store_active_record/event_repository_reader.rb
88
+ - lib/rails_event_store_active_record/generators/binary_data_and_metadata_generator.rb
242
89
  - lib/rails_event_store_active_record/generators/index_by_event_type_generator.rb
243
90
  - lib/rails_event_store_active_record/generators/limit_for_event_id_generator.rb
244
91
  - lib/rails_event_store_active_record/generators/migration_generator.rb
92
+ - lib/rails_event_store_active_record/generators/templates/binary_data_and_metadata_template.rb
245
93
  - lib/rails_event_store_active_record/generators/templates/create_event_store_events_template.rb
246
94
  - lib/rails_event_store_active_record/generators/templates/index_by_event_type_template.rb
247
95
  - lib/rails_event_store_active_record/generators/templates/limit_for_event_id_template.rb