event_store_client 3.1.0 → 3.2.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.
- checksums.yaml +4 -4
- data/docs/configuration.md +11 -10
- data/lib/event_store_client/config.rb +1 -0
- data/lib/event_store_client/event_class_resolver.rb +27 -0
- data/lib/event_store_client/serializer/event_deserializer.rb +2 -13
- data/lib/event_store_client/version.rb +1 -1
- data/lib/event_store_client.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d4a4dc809c49fb6d9ab52ea68c6bfcb58217cb463d64e7591d5de7e0e5c80af
|
4
|
+
data.tar.gz: 29c38f7e04dd6b4b73a61966353ec51246037dfb6ffd25d38a8ebfc06c9faa8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c15bb242df2456c57fbddd4dbe553113e803d26062081e1261ba134b64db2e445ae0f6a56a218555f3007e858c030212285749765aa941152fc6e395325acf6
|
7
|
+
data.tar.gz: 04654757ca1d4ed722255ac16d53cfa6415a7dc098ded62fbc91479fef681ed66f80ecd61e408f7a2f8bdafbf724cc4e1b9766c39f015cd79a799b327f15a3b3
|
data/docs/configuration.md
CHANGED
@@ -2,16 +2,17 @@
|
|
2
2
|
|
3
3
|
Configuration options:
|
4
4
|
|
5
|
-
| name | value | default value
|
6
|
-
|
7
|
-
| eventstore_url
|
8
|
-
| per_page | Integer | `20`
|
9
|
-
| mapper | `EventStoreClient::Mapper::Default.new` or `EventStoreClient::Mapper::Encrypted.new` | `EventStoreClient::Mapper::Default.new`
|
10
|
-
| default_event_class | `DeserializedEvent` or any class, inherited from it | `DeserializedEvent`
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
| name | value | default value | description |
|
6
|
+
|----------------------|--------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
7
|
+
| eventstore_url | String | `'esdb://localhost:2113'` | Connection string. See description of possible values below. |
|
8
|
+
| per_page | Integer | `20` | Number of events to return in one response. |
|
9
|
+
| mapper | `EventStoreClient::Mapper::Default.new` or `EventStoreClient::Mapper::Encrypted.new` | `EventStoreClient::Mapper::Default.new` | An object that is responsible for serialization / deserialization and encryption / decryption of events. |
|
10
|
+
| default_event_class | `DeserializedEvent` or any class, inherited from it | `EventStoreClient::DeserializedEvent` | This class will be used during the deserialization process when deserializer fails to resolve an event's class from response. |
|
11
|
+
| event_class_resolver | `Proc` | `nil` | A Proc that accepts a string and returns event class. |
|
12
|
+
| logger | `Logger` | `nil` | A logger that would log messages from `event_store_client` and `grpc` gems. |
|
13
|
+
| skip_deserialization | Boolean | `false` | Whether to skip event deserialization using the given `mapper` setting. If you set it to `true` decryption will be skipped as well. It is useful when you want to defer deserialization and handle it later by yourself. |
|
14
|
+
| skip_decryption | Boolean | `false` | Whether to skip decrypting encrypted event payloads. |
|
15
|
+
| channel_args | Hash | `{ 'grpc.min_reconnect_backoff_ms' => 100, 'grpc.max_reconnect_backoff_ms' => 100, 'grpc.initial_reconnect_backoff_ms' => 100 }` | GRPC-specific connection options. This hash will be passed into the `:channel_args` argument of a Stub class of your request. More GRPC options can be found [here](https://github.com/grpc/grpc/blob/v1.55.1/include/grpc/impl/grpc_types.h#L141). |
|
15
16
|
|
16
17
|
## A note about channel_args option
|
17
18
|
|
@@ -23,6 +23,7 @@ module EventStoreClient
|
|
23
23
|
# https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/grpc_types.h
|
24
24
|
option(:channel_args) # Hash
|
25
25
|
option(:name) { :default }
|
26
|
+
option(:event_class_resolver) # Proc that excepts a string and returns a class
|
26
27
|
|
27
28
|
def eventstore_url=(value)
|
28
29
|
@eventstore_url =
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EventStoreClient
|
4
|
+
class EventClassResolver
|
5
|
+
attr_reader :config
|
6
|
+
private :config
|
7
|
+
|
8
|
+
# @param config [EventStoreClient::Config]
|
9
|
+
def initialize(config)
|
10
|
+
@config = config
|
11
|
+
end
|
12
|
+
|
13
|
+
# @param event_type [String, nil]
|
14
|
+
# @return [Class<EventStoreClient::DeserializedEvent>]
|
15
|
+
def resolve(event_type)
|
16
|
+
return config.event_class_resolver.(event_type) || config.default_event_class if config.event_class_resolver
|
17
|
+
|
18
|
+
Object.const_get(event_type)
|
19
|
+
rescue NameError, TypeError
|
20
|
+
config.logger&.debug(<<~TEXT.strip)
|
21
|
+
Unable to resolve class by `#{event_type}' event type. \
|
22
|
+
Picking default `#{config.default_event_class}' event class to instantiate the event.
|
23
|
+
TEXT
|
24
|
+
config.default_event_class
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -32,7 +32,8 @@ module EventStoreClient
|
|
32
32
|
custom_metadata = serializer.deserialize(normalize_serialized(raw_event.custom_metadata))
|
33
33
|
metadata = raw_event.metadata.to_h
|
34
34
|
|
35
|
-
event_class(metadata['type'])
|
35
|
+
event_class = EventStoreClient::EventClassResolver.new(config).resolve(metadata['type'])
|
36
|
+
event_class.new(
|
36
37
|
skip_validation: true,
|
37
38
|
id: raw_event.id.string,
|
38
39
|
title: "#{raw_event.stream_revision}@#{raw_event.stream_identifier.stream_name}",
|
@@ -49,18 +50,6 @@ module EventStoreClient
|
|
49
50
|
|
50
51
|
private
|
51
52
|
|
52
|
-
# @param event_type [String]
|
53
|
-
# @return [Class<EventStoreClient::DeserializedEvent>]
|
54
|
-
def event_class(event_type)
|
55
|
-
Object.const_get(event_type)
|
56
|
-
rescue NameError, TypeError
|
57
|
-
config.logger&.debug(<<~TEXT.strip)
|
58
|
-
Unable to resolve class by `#{event_type}' event type. \
|
59
|
-
Picking default `#{config.default_event_class}' event class to instantiate the event.
|
60
|
-
TEXT
|
61
|
-
config.default_event_class
|
62
|
-
end
|
63
|
-
|
64
53
|
# @param raw_data [String]
|
65
54
|
# @return [String]
|
66
55
|
def normalize_serialized(raw_data)
|
data/lib/event_store_client.rb
CHANGED
@@ -17,6 +17,7 @@ require 'event_store_client/connection/url'
|
|
17
17
|
require 'event_store_client/connection/url_parser'
|
18
18
|
require 'event_store_client/deserialized_event'
|
19
19
|
require 'event_store_client/serialized_event'
|
20
|
+
require 'event_store_client/event_class_resolver'
|
20
21
|
require 'event_store_client/config'
|
21
22
|
|
22
23
|
require 'event_store_client/mapper'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: event_store_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Wilgosz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|
@@ -222,6 +222,7 @@ files:
|
|
222
222
|
- lib/event_store_client/deserialized_event.rb
|
223
223
|
- lib/event_store_client/encryption_metadata.rb
|
224
224
|
- lib/event_store_client/errors.rb
|
225
|
+
- lib/event_store_client/event_class_resolver.rb
|
225
226
|
- lib/event_store_client/extensions/options_extension.rb
|
226
227
|
- lib/event_store_client/mapper.rb
|
227
228
|
- lib/event_store_client/mapper/default.rb
|