ruby_event_store 0.30.0 → 1.3.1

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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -1
  3. data/Makefile +15 -62
  4. data/lib/ruby_event_store/batch_enumerator.rb +15 -5
  5. data/lib/ruby_event_store/broker.rb +45 -0
  6. data/lib/ruby_event_store/client.rb +220 -130
  7. data/lib/ruby_event_store/composed_dispatcher.rb +24 -0
  8. data/lib/ruby_event_store/constants.rb +2 -0
  9. data/lib/ruby_event_store/correlated_commands.rb +42 -0
  10. data/lib/ruby_event_store/dispatcher.rb +20 -0
  11. data/lib/ruby_event_store/errors.rb +16 -16
  12. data/lib/ruby_event_store/event.rb +70 -14
  13. data/lib/ruby_event_store/expected_version.rb +2 -0
  14. data/lib/ruby_event_store/immediate_async_dispatcher.rb +17 -0
  15. data/lib/ruby_event_store/in_memory_repository.rb +45 -17
  16. data/lib/ruby_event_store/instrumented_dispatcher.rb +23 -0
  17. data/lib/ruby_event_store/instrumented_repository.rb +63 -0
  18. data/lib/ruby_event_store/link_by_metadata.rb +57 -0
  19. data/lib/ruby_event_store/mappers/default.rb +10 -26
  20. data/lib/ruby_event_store/mappers/encryption_key.rb +74 -0
  21. data/lib/ruby_event_store/mappers/encryption_mapper.rb +16 -0
  22. data/lib/ruby_event_store/mappers/forgotten_data.rb +30 -0
  23. data/lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb +34 -0
  24. data/lib/ruby_event_store/mappers/instrumented_mapper.rb +28 -0
  25. data/lib/ruby_event_store/mappers/json_mapper.rb +16 -0
  26. data/lib/ruby_event_store/mappers/null_mapper.rb +5 -8
  27. data/lib/ruby_event_store/mappers/pipeline.rb +31 -0
  28. data/lib/ruby_event_store/mappers/pipeline_mapper.rb +22 -0
  29. data/lib/ruby_event_store/mappers/protobuf.rb +13 -67
  30. data/lib/ruby_event_store/mappers/transformation/domain_event.rb +26 -0
  31. data/lib/ruby_event_store/mappers/transformation/encryption.rb +128 -0
  32. data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +24 -0
  33. data/lib/ruby_event_store/mappers/transformation/item.rb +56 -0
  34. data/lib/ruby_event_store/mappers/transformation/proto_event.rb +17 -0
  35. data/lib/ruby_event_store/mappers/transformation/protobuf_encoder.rb +30 -0
  36. data/lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb +30 -0
  37. data/lib/ruby_event_store/mappers/transformation/serialization.rb +34 -0
  38. data/lib/ruby_event_store/mappers/transformation/serialized_record.rb +27 -0
  39. data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +24 -0
  40. data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +24 -0
  41. data/lib/ruby_event_store/metadata.rb +4 -2
  42. data/lib/ruby_event_store/projection.rb +34 -12
  43. data/lib/ruby_event_store/serialized_record.rb +3 -1
  44. data/lib/ruby_event_store/spec/broker_lint.rb +92 -0
  45. data/lib/ruby_event_store/spec/dispatcher_lint.rb +4 -36
  46. data/lib/ruby_event_store/spec/event_lint.rb +71 -0
  47. data/lib/ruby_event_store/spec/event_repository_lint.rb +1092 -962
  48. data/lib/ruby_event_store/spec/mapper_lint.rb +17 -0
  49. data/lib/ruby_event_store/spec/scheduler_lint.rb +9 -0
  50. data/lib/ruby_event_store/spec/subscriptions_lint.rb +111 -0
  51. data/lib/ruby_event_store/specification.rb +201 -56
  52. data/lib/ruby_event_store/specification_reader.rb +43 -0
  53. data/lib/ruby_event_store/specification_result.rb +212 -0
  54. data/lib/ruby_event_store/stream.rb +2 -0
  55. data/lib/ruby_event_store/subscriptions.rb +110 -0
  56. data/lib/ruby_event_store/transform_keys.rb +31 -0
  57. data/lib/ruby_event_store/version.rb +3 -1
  58. data/lib/ruby_event_store.rb +34 -4
  59. data/ruby_event_store.gemspec +1 -10
  60. metadata +47 -126
  61. data/exe/res-deprecated-read-api-migrator +0 -19
  62. data/lib/ruby_event_store/deprecated_read_api_rewriter.rb +0 -67
  63. data/lib/ruby_event_store/deprecated_read_api_runner.rb +0 -64
  64. data/lib/ruby_event_store/deprecations.rb +0 -7
  65. data/lib/ruby_event_store/pub_sub/broker.rb +0 -73
  66. data/lib/ruby_event_store/pub_sub/dispatcher.rb +0 -25
  67. data/lib/ruby_event_store/spec/event_broker_lint.rb +0 -211
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'concurrent'
4
+
5
+ module RubyEventStore
6
+ class Subscriptions
7
+ def initialize
8
+ @local = LocalSubscriptions.new
9
+ @global = GlobalSubscriptions.new
10
+ @thread = ThreadSubscriptions.new
11
+ end
12
+
13
+ def add_subscription(subscriber, event_types)
14
+ local.add(subscriber, event_types)
15
+ end
16
+
17
+ def add_global_subscription(subscriber)
18
+ global.add(subscriber)
19
+ end
20
+
21
+ def add_thread_subscription(subscriber, event_types)
22
+ thread.local.add(subscriber, event_types)
23
+ end
24
+
25
+ def add_thread_global_subscription(subscriber)
26
+ thread.global.add(subscriber)
27
+ end
28
+
29
+ def all_for(event_type)
30
+ [local, global, thread].map{|r| r.all_for(event_type)}.reduce(&:+)
31
+ end
32
+
33
+ private
34
+ attr_reader :local, :global, :thread
35
+
36
+ class ThreadSubscriptions
37
+ def initialize
38
+ @local = ThreadLocalSubscriptions.new
39
+ @global = ThreadGlobalSubscriptions.new
40
+ end
41
+ attr_reader :local, :global
42
+
43
+ def all_for(event_type)
44
+ [global, local].map{|r| r.all_for(event_type)}.reduce(&:+)
45
+ end
46
+ end
47
+
48
+ class LocalSubscriptions
49
+ def initialize
50
+ @subscriptions = Hash.new {|hsh, key| hsh[key] = [] }
51
+ end
52
+
53
+ def add(subscription, event_types)
54
+ event_types.each{ |type| @subscriptions[type.to_s] << subscription }
55
+ ->() {event_types.each{ |type| @subscriptions.fetch(type.to_s).delete(subscription) } }
56
+ end
57
+
58
+ def all_for(event_type)
59
+ @subscriptions[event_type]
60
+ end
61
+ end
62
+
63
+ class GlobalSubscriptions
64
+ def initialize
65
+ @subscriptions = []
66
+ end
67
+
68
+ def add(subscription)
69
+ @subscriptions << subscription
70
+ ->() { @subscriptions.delete(subscription) }
71
+ end
72
+
73
+ def all_for(_event_type)
74
+ @subscriptions
75
+ end
76
+ end
77
+
78
+ class ThreadLocalSubscriptions
79
+ def initialize
80
+ @subscriptions = Concurrent::ThreadLocalVar.new do
81
+ Hash.new {|hsh, key| hsh[key] = [] }
82
+ end
83
+ end
84
+
85
+ def add(subscription, event_types)
86
+ event_types.each{ |type| @subscriptions.value[type.to_s] << subscription }
87
+ ->() {event_types.each{ |type| @subscriptions.value.fetch(type.to_s).delete(subscription) } }
88
+ end
89
+
90
+ def all_for(event_type)
91
+ @subscriptions.value[event_type]
92
+ end
93
+ end
94
+
95
+ class ThreadGlobalSubscriptions
96
+ def initialize
97
+ @subscriptions = Concurrent::ThreadLocalVar.new([])
98
+ end
99
+
100
+ def add(subscription)
101
+ @subscriptions.value += [subscription]
102
+ ->() { @subscriptions.value -= [subscription] }
103
+ end
104
+
105
+ def all_for(_event_type)
106
+ @subscriptions.value
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ class TransformKeys
5
+ class << self
6
+ def stringify(data)
7
+ transform(data) {|k| k.to_s}
8
+ end
9
+
10
+ def symbolize(data)
11
+ transform(data) {|k| k.to_sym}
12
+ end
13
+
14
+ private
15
+
16
+ def transform(data, &block)
17
+ data.each_with_object({}) do |(k, v), h|
18
+ h[yield(k)] =
19
+ case v
20
+ when Hash
21
+ transform(v, &block)
22
+ when Array
23
+ v.map{|i| Hash === i ? transform(i, &block) : i}
24
+ else
25
+ v
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyEventStore
2
- VERSION = "0.30.0"
4
+ VERSION = "1.3.1"
3
5
  end
@@ -1,5 +1,8 @@
1
- require 'ruby_event_store/pub_sub/dispatcher'
2
- require 'ruby_event_store/pub_sub/broker'
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_event_store/dispatcher'
4
+ require 'ruby_event_store/subscriptions'
5
+ require 'ruby_event_store/broker'
3
6
  require 'ruby_event_store/in_memory_repository'
4
7
  require 'ruby_event_store/projection'
5
8
  require 'ruby_event_store/errors'
@@ -7,13 +10,40 @@ require 'ruby_event_store/constants'
7
10
  require 'ruby_event_store/client'
8
11
  require 'ruby_event_store/metadata'
9
12
  require 'ruby_event_store/specification'
13
+ require 'ruby_event_store/specification_result'
14
+ require 'ruby_event_store/specification_reader'
10
15
  require 'ruby_event_store/event'
11
16
  require 'ruby_event_store/stream'
12
17
  require 'ruby_event_store/expected_version'
13
- require 'ruby_event_store/deprecations'
14
18
  require 'ruby_event_store/serialized_record'
19
+ require 'ruby_event_store/transform_keys'
20
+ require 'ruby_event_store/mappers/encryption_key'
21
+ require 'ruby_event_store/mappers/in_memory_encryption_key_repository'
22
+ require 'ruby_event_store/mappers/transformation/domain_event'
23
+ require 'ruby_event_store/mappers/transformation/encryption'
24
+ require 'ruby_event_store/mappers/transformation/event_class_remapper'
25
+ require 'ruby_event_store/mappers/transformation/item'
26
+ require 'ruby_event_store/mappers/transformation/proto_event'
27
+ require 'ruby_event_store/mappers/transformation/protobuf_encoder'
28
+ require 'ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata'
29
+ require 'ruby_event_store/mappers/transformation/serialization'
30
+ require 'ruby_event_store/mappers/transformation/serialized_record'
31
+ require 'ruby_event_store/mappers/transformation/stringify_metadata_keys'
32
+ require 'ruby_event_store/mappers/transformation/symbolize_metadata_keys'
33
+ require 'ruby_event_store/mappers/pipeline'
34
+ require 'ruby_event_store/mappers/pipeline_mapper'
15
35
  require 'ruby_event_store/mappers/default'
16
- require 'ruby_event_store/mappers/protobuf'
36
+ require 'ruby_event_store/mappers/forgotten_data'
37
+ require 'ruby_event_store/mappers/encryption_mapper'
38
+ require 'ruby_event_store/mappers/instrumented_mapper'
39
+ require 'ruby_event_store/mappers/json_mapper'
17
40
  require 'ruby_event_store/mappers/null_mapper'
41
+ require 'ruby_event_store/mappers/protobuf'
18
42
  require 'ruby_event_store/batch_enumerator'
43
+ require 'ruby_event_store/correlated_commands'
44
+ require 'ruby_event_store/link_by_metadata'
45
+ require 'ruby_event_store/immediate_async_dispatcher'
46
+ require 'ruby_event_store/composed_dispatcher'
19
47
  require 'ruby_event_store/version'
48
+ require 'ruby_event_store/instrumented_repository'
49
+ require 'ruby_event_store/instrumented_dispatcher'
@@ -25,14 +25,5 @@ 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
-
29
- spec.add_dependency 'concurrent-ruby', '~> 1.0'
30
- spec.add_development_dependency 'bundler', '~> 1.15'
31
- spec.add_development_dependency 'rake', '~> 10.0'
32
- spec.add_development_dependency 'rspec', '~> 3.6'
33
- spec.add_development_dependency 'mutant-rspec', '~> 0.8.14'
34
- spec.add_development_dependency 'parser'
35
- spec.add_development_dependency 'unparser'
36
- spec.add_development_dependency 'astrolabe'
37
- spec.add_development_dependency 'google-protobuf', '~> 3.5.1.2'
28
+ spec.add_dependency 'concurrent-ruby', '~> 1.0', '>= 1.1.6'
38
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
11
+ date: 2021-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.1.6
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,123 +27,13 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.15'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.15'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '10.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '10.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.6'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.6'
69
- - !ruby/object:Gem::Dependency
70
- name: mutant-rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.8.14
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.8.14
83
- - !ruby/object:Gem::Dependency
84
- name: parser
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: unparser
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
30
  - - ">="
109
31
  - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: astrolabe
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: google-protobuf
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 3.5.1.2
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 3.5.1.2
32
+ version: 1.1.6
139
33
  description: Implementation of Event Store in Ruby
140
34
  email:
141
35
  - dev@arkency.com
142
- executables:
143
- - res-deprecated-read-api-migrator
36
+ executables: []
144
37
  extensions: []
145
38
  extra_rdoc_files: []
146
39
  files:
@@ -148,31 +41,60 @@ files:
148
41
  - Gemfile
149
42
  - Makefile
150
43
  - README.md
151
- - exe/res-deprecated-read-api-migrator
152
44
  - lib/ruby_event_store.rb
153
45
  - lib/ruby_event_store/batch_enumerator.rb
46
+ - lib/ruby_event_store/broker.rb
154
47
  - lib/ruby_event_store/client.rb
48
+ - lib/ruby_event_store/composed_dispatcher.rb
155
49
  - lib/ruby_event_store/constants.rb
156
- - lib/ruby_event_store/deprecated_read_api_rewriter.rb
157
- - lib/ruby_event_store/deprecated_read_api_runner.rb
158
- - lib/ruby_event_store/deprecations.rb
50
+ - lib/ruby_event_store/correlated_commands.rb
51
+ - lib/ruby_event_store/dispatcher.rb
159
52
  - lib/ruby_event_store/errors.rb
160
53
  - lib/ruby_event_store/event.rb
161
54
  - lib/ruby_event_store/expected_version.rb
55
+ - lib/ruby_event_store/immediate_async_dispatcher.rb
162
56
  - lib/ruby_event_store/in_memory_repository.rb
57
+ - lib/ruby_event_store/instrumented_dispatcher.rb
58
+ - lib/ruby_event_store/instrumented_repository.rb
59
+ - lib/ruby_event_store/link_by_metadata.rb
163
60
  - lib/ruby_event_store/mappers/default.rb
61
+ - lib/ruby_event_store/mappers/encryption_key.rb
62
+ - lib/ruby_event_store/mappers/encryption_mapper.rb
63
+ - lib/ruby_event_store/mappers/forgotten_data.rb
64
+ - lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb
65
+ - lib/ruby_event_store/mappers/instrumented_mapper.rb
66
+ - lib/ruby_event_store/mappers/json_mapper.rb
164
67
  - lib/ruby_event_store/mappers/null_mapper.rb
68
+ - lib/ruby_event_store/mappers/pipeline.rb
69
+ - lib/ruby_event_store/mappers/pipeline_mapper.rb
165
70
  - lib/ruby_event_store/mappers/protobuf.rb
71
+ - lib/ruby_event_store/mappers/transformation/domain_event.rb
72
+ - lib/ruby_event_store/mappers/transformation/encryption.rb
73
+ - lib/ruby_event_store/mappers/transformation/event_class_remapper.rb
74
+ - lib/ruby_event_store/mappers/transformation/item.rb
75
+ - lib/ruby_event_store/mappers/transformation/proto_event.rb
76
+ - lib/ruby_event_store/mappers/transformation/protobuf_encoder.rb
77
+ - lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb
78
+ - lib/ruby_event_store/mappers/transformation/serialization.rb
79
+ - lib/ruby_event_store/mappers/transformation/serialized_record.rb
80
+ - lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb
81
+ - lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb
166
82
  - lib/ruby_event_store/metadata.rb
167
83
  - lib/ruby_event_store/projection.rb
168
- - lib/ruby_event_store/pub_sub/broker.rb
169
- - lib/ruby_event_store/pub_sub/dispatcher.rb
170
84
  - lib/ruby_event_store/serialized_record.rb
85
+ - lib/ruby_event_store/spec/broker_lint.rb
171
86
  - lib/ruby_event_store/spec/dispatcher_lint.rb
172
- - lib/ruby_event_store/spec/event_broker_lint.rb
87
+ - lib/ruby_event_store/spec/event_lint.rb
173
88
  - lib/ruby_event_store/spec/event_repository_lint.rb
89
+ - lib/ruby_event_store/spec/mapper_lint.rb
90
+ - lib/ruby_event_store/spec/scheduler_lint.rb
91
+ - lib/ruby_event_store/spec/subscriptions_lint.rb
174
92
  - lib/ruby_event_store/specification.rb
93
+ - lib/ruby_event_store/specification_reader.rb
94
+ - lib/ruby_event_store/specification_result.rb
175
95
  - lib/ruby_event_store/stream.rb
96
+ - lib/ruby_event_store/subscriptions.rb
97
+ - lib/ruby_event_store/transform_keys.rb
176
98
  - lib/ruby_event_store/version.rb
177
99
  - ruby_event_store.gemspec
178
100
  homepage: https://railseventstore.org
@@ -183,7 +105,7 @@ metadata:
183
105
  changelog_uri: https://github.com/RailsEventStore/rails_event_store/releases
184
106
  source_code_uri: https://github.com/RailsEventStore/rails_event_store
185
107
  bug_tracker_uri: https://github.com/RailsEventStore/rails_event_store/issues
186
- post_install_message:
108
+ post_install_message:
187
109
  rdoc_options: []
188
110
  require_paths:
189
111
  - lib
@@ -198,9 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
120
  - !ruby/object:Gem::Version
199
121
  version: '0'
200
122
  requirements: []
201
- rubyforge_project:
202
- rubygems_version: 2.7.6
203
- signing_key:
123
+ rubygems_version: 3.1.4
124
+ signing_key:
204
125
  specification_version: 4
205
126
  summary: Event Store in Ruby
206
127
  test_files: []
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require 'ruby_event_store/deprecated_read_api_rewriter'
5
- require 'ruby_event_store/deprecated_read_api_runner'
6
- rescue LoadError
7
- warn <<-EOS
8
-
9
- You need following gems in Gemfile in order to use this script:
10
-
11
- gem 'parser'
12
- gem 'unparser'
13
- gem 'astrolabe'
14
-
15
- EOS
16
- exit(2)
17
- end
18
-
19
- RubyEventStore::DeprecatedReadAPIRunner.go(ARGV)
@@ -1,67 +0,0 @@
1
- require 'parser/current'
2
- require 'unparser'
3
- require 'ruby_event_store'
4
-
5
-
6
- module RubyEventStore
7
- class DeprecatedReadAPIRewriter < ::Parser::Rewriter
8
- def on_send(node)
9
- node.each_descendant(:send) { |desc_node| on_send(desc_node) }
10
-
11
- _, method_name, *args = node.children
12
- replace_range = node.location.selector
13
- replace_range = replace_range.join(node.location.end) if node.location.end
14
-
15
- case method_name
16
- when :read_all_streams_backward, :read_events_backward
17
- rewrite_api("read.backward", replace_range, **parse_args(args))
18
- when :read_stream_events_backward
19
- rewrite_api("read.backward", replace_range, count: nil, **parse_args(args))
20
- when :read_all_streams_forward, :read_events_forward
21
- rewrite_api("read", replace_range, **parse_args(args))
22
- when :read_stream_events_forward
23
- rewrite_api("read", replace_range, count: nil, **parse_args(args))
24
- end
25
- end
26
-
27
- def rewrite_api(query, range, start: nil, count: PAGE_SIZE, stream: nil)
28
- query << ".stream(#{stream})" if stream
29
- query << ".from(#{start})" if start
30
- query << ".limit(#{count})" if count
31
-
32
- replace(range, "#{query}.each.to_a")
33
- end
34
-
35
- def parse_args(args)
36
- return {} if args.empty?
37
-
38
- case args.size
39
- when 1
40
- case args[0].type
41
- when :hash
42
- stream_name, kwargs = nil, args[0]
43
- else
44
- stream_name, kwargs = parse_value(args[0]), AST::Node.new(:hash)
45
- end
46
- else
47
- stream_name, kwargs = parse_value(args[0]), args[1]
48
- end
49
-
50
- kwargs
51
- .children
52
- .reduce({stream: stream_name}) do |memo, pair|
53
- keyword, value = pair.children
54
- memo[parse_keyword(keyword)] = parse_value(value)
55
- memo
56
- end
57
- end
58
-
59
- def parse_value(node)
60
- Unparser.unparse(node)
61
- end
62
-
63
- def parse_keyword(node)
64
- node.children[0].to_sym
65
- end
66
- end
67
- end
@@ -1,64 +0,0 @@
1
- require 'parser/runner'
2
- require 'tempfile'
3
- require 'astrolabe/builder'
4
-
5
-
6
- module RubyEventStore
7
- class DeprecatedReadAPIRunner < Parser::Runner
8
- attr_reader :rewriter, :parser_class, :modify
9
-
10
- def initialize
11
- super
12
- @rewriter = DeprecatedReadAPIRewriter.new
13
- end
14
-
15
- def runner_name
16
- "res-deprecated-read-api-migrator"
17
- end
18
-
19
- def setup_option_parsing(opts)
20
- super(opts)
21
-
22
- opts.on '-m', '--modify' do
23
- @modify = true
24
- end
25
- end
26
-
27
- def process(buffer)
28
- parser = parser_class.new(Astrolabe::Builder.new)
29
- new_source = rewriter.rewrite(buffer, parser.parse(buffer))
30
- new_buffer = Parser::Source::Buffer.new(buffer.name + '|after res-deprecated-read-api-migrator')
31
- new_buffer.source = new_source
32
-
33
- if !modify
34
- old = Tempfile.new('old')
35
- old.write(buffer.source + "\n")
36
- old.flush
37
-
38
- new = Tempfile.new('new')
39
- new.write(new_source + "\n")
40
- new.flush
41
-
42
- IO.popen("diff -u #{old.path} #{new.path}") do |io|
43
- $stderr.write(
44
- io.read
45
- .sub(/^---.*/, "--- #{buffer.name}")
46
- .sub(/^\+\+\+.*/, "+++ #{new_buffer.name}")
47
- )
48
- end
49
- exit(1)
50
- end
51
-
52
- if File.exist?(buffer.name)
53
- File.open(buffer.name, 'w') do |file|
54
- file.write(new_source)
55
- end
56
- else
57
- if input_size > 1
58
- puts "Rewritten content of #{buffer.name}:"
59
- end
60
- puts new_source
61
- end
62
- end
63
- end
64
- end
@@ -1,7 +0,0 @@
1
- module RubyEventStore
2
- def self.const_missing(const_name)
3
- super unless const_name == :MethodNotDefined
4
- warn "`RubyEventStore::MethodNotDefined` has been deprecated. Use `RubyEventStore::InvalidHandler` instead."
5
- InvalidHandler
6
- end
7
- end
@@ -1,73 +0,0 @@
1
- require 'concurrent'
2
-
3
- module RubyEventStore
4
- module PubSub
5
- class Broker
6
- DEFAULT_DISPATCHER = Dispatcher.new
7
-
8
- def initialize(dispatcher: DEFAULT_DISPATCHER)
9
- @subscribers = Hash.new {|hsh, key| hsh[key] = [] }
10
- @global_subscribers = []
11
-
12
- @thread_global_subscribers = Concurrent::ThreadLocalVar.new([])
13
- @thread_subscribers = Concurrent::ThreadLocalVar.new do
14
- Hash.new {|hsh, key| hsh[key] = [] }
15
- end
16
-
17
- @dispatcher = dispatcher
18
- end
19
-
20
- def add_subscriber(subscriber, event_types)
21
- verify_subscriber(subscriber)
22
- subscribe(subscriber, event_types)
23
- end
24
-
25
- def add_global_subscriber(subscriber)
26
- verify_subscriber(subscriber)
27
- global_subscribers << subscriber
28
-
29
- ->() { global_subscribers.delete(subscriber) }
30
- end
31
-
32
- def add_thread_global_subscriber(subscriber)
33
- verify_subscriber(subscriber)
34
- thread_global_subscribers.value += [subscriber]
35
-
36
- ->() { thread_global_subscribers.value -= [subscriber] }
37
- end
38
-
39
- def add_thread_subscriber(subscriber, event_types)
40
- verify_subscriber(subscriber)
41
- event_types.each{ |type| thread_subscribers.value[type.to_s] << subscriber }
42
- ->() {event_types.each{ |type| thread_subscribers.value.fetch(type.to_s).delete(subscriber) } }
43
- end
44
-
45
- def notify_subscribers(event)
46
- all_subscribers_for(event.type).each do |subscriber|
47
- dispatcher.call(subscriber, event)
48
- end
49
- end
50
-
51
- private
52
-
53
- def verify_subscriber(subscriber)
54
- raise SubscriberNotExist if subscriber.nil?
55
- dispatcher.verify(subscriber)
56
- end
57
-
58
- def subscribe(subscriber, event_types)
59
- event_types.each{ |type| subscribers[type.to_s] << subscriber }
60
- ->() {event_types.each{ |type| subscribers.fetch(type.to_s).delete(subscriber) } }
61
- end
62
-
63
- def all_subscribers_for(event_type)
64
- subscribers[event_type] +
65
- global_subscribers +
66
- thread_global_subscribers.value +
67
- thread_subscribers.value[event_type]
68
- end
69
-
70
- attr_reader :dispatcher, :subscribers, :global_subscribers, :thread_global_subscribers, :thread_subscribers
71
- end
72
- end
73
- end