ruby_event_store 1.2.2 → 2.1.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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/lib/ruby_event_store.rb +3 -7
  4. data/lib/ruby_event_store/broker.rb +3 -3
  5. data/lib/ruby_event_store/client.rb +47 -23
  6. data/lib/ruby_event_store/composed_dispatcher.rb +2 -2
  7. data/lib/ruby_event_store/constants.rb +1 -0
  8. data/lib/ruby_event_store/errors.rb +0 -1
  9. data/lib/ruby_event_store/event.rb +8 -1
  10. data/lib/ruby_event_store/immediate_async_dispatcher.rb +2 -2
  11. data/lib/ruby_event_store/in_memory_repository.rb +98 -59
  12. data/lib/ruby_event_store/instrumented_dispatcher.rb +2 -2
  13. data/lib/ruby_event_store/instrumented_repository.rb +3 -3
  14. data/lib/ruby_event_store/mappers/default.rb +3 -8
  15. data/lib/ruby_event_store/mappers/encryption_mapper.rb +3 -4
  16. data/lib/ruby_event_store/mappers/instrumented_mapper.rb +4 -4
  17. data/lib/ruby_event_store/mappers/json_mapper.rb +7 -7
  18. data/lib/ruby_event_store/mappers/pipeline.rb +2 -5
  19. data/lib/ruby_event_store/mappers/pipeline_mapper.rb +2 -2
  20. data/lib/ruby_event_store/mappers/transformation/domain_event.rb +16 -8
  21. data/lib/ruby_event_store/mappers/transformation/encryption.rb +20 -12
  22. data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +11 -4
  23. data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +12 -7
  24. data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +12 -7
  25. data/lib/ruby_event_store/mappers/transformation/upcast.rb +37 -0
  26. data/lib/ruby_event_store/null.rb +13 -0
  27. data/lib/ruby_event_store/projection.rb +2 -1
  28. data/lib/ruby_event_store/record.rb +68 -0
  29. data/lib/ruby_event_store/serialized_record.rb +23 -4
  30. data/lib/ruby_event_store/spec/broker_lint.rb +9 -9
  31. data/lib/ruby_event_store/spec/event_repository_lint.rb +267 -105
  32. data/lib/ruby_event_store/spec/mapper_lint.rb +6 -6
  33. data/lib/ruby_event_store/spec/subscriptions_lint.rb +25 -0
  34. data/lib/ruby_event_store/specification.rb +100 -7
  35. data/lib/ruby_event_store/specification_reader.rb +2 -2
  36. data/lib/ruby_event_store/specification_result.rb +86 -2
  37. data/lib/ruby_event_store/subscriptions.rb +23 -9
  38. data/lib/ruby_event_store/transform_keys.rb +5 -5
  39. data/lib/ruby_event_store/version.rb +1 -1
  40. metadata +15 -21
  41. data/CHANGELOG.md +0 -93
  42. data/Gemfile +0 -11
  43. data/Makefile +0 -22
  44. data/lib/ruby_event_store/mappers/protobuf.rb +0 -24
  45. data/lib/ruby_event_store/mappers/transformation/item.rb +0 -56
  46. data/lib/ruby_event_store/mappers/transformation/proto_event.rb +0 -17
  47. data/lib/ruby_event_store/mappers/transformation/protobuf_encoder.rb +0 -30
  48. data/lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb +0 -30
  49. data/lib/ruby_event_store/mappers/transformation/serialization.rb +0 -34
  50. data/lib/ruby_event_store/mappers/transformation/serialized_record.rb +0 -27
  51. data/ruby_event_store.gemspec +0 -29
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyEventStore
4
- VERSION = "1.2.2"
4
+ VERSION = "2.1.0"
5
5
  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: 1.2.2
4
+ version: 2.1.0
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: 2020-11-03 00:00:00.000000000 Z
11
+ date: 2021-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -30,16 +30,15 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.1.6
33
- description: Implementation of Event Store in Ruby
34
- email:
35
- - dev@arkency.com
33
+ description: |
34
+ Ruby implementation of an event store. Ships with in-memory event repository, generic instrumentation
35
+ and dispatches events synchronously.
36
+ email: dev@arkency.com
36
37
  executables: []
37
38
  extensions: []
38
- extra_rdoc_files: []
39
+ extra_rdoc_files:
40
+ - README.md
39
41
  files:
40
- - CHANGELOG.md
41
- - Gemfile
42
- - Makefile
43
42
  - README.md
44
43
  - lib/ruby_event_store.rb
45
44
  - lib/ruby_event_store/batch_enumerator.rb
@@ -67,20 +66,16 @@ files:
67
66
  - lib/ruby_event_store/mappers/null_mapper.rb
68
67
  - lib/ruby_event_store/mappers/pipeline.rb
69
68
  - lib/ruby_event_store/mappers/pipeline_mapper.rb
70
- - lib/ruby_event_store/mappers/protobuf.rb
71
69
  - lib/ruby_event_store/mappers/transformation/domain_event.rb
72
70
  - lib/ruby_event_store/mappers/transformation/encryption.rb
73
71
  - 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
72
  - lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb
81
73
  - lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb
74
+ - lib/ruby_event_store/mappers/transformation/upcast.rb
82
75
  - lib/ruby_event_store/metadata.rb
76
+ - lib/ruby_event_store/null.rb
83
77
  - lib/ruby_event_store/projection.rb
78
+ - lib/ruby_event_store/record.rb
84
79
  - lib/ruby_event_store/serialized_record.rb
85
80
  - lib/ruby_event_store/spec/broker_lint.rb
86
81
  - lib/ruby_event_store/spec/dispatcher_lint.rb
@@ -96,12 +91,11 @@ files:
96
91
  - lib/ruby_event_store/subscriptions.rb
97
92
  - lib/ruby_event_store/transform_keys.rb
98
93
  - lib/ruby_event_store/version.rb
99
- - ruby_event_store.gemspec
100
94
  homepage: https://railseventstore.org
101
95
  licenses:
102
96
  - MIT
103
97
  metadata:
104
- homepage_uri: https://railseventstore.org/
98
+ homepage_uri: https://railseventstore.org
105
99
  changelog_uri: https://github.com/RailsEventStore/rails_event_store/releases
106
100
  source_code_uri: https://github.com/RailsEventStore/rails_event_store
107
101
  bug_tracker_uri: https://github.com/RailsEventStore/rails_event_store/issues
@@ -113,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
107
  requirements:
114
108
  - - ">="
115
109
  - !ruby/object:Gem::Version
116
- version: '0'
110
+ version: '2.5'
117
111
  required_rubygems_version: !ruby/object:Gem::Requirement
118
112
  requirements:
119
113
  - - ">="
@@ -123,5 +117,5 @@ requirements: []
123
117
  rubygems_version: 3.1.4
124
118
  signing_key:
125
119
  specification_version: 4
126
- summary: Event Store in Ruby
120
+ summary: Implementation of an event store in Ruby
127
121
  test_files: []
@@ -1,93 +0,0 @@
1
- Further changes can be tracked at [releases page](https://github.com/RailsEventStore/rails_event_store/releases).
2
-
3
- ### 0.14.0 (21.08.2017)
4
-
5
- * Change: Add lint for 3rd party implementations of dispatcher
6
- * Change: Deprecated MethodNotDefined error, use InvalidHandler instead
7
-
8
- ### 0.13.0 (15.10.2016)
9
-
10
- * Change: Dropped ClosedStruct event (meta)data wrapping PR #34
11
- Fix for Issue with ClosedStruct and object_id #33
12
- * Change: Refactor RubyEventStore::Client to have the same methods signatures as RailsEventStore::Client (PR #35),
13
- this will allow to remove most of the code form RailsEventStore::Client without breaking current
14
- applications that use RailsEventStore::Client. This change is however a breaking one for RubyEventStore.
15
-
16
- ### 0.12.1 (11.08.2016)
17
-
18
- * Fix: improve EventRepository specification tests (mutation tests)
19
-
20
- ### 0.12.0 (10.08.2016)
21
-
22
- * Change: all public methods arguments with default values are now keyword arguments
23
-
24
- ### 0.11.0 (12.07.2016)
25
-
26
- * Change: Call instead of handle_event, handle_event marked as deprecated in PR #18 is now removed PR #25
27
- * Change: Rename RubyEventStore::Facade to RubyEventStore::Client PR #26
28
-
29
- ### 0.10.1 (12.07.2016)
30
-
31
- * Added few new tests for repositories
32
-
33
- ### 0.10.0 (12.07.2016)
34
-
35
- * Fix: When using `append_to_stream`, expected version is no longer compared using `equal?` commit bdbe4600073d278cbf1024e8d49801fec768f6a7
36
- * Change: Creating events with data is now done using `data` keyword argument. Previously events were created using the syntax `OrderCreated.new(order_id: 123)`, now it has to be `OrderCreated.new(data: { order_id: 123 })`. PR #24
37
- * Change: Access to `data` attributes in an event is now using `event.data.some_attribute` syntax. `event.data[:some_attribute]` won't work either. PR #24
38
- * Change: Only events with the same name, event_id and data are equal - metadata is no longer taken into account PR #24
39
- * Change: `metadata[:timestamp]` is now set when event is appended to the stream, not when it is initialized PR #24
40
- * Change: Initialization of `RubyEventStore::Facade` is now using keyword arguments PR #24
41
- * Add support to `metadata_proc` PR #24
42
- * `ClosedStruct` is now a dependency PR #24
43
-
44
- ### 0.9.0 (24.06.2016)
45
-
46
- * Change: Call instead of handle_event, handle_event stays for now but is deprecated PR #18
47
- * Fix: Clarify Licensing terms #23 - MIT licence it is from now
48
-
49
- ### 0.8.0 (21.06.2016)
50
-
51
- * Change: Possibility to create projection based on all events PR #19
52
-
53
- ### 0.7.0 (21.06.2016)
54
-
55
- * Change: support for Dynamic subscriptions PR #20
56
- * Change: Add lint for 3rd party implementations of event broker PR #21
57
-
58
- ### 0.6.0 (25.05.2016)
59
-
60
- * Ability to provide a custom dispatcher to PubSub::Broker PR #12
61
- * Add support for projections PR #13
62
- * Added prettier message for case of missing #handle_event method. PR #14
63
- * Make file to run all the things PR #15
64
-
65
- ### 0.5.0 (21.03.2016)
66
-
67
- * Change: Event class refactoring to make default values more explicit PR #11
68
- * Change: No nils, use symbols instead - :any & :none replaced meaningless nil value
69
- * Change: Let event broker to be given as a dependency
70
- * Change: Remove Event#event_type - use class instead PR #10
71
-
72
- ### 0.4.0 (17.03.2016)
73
-
74
- * Change: Use class names to subscribe events PR #8
75
-
76
- ### 0.3.1 (13.03.2016)
77
-
78
- * Fix Don't overwrite timestamps when reading from repository
79
-
80
- ### 0.3.0 (03.03.2016)
81
-
82
- * Change: read_all_streams won't group_by results by stream name PR #4
83
- * Change: new way of define attributes of domain event PR #5
84
- * Change: reading forward and backward, refactored facade interface #6
85
- * Change: in memory event repository is now part of the gem, with shared specification PR #7
86
-
87
- ### 0.2.0 (27.01.2016)
88
-
89
- * Change: Return the event that the repository returns PR #2
90
-
91
- ### 0.1.0 (26.05.2015)
92
-
93
- Initial version
data/Gemfile DELETED
@@ -1,11 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- gemspec
5
-
6
- eval_gemfile File.expand_path('../support/bundler/Gemfile.shared', __dir__)
7
-
8
- gem 'protobuf_nested_struct'
9
- gem 'google-protobuf', '~> 3.12.2', '>= 3.12.2'
10
- gem 'activesupport', '~> 5.0'
11
- gem 'concurrent-ruby', github: 'ruby-concurrency/concurrent-ruby', ref: 'c4cbc968c55e5b983dae953095761896220c46d1'
data/Makefile DELETED
@@ -1,22 +0,0 @@
1
- GEM_VERSION = $(shell cat ../RES_VERSION)
2
- GEM_NAME = ruby_event_store
3
- REQUIRE = $(GEM_NAME)
4
- IGNORE = RubyEventStore::InMemoryRepository\#append_with_synchronize \
5
- RubyEventStore::Client::Within\#add_thread_subscribers \
6
- RubyEventStore::Client::Within\#add_thread_global_subscribers \
7
- RubyEventStore::Client::Within\#call \
8
- RubyEventStore::Client\#default_correlation_id_generator \
9
- RubyEventStore::Mappers::InMemoryEncryptionKeyRepository\#prepare_encrypt \
10
- RubyEventStore::Mappers::EncryptionKey\#prepare_encrypt \
11
- RubyEventStore::Mappers::EncryptionKey\#prepare_decrypt \
12
- RubyEventStore::Mappers::EncryptionKey\#prepare_auth_data \
13
- RubyEventStore::Mappers::EncryptionKey\#encrypt_authenticated \
14
- RubyEventStore::Mappers::EncryptionKey\#ciphertext_from_authenticated
15
-
16
- SUBJECT ?= RubyEventStore*
17
-
18
- include ../support/make/install.mk
19
- include ../support/make/test.mk
20
- include ../support/make/mutant.mk
21
- include ../support/make/gem.mk
22
- include ../support/make/help.mk
@@ -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,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yaml'
4
-
5
- module RubyEventStore
6
- module Mappers
7
- module Transformation
8
- class Serialization
9
- def initialize(serializer: YAML)
10
- @serializer = serializer
11
- end
12
- attr_reader :serializer
13
-
14
- def dump(item)
15
- Item.new(
16
- event_id: item.event_id,
17
- metadata: serializer.dump(item.metadata),
18
- data: serializer.dump(item.data),
19
- event_type: item.event_type
20
- )
21
- end
22
-
23
- def load(item)
24
- Item.new(
25
- event_id: item.event_id,
26
- metadata: serializer.load(item.metadata),
27
- data: serializer.load(item.data),
28
- event_type: item.event_type
29
- )
30
- end
31
- end
32
- end
33
- end
34
- 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