ruby_event_store 1.3.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/lib/ruby_event_store.rb +43 -47
  4. data/lib/ruby_event_store/broker.rb +3 -3
  5. data/lib/ruby_event_store/client.rb +51 -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 -13
  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 +288 -105
  32. data/lib/ruby_event_store/spec/mapper_lint.rb +6 -6
  33. data/lib/ruby_event_store/spec/subscriptions_lint.rb +14 -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 -8
  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.3.0"
4
+ VERSION = "2.2.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.3.0
4
+ version: 2.2.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-12-15 00:00:00.000000000 Z
11
+ date: 2021-04-09 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.6'
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: []
data/CHANGELOG.md DELETED
@@ -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