event_store_client 0.1.1 → 0.1.2
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/README.md +7 -16
- data/lib/event_store_client.rb +5 -0
- data/lib/event_store_client/connection.rb +1 -1
- data/lib/event_store_client/deserialized_event.rb +27 -0
- data/lib/event_store_client/mapper/default.rb +10 -2
- data/lib/event_store_client/store_adapter/in_memory.rb +2 -2
- data/lib/event_store_client/types.rb +6 -0
- data/lib/event_store_client/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 264ab7bf160dd4fafffd13ac73f15ce0ab6bffa2f762c0ee4da6cb628f70ec6a
|
|
4
|
+
data.tar.gz: 73c9478c8fc52f4729cafb4c55181afecc006269e2148fee2edb4830df9bab31
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 64e69a708344ab5cbf7b94a539220e07ac0564374f36edbabfc63a79a4bbd76396053b4b3d1f04d0067626555431de1f8966686008bb2227225fca79d7d94beb
|
|
7
|
+
data.tar.gz: 7c96a05e7f86c5b12c562de3642ca908bfcb536f3393425a99c686f491d461183bdd74b800ece5c5beebed3ba5558d31dac9acdf679d45b3c41cd018f7b0fdb9
|
data/README.md
CHANGED
|
@@ -50,29 +50,20 @@ Before you start, add this to the `initializer` or to the top of your script:
|
|
|
50
50
|
To test out the behavior, you'll need a sample event and handler to work with:
|
|
51
51
|
|
|
52
52
|
```ruby
|
|
53
|
-
# Sample Event using dry-struct (recommended)
|
|
54
|
-
require 'dry-struct'
|
|
55
|
-
class SomethingHappened < Dry::Struct
|
|
56
|
-
attribute :data, EventStoreClient::Types::Strict::Hash
|
|
57
|
-
attribute :metadata, EventStoreClient::Types::Strict::Hash
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# Sample Event without types check (not recommended)
|
|
61
|
-
|
|
62
|
-
class SomethingHappened < Dry::Struct
|
|
63
|
-
attr_reader :data, :metadata
|
|
64
53
|
|
|
65
|
-
|
|
54
|
+
require 'securerandom'
|
|
66
55
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
56
|
+
class SomethingHappened < EventStoreClient::DeserializedEvent
|
|
57
|
+
def schema
|
|
58
|
+
Dry::Schema.Params do
|
|
59
|
+
required(:user_id).value(:string)
|
|
60
|
+
required(:email).value(:string)
|
|
61
|
+
end
|
|
70
62
|
end
|
|
71
63
|
end
|
|
72
64
|
|
|
73
65
|
event = SomethingHappened.new(
|
|
74
66
|
data: { user_id: SecureRandom.uuid, title: "Something happened" },
|
|
75
|
-
metadata: {}
|
|
76
67
|
)
|
|
77
68
|
```
|
|
78
69
|
|
data/lib/event_store_client.rb
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module EventStoreClient
|
|
4
|
+
def self.configure(&block)
|
|
5
|
+
config = Configuration.instance
|
|
6
|
+
config.configure(&block)
|
|
7
|
+
end
|
|
4
8
|
end
|
|
5
9
|
|
|
6
10
|
require 'event_store_client/configuration'
|
|
7
11
|
require 'event_store_client/types'
|
|
8
12
|
require 'event_store_client/event'
|
|
13
|
+
require 'event_store_client/deserialized_event'
|
|
9
14
|
|
|
10
15
|
require 'event_store_client/serializer/json'
|
|
11
16
|
|
|
@@ -13,7 +13,7 @@ module EventStoreClient
|
|
|
13
13
|
def read(stream, direction: 'forward')
|
|
14
14
|
response =
|
|
15
15
|
client.read(stream, start: 0, direction: direction)
|
|
16
|
-
return [] if response.body
|
|
16
|
+
return [] if response.body.nil? || response.body.empty?
|
|
17
17
|
JSON.parse(response.body)['entries'].map do |entry|
|
|
18
18
|
event = EventStoreClient::Event.new(
|
|
19
19
|
id: entry['eventId'],
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'dry/schema'
|
|
4
|
+
|
|
5
|
+
module EventStoreClient
|
|
6
|
+
class DeserializedEvent
|
|
7
|
+
InvalidDataError = Class.new(StandardError)
|
|
8
|
+
|
|
9
|
+
attr_reader :data
|
|
10
|
+
attr_reader :metadata
|
|
11
|
+
attr_reader :type
|
|
12
|
+
|
|
13
|
+
def schema
|
|
14
|
+
Dry::Schema.Params do
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def initialize(**args)
|
|
19
|
+
validation = schema.call(args[:data] || {})
|
|
20
|
+
raise InvalidDataError.new(message: validation.errors.to_h) if validation.errors.any?
|
|
21
|
+
|
|
22
|
+
@data = args.fetch(:data) { {} }
|
|
23
|
+
@metadata = args.fetch(:metadata) { {} }
|
|
24
|
+
@type = args[:type] || self.class.name
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -15,9 +15,17 @@ module EventStoreClient
|
|
|
15
15
|
metadata = serializer.deserialize(event.metadata)
|
|
16
16
|
data = serializer.deserialize(event.data)
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
event_class =
|
|
19
|
+
begin
|
|
20
|
+
Object.const_get(event.type)
|
|
21
|
+
rescue NameError
|
|
22
|
+
EventStoreClient::DeserializedEvent
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
event_class.new(
|
|
19
26
|
metadata: metadata,
|
|
20
|
-
data: data
|
|
27
|
+
data: data,
|
|
28
|
+
type: event.type
|
|
21
29
|
)
|
|
22
30
|
end
|
|
23
31
|
|
|
@@ -21,9 +21,9 @@ module EventStoreClient
|
|
|
21
21
|
|
|
22
22
|
def read(stream_name, direction: 'forward', start: 0, count: per_page)
|
|
23
23
|
if direction == 'forward'
|
|
24
|
-
read_stream_forward(stream_name, start: start, count:
|
|
24
|
+
read_stream_forward(stream_name, start: start, count: count)
|
|
25
25
|
else
|
|
26
|
-
read_stream_backward(stream_name, start: start, count:
|
|
26
|
+
read_stream_backward(stream_name, start: start, count: count)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -4,6 +4,12 @@ require 'dry-types'
|
|
|
4
4
|
|
|
5
5
|
module EventStoreClient
|
|
6
6
|
module Types
|
|
7
|
+
UUID_REGEXP = /\A[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}\z/i
|
|
8
|
+
|
|
7
9
|
include Dry.Types()
|
|
10
|
+
|
|
11
|
+
UUID = Types::Strict::String.constrained(
|
|
12
|
+
format: UUID_REGEXP
|
|
13
|
+
)
|
|
8
14
|
end
|
|
9
15
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: event_store_client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sebastian Wilgosz
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-12-
|
|
11
|
+
date: 2019-12-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: dry-schema
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 1.4.1
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 1.4.1
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: dry-struct
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -95,6 +109,7 @@ files:
|
|
|
95
109
|
- lib/event_store_client/client.rb
|
|
96
110
|
- lib/event_store_client/configuration.rb
|
|
97
111
|
- lib/event_store_client/connection.rb
|
|
112
|
+
- lib/event_store_client/deserialized_event.rb
|
|
98
113
|
- lib/event_store_client/endpoint.rb
|
|
99
114
|
- lib/event_store_client/event.rb
|
|
100
115
|
- lib/event_store_client/mapper.rb
|