ruby_event_store 1.3.1 → 2.0.3

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -4
  3. data/Gemfile.lock +121 -0
  4. data/Makefile +13 -3
  5. data/lib/ruby_event_store/broker.rb +3 -3
  6. data/lib/ruby_event_store/client.rb +47 -23
  7. data/lib/ruby_event_store/composed_dispatcher.rb +2 -2
  8. data/lib/ruby_event_store/constants.rb +1 -0
  9. data/lib/ruby_event_store/errors.rb +0 -1
  10. data/lib/ruby_event_store/event.rb +8 -1
  11. data/lib/ruby_event_store/immediate_async_dispatcher.rb +2 -2
  12. data/lib/ruby_event_store/in_memory_repository.rb +98 -59
  13. data/lib/ruby_event_store/instrumented_dispatcher.rb +2 -2
  14. data/lib/ruby_event_store/mappers/default.rb +28 -6
  15. data/lib/ruby_event_store/mappers/deprecated_wrapper.rb +33 -0
  16. data/lib/ruby_event_store/mappers/encryption_mapper.rb +1 -4
  17. data/lib/ruby_event_store/mappers/instrumented_mapper.rb +8 -4
  18. data/lib/ruby_event_store/mappers/json_mapper.rb +2 -4
  19. data/lib/ruby_event_store/mappers/pipeline.rb +26 -5
  20. data/lib/ruby_event_store/mappers/pipeline_mapper.rb +6 -2
  21. data/lib/ruby_event_store/mappers/transformation/domain_event.rb +16 -8
  22. data/lib/ruby_event_store/mappers/transformation/encryption.rb +20 -12
  23. data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +11 -4
  24. data/lib/ruby_event_store/mappers/transformation/serialization.rb +16 -14
  25. data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +12 -7
  26. data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +12 -7
  27. data/lib/ruby_event_store/null.rb +13 -0
  28. data/lib/ruby_event_store/projection.rb +2 -13
  29. data/lib/ruby_event_store/record.rb +68 -0
  30. data/lib/ruby_event_store/serialized_record.rb +23 -4
  31. data/lib/ruby_event_store/spec/broker_lint.rb +9 -9
  32. data/lib/ruby_event_store/spec/event_repository_lint.rb +200 -36
  33. data/lib/ruby_event_store/spec/mapper_lint.rb +6 -6
  34. data/lib/ruby_event_store/spec/subscriptions_lint.rb +6 -0
  35. data/lib/ruby_event_store/specification.rb +100 -7
  36. data/lib/ruby_event_store/specification_reader.rb +2 -2
  37. data/lib/ruby_event_store/specification_result.rb +86 -2
  38. data/lib/ruby_event_store/version.rb +1 -1
  39. data/lib/ruby_event_store.rb +4 -7
  40. data/ruby_event_store.gemspec +1 -3
  41. metadata +7 -9
  42. data/lib/ruby_event_store/mappers/protobuf.rb +0 -24
  43. data/lib/ruby_event_store/mappers/transformation/item.rb +0 -56
  44. data/lib/ruby_event_store/mappers/transformation/proto_event.rb +0 -17
  45. data/lib/ruby_event_store/mappers/transformation/protobuf_encoder.rb +0 -30
  46. data/lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb +0 -30
  47. data/lib/ruby_event_store/mappers/transformation/serialized_record.rb +0 -27
@@ -5,14 +5,48 @@ module RubyEventStore
5
5
  def initialize(direction: :forward,
6
6
  start: nil,
7
7
  stop: nil,
8
+ older_than: nil,
9
+ older_than_or_equal: nil,
10
+ newer_than: nil,
11
+ newer_than_or_equal: nil,
12
+ time_sort_by: nil,
8
13
  count: nil,
9
14
  stream: Stream.new(GLOBAL_STREAM),
10
15
  read_as: :all,
11
16
  batch_size: Specification::DEFAULT_BATCH_SIZE,
12
17
  with_ids: nil,
13
18
  with_types: nil)
14
- @attributes = Struct.new(:direction, :start, :stop, :count, :stream, :read_as, :batch_size, :with_ids, :with_types)
15
- .new(direction, start, stop, count, stream, read_as, batch_size, with_ids, with_types)
19
+ @attributes = Struct.new(
20
+ :direction,
21
+ :start,
22
+ :stop,
23
+ :older_than,
24
+ :older_than_or_equal,
25
+ :newer_than,
26
+ :newer_than_or_equal,
27
+ :time_sort_by,
28
+ :count,
29
+ :stream,
30
+ :read_as,
31
+ :batch_size,
32
+ :with_ids,
33
+ :with_types
34
+ ).new(
35
+ direction,
36
+ start,
37
+ stop,
38
+ older_than,
39
+ older_than_or_equal,
40
+ newer_than,
41
+ newer_than_or_equal,
42
+ time_sort_by,
43
+ count,
44
+ stream,
45
+ read_as,
46
+ batch_size,
47
+ with_ids,
48
+ with_types
49
+ )
16
50
  freeze
17
51
  end
18
52
 
@@ -56,6 +90,46 @@ module RubyEventStore
56
90
  attributes.stop
57
91
  end
58
92
 
93
+ # Ending time.
94
+ # {http://railseventstore.org/docs/read/ Find out more}.
95
+ #
96
+ # @return [Time]
97
+ def older_than
98
+ attributes.older_than
99
+ end
100
+
101
+ # Ending time.
102
+ # {http://railseventstore.org/docs/read/ Find out more}.
103
+ #
104
+ # @return [Time]
105
+ def older_than_or_equal
106
+ attributes.older_than_or_equal
107
+ end
108
+
109
+ # Starting time.
110
+ # {http://railseventstore.org/docs/read/ Find out more}.
111
+ #
112
+ # @return [Time]
113
+ def newer_than
114
+ attributes.newer_than
115
+ end
116
+
117
+ # Starting time.
118
+ # {http://railseventstore.org/docs/read/ Find out more}.
119
+ #
120
+ # @return [Time]
121
+ def newer_than_or_equal
122
+ attributes.newer_than_or_equal
123
+ end
124
+
125
+ # Time sorting strategy. Nil when not specified.
126
+ # {http://railseventstore.org/docs/read/ Find out more}.
127
+ #
128
+ # @return [Symbol]
129
+ def time_sort_by
130
+ attributes.time_sort_by
131
+ end
132
+
59
133
  # Read direction. True is reading forward
60
134
  # {http://railseventstore.org/docs/read/ Find out more}.
61
135
  #
@@ -179,6 +253,11 @@ module RubyEventStore
179
253
  # * direction
180
254
  # * start
181
255
  # * stop
256
+ # * older_than
257
+ # * older_than_or_equal
258
+ # * newer_than
259
+ # * newer_than_or_equal
260
+ # * time_sort_by
182
261
  # * count
183
262
  # * stream
184
263
  # * read_as
@@ -193,6 +272,11 @@ module RubyEventStore
193
272
  get_direction,
194
273
  start,
195
274
  stop,
275
+ older_than,
276
+ older_than_or_equal,
277
+ newer_than,
278
+ newer_than_or_equal,
279
+ time_sort_by,
196
280
  limit,
197
281
  stream,
198
282
  attributes.read_as,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyEventStore
4
- VERSION = "1.3.1"
4
+ VERSION = "2.0.3"
5
5
  end
@@ -15,30 +15,27 @@ require 'ruby_event_store/specification_reader'
15
15
  require 'ruby_event_store/event'
16
16
  require 'ruby_event_store/stream'
17
17
  require 'ruby_event_store/expected_version'
18
+ require 'ruby_event_store/record'
18
19
  require 'ruby_event_store/serialized_record'
20
+ require 'ruby_event_store/null'
19
21
  require 'ruby_event_store/transform_keys'
20
22
  require 'ruby_event_store/mappers/encryption_key'
21
23
  require 'ruby_event_store/mappers/in_memory_encryption_key_repository'
22
24
  require 'ruby_event_store/mappers/transformation/domain_event'
23
25
  require 'ruby_event_store/mappers/transformation/encryption'
24
26
  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
27
  require 'ruby_event_store/mappers/transformation/stringify_metadata_keys'
32
28
  require 'ruby_event_store/mappers/transformation/symbolize_metadata_keys'
29
+ require 'ruby_event_store/mappers/transformation/serialization'
33
30
  require 'ruby_event_store/mappers/pipeline'
34
31
  require 'ruby_event_store/mappers/pipeline_mapper'
32
+ require 'ruby_event_store/mappers/deprecated_wrapper'
35
33
  require 'ruby_event_store/mappers/default'
36
34
  require 'ruby_event_store/mappers/forgotten_data'
37
35
  require 'ruby_event_store/mappers/encryption_mapper'
38
36
  require 'ruby_event_store/mappers/instrumented_mapper'
39
37
  require 'ruby_event_store/mappers/json_mapper'
40
38
  require 'ruby_event_store/mappers/null_mapper'
41
- require 'ruby_event_store/mappers/protobuf'
42
39
  require 'ruby_event_store/batch_enumerator'
43
40
  require 'ruby_event_store/correlated_commands'
44
41
  require 'ruby_event_store/link_by_metadata'
@@ -20,9 +20,7 @@ Gem::Specification.new do |spec|
20
20
  "bug_tracker_uri" => "https://github.com/RailsEventStore/rails_event_store/issues",
21
21
  }
22
22
 
23
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
- spec.bindir = 'exe'
25
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test/|spec/|features/|.mutant.yml)}) }
26
24
  spec.require_paths = ['lib']
27
25
 
28
26
  spec.add_dependency 'concurrent-ruby', '~> 1.0', '>= 1.1.6'
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: 1.3.1
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-05 00:00:00.000000000 Z
11
+ date: 2021-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -39,6 +39,7 @@ extra_rdoc_files: []
39
39
  files:
40
40
  - CHANGELOG.md
41
41
  - Gemfile
42
+ - Gemfile.lock
42
43
  - Makefile
43
44
  - README.md
44
45
  - lib/ruby_event_store.rb
@@ -58,6 +59,7 @@ files:
58
59
  - lib/ruby_event_store/instrumented_repository.rb
59
60
  - lib/ruby_event_store/link_by_metadata.rb
60
61
  - lib/ruby_event_store/mappers/default.rb
62
+ - lib/ruby_event_store/mappers/deprecated_wrapper.rb
61
63
  - lib/ruby_event_store/mappers/encryption_key.rb
62
64
  - lib/ruby_event_store/mappers/encryption_mapper.rb
63
65
  - lib/ruby_event_store/mappers/forgotten_data.rb
@@ -67,20 +69,16 @@ files:
67
69
  - lib/ruby_event_store/mappers/null_mapper.rb
68
70
  - lib/ruby_event_store/mappers/pipeline.rb
69
71
  - lib/ruby_event_store/mappers/pipeline_mapper.rb
70
- - lib/ruby_event_store/mappers/protobuf.rb
71
72
  - lib/ruby_event_store/mappers/transformation/domain_event.rb
72
73
  - lib/ruby_event_store/mappers/transformation/encryption.rb
73
74
  - 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
75
  - lib/ruby_event_store/mappers/transformation/serialization.rb
79
- - lib/ruby_event_store/mappers/transformation/serialized_record.rb
80
76
  - lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb
81
77
  - lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb
82
78
  - lib/ruby_event_store/metadata.rb
79
+ - lib/ruby_event_store/null.rb
83
80
  - lib/ruby_event_store/projection.rb
81
+ - lib/ruby_event_store/record.rb
84
82
  - lib/ruby_event_store/serialized_record.rb
85
83
  - lib/ruby_event_store/spec/broker_lint.rb
86
84
  - lib/ruby_event_store/spec/dispatcher_lint.rb
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- class Proto < RubyEventStore::Event
5
- def event_type
6
- data.class.descriptor.name
7
- end
8
- end
9
-
10
- module Mappers
11
- class Protobuf < PipelineMapper
12
- def initialize(events_class_remapping: {})
13
- super(Pipeline.new(
14
- to_domain_event: Transformation::ProtoEvent.new,
15
- transformations: [
16
- Transformation::ProtobufEncoder.new,
17
- Transformation::EventClassRemapper.new(events_class_remapping),
18
- Transformation::ProtobufNestedStructMetadata.new,
19
- ]
20
- ))
21
- end
22
- end
23
- end
24
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'forwardable'
4
-
5
- module RubyEventStore
6
- module Mappers
7
- module Transformation
8
- class Item
9
- include Enumerable
10
- extend Forwardable
11
-
12
- def initialize(h)
13
- @h = {}
14
- h.each do |k, v|
15
- @h[k] = (v)
16
- end
17
- end
18
-
19
- def event_id
20
- fetch(:event_id)
21
- end
22
-
23
- def metadata
24
- fetch(:metadata)
25
- end
26
-
27
- def data
28
- fetch(:data)
29
- end
30
-
31
- def event_type
32
- fetch(:event_type)
33
- end
34
-
35
- def ==(other_event)
36
- other_event.instance_of?(self.class) &&
37
- other_event.to_h.eql?(to_h)
38
- end
39
- alias_method :eql?, :==
40
-
41
- def merge(args)
42
- Item.new(@h.merge(args))
43
- end
44
-
45
- def to_h
46
- @h.dup
47
- end
48
-
49
- SAFE_HASH_METHODS = [:[], :fetch]
50
- delegate SAFE_HASH_METHODS => :@h
51
-
52
- private_constant :SAFE_HASH_METHODS
53
- end
54
- end
55
- end
56
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- module Mappers
5
- module Transformation
6
- class ProtoEvent < DomainEvent
7
- def load(item)
8
- Proto.new(
9
- event_id: item.event_id,
10
- data: item.data,
11
- metadata: item.metadata
12
- )
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- module Mappers
5
- module Transformation
6
- class ProtobufEncoder
7
- def dump(item)
8
- item.merge(data: encode_data(item.data))
9
- end
10
-
11
- def load(item)
12
- item.merge(data: load_data(item.event_type, item.data))
13
- end
14
-
15
- private
16
- def encode_data(data)
17
- begin
18
- data.class.encode(data)
19
- rescue NoMethodError
20
- raise ProtobufEncodingFailed
21
- end
22
- end
23
-
24
- def load_data(event_type, protobuf_data)
25
- Google::Protobuf::DescriptorPool.generated_pool.lookup(event_type).msgclass.decode(protobuf_data)
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- module Mappers
5
- module Transformation
6
- class ProtobufNestedStructMetadata
7
- def initialize
8
- require_optional_dependency
9
- end
10
-
11
- def dump(item)
12
- metadata = ProtobufNestedStruct::HashMapStringValue.dump(item.metadata)
13
- item.merge(metadata: metadata)
14
- end
15
-
16
- def load(item)
17
- metadata = ProtobufNestedStruct::HashMapStringValue.load(item.metadata)
18
- symbolize = SymbolizeMetadataKeys.new
19
- symbolize.load(item.merge(metadata: metadata))
20
- end
21
-
22
- def require_optional_dependency
23
- require 'protobuf_nested_struct'
24
- rescue LoadError
25
- raise LoadError, "cannot load such file -- protobuf_nested_struct. Add protobuf_nested_struct gem to Gemfile"
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubyEventStore
4
- module Mappers
5
- module Transformation
6
- class SerializedRecord
7
- def dump(item)
8
- RubyEventStore::SerializedRecord.new(
9
- event_id: item.event_id,
10
- metadata: item.metadata,
11
- data: item.data,
12
- event_type: item.event_type
13
- )
14
- end
15
-
16
- def load(serialized_record)
17
- Item.new(
18
- event_id: serialized_record.event_id,
19
- metadata: serialized_record.metadata,
20
- data: serialized_record.data,
21
- event_type: serialized_record.event_type
22
- )
23
- end
24
- end
25
- end
26
- end
27
- end