event_store_client 0.1.3 → 0.1.4
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/lib/event_store_client/client.rb +7 -0
- data/lib/event_store_client/connection.rb +9 -2
- data/lib/event_store_client/deserialized_event.rb +5 -1
- data/lib/event_store_client/event.rb +4 -3
- data/lib/event_store_client/mapper/default.rb +6 -4
- data/lib/event_store_client/store_adapter/api/client.rb +38 -10
- data/lib/event_store_client/store_adapter/in_memory.rb +8 -6
- data/lib/event_store_client/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5dcca0e1322bc8037b475d5041c4134c959ad3a93aa3c28b2717b52706c6b679
|
4
|
+
data.tar.gz: b9c1f859faa365ccc357c1ed5d4715482530a1c2e57695efa88ac247ab2f688f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 764640b96af5c2ea298f9ca965243f015d23bd0c1ffae53e175fbce9322e66fd025cd1b6072d96694dbc0bfce9780bf6750cd00cff1019c89be19be289e3f0f4
|
7
|
+
data.tar.gz: 7c55ede52abed9e3c42e10b03509e115d9a7fd204598dd4883dce6171764c25016f8a4dd01f386ac525f9136aa3da84f3dbb22021bacc6ceff5101ebce044a3e
|
@@ -61,6 +61,13 @@ module EventStoreClient
|
|
61
61
|
nil
|
62
62
|
end
|
63
63
|
|
64
|
+
def link_to(stream:, events:)
|
65
|
+
raise ArgumentError if !stream || stream == ''
|
66
|
+
raise ArgumentError if events.nil? || (events.is_a?(Array) && events.empty?)
|
67
|
+
|
68
|
+
connection.link_to(stream, events)
|
69
|
+
end
|
70
|
+
|
64
71
|
attr_accessor :connection, :service_name
|
65
72
|
|
66
73
|
private
|
@@ -10,13 +10,14 @@ module EventStoreClient
|
|
10
10
|
serialized_events
|
11
11
|
end
|
12
12
|
|
13
|
-
def read(stream, direction: 'forward')
|
13
|
+
def read(stream, direction: 'forward', resolve_links: true)
|
14
14
|
response =
|
15
|
-
client.read(stream, start: 0, direction: direction)
|
15
|
+
client.read(stream, start: 0, direction: direction, resolve_links: resolve_links)
|
16
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'],
|
20
|
+
title: entry['title'],
|
20
21
|
type: entry['eventType'],
|
21
22
|
data: entry['data'],
|
22
23
|
metadata: entry['metaData']
|
@@ -51,6 +52,12 @@ module EventStoreClient
|
|
51
52
|
events
|
52
53
|
end
|
53
54
|
|
55
|
+
def link_to(stream, events)
|
56
|
+
client.link_to(stream, events)
|
57
|
+
|
58
|
+
true
|
59
|
+
end
|
60
|
+
|
54
61
|
private
|
55
62
|
|
56
63
|
attr_reader :host, :port, :mapper, :per_page
|
@@ -6,9 +6,11 @@ module EventStoreClient
|
|
6
6
|
class DeserializedEvent
|
7
7
|
InvalidDataError = Class.new(StandardError)
|
8
8
|
|
9
|
+
attr_reader :id
|
10
|
+
attr_reader :type
|
11
|
+
attr_reader :title
|
9
12
|
attr_reader :data
|
10
13
|
attr_reader :metadata
|
11
|
-
attr_reader :type
|
12
14
|
|
13
15
|
def schema
|
14
16
|
Dry::Schema.Params do
|
@@ -22,6 +24,8 @@ module EventStoreClient
|
|
22
24
|
@data = args.fetch(:data) { {} }
|
23
25
|
@metadata = args.fetch(:metadata) { {} }
|
24
26
|
@type = args[:type] || self.class.name
|
27
|
+
@title = args[:title]
|
28
|
+
@id = args[:id]
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
@@ -8,16 +8,17 @@ module EventStoreClient
|
|
8
8
|
class Event < Dry::Struct
|
9
9
|
attr_reader :id
|
10
10
|
|
11
|
+
attribute :type, Types::Strict::String
|
12
|
+
attribute :title, Types::Strict::String.optional.default(nil)
|
11
13
|
attribute :data, Types::Strict::String.default('{}')
|
12
14
|
attribute :metadata, Types::Strict::String.default('{}')
|
13
|
-
attribute :type, Types::Strict::String
|
14
15
|
|
15
16
|
private
|
16
17
|
|
17
18
|
def initialize(**args)
|
18
19
|
@id = SecureRandom.uuid
|
19
|
-
hash_meta =
|
20
|
-
|
20
|
+
hash_meta = JSON.parse(args[:metadata] || '{}')
|
21
|
+
hash_meta['created_at'] ||= Time.now
|
21
22
|
args[:metadata] = JSON.generate(hash_meta)
|
22
23
|
super(args)
|
23
24
|
end
|
@@ -5,9 +5,9 @@ module EventStoreClient
|
|
5
5
|
class Default
|
6
6
|
def serialize(event)
|
7
7
|
Event.new(
|
8
|
-
|
8
|
+
type: event.class.to_s,
|
9
9
|
data: serializer.serialize(event.data),
|
10
|
-
|
10
|
+
metadata: serializer.serialize(event.metadata)
|
11
11
|
)
|
12
12
|
end
|
13
13
|
|
@@ -23,9 +23,11 @@ module EventStoreClient
|
|
23
23
|
end
|
24
24
|
|
25
25
|
event_class.new(
|
26
|
-
|
26
|
+
id: event.id,
|
27
|
+
type: event.type,
|
28
|
+
title: event.title,
|
27
29
|
data: data,
|
28
|
-
|
30
|
+
metadata: metadata
|
29
31
|
)
|
30
32
|
end
|
31
33
|
|
@@ -9,14 +9,7 @@ module EventStoreClient
|
|
9
9
|
'ES-ExpectedVersion' => expected_version.to_s
|
10
10
|
}.reject { |_key, val| val.empty? }
|
11
11
|
|
12
|
-
data =
|
13
|
-
{
|
14
|
-
eventId: event.id,
|
15
|
-
eventType: event.type,
|
16
|
-
data: event.data,
|
17
|
-
metadata: event.metadata
|
18
|
-
}
|
19
|
-
end
|
12
|
+
data = build_events_data(events)
|
20
13
|
|
21
14
|
make_request(:post, "/streams/#{stream_name}", body: data, headers: headers)
|
22
15
|
end
|
@@ -29,8 +22,12 @@ module EventStoreClient
|
|
29
22
|
make_request(:delete, "/streams/#{stream_name}", body: {}, headers: headers)
|
30
23
|
end
|
31
24
|
|
32
|
-
def read(stream_name, direction: 'forward', start: 0, count: per_page)
|
33
|
-
|
25
|
+
def read(stream_name, direction: 'forward', start: 0, count: per_page, resolve_links: true)
|
26
|
+
headers = {
|
27
|
+
'ES-ResolveLinkTos' => resolve_links.to_s
|
28
|
+
}
|
29
|
+
|
30
|
+
make_request(:get, "/streams/#{stream_name}/#{start}/#{direction}/#{count}", headers: headers)
|
34
31
|
end
|
35
32
|
|
36
33
|
def subscribe_to_stream(
|
@@ -67,6 +64,16 @@ module EventStoreClient
|
|
67
64
|
)
|
68
65
|
end
|
69
66
|
|
67
|
+
def link_to(stream_name, events)
|
68
|
+
data = build_linkig_data(events)
|
69
|
+
|
70
|
+
make_request(
|
71
|
+
:post,
|
72
|
+
"/streams/#{stream_name}",
|
73
|
+
body: data
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
70
77
|
def ack(url)
|
71
78
|
make_request(:post, url)
|
72
79
|
end
|
@@ -80,6 +87,27 @@ module EventStoreClient
|
|
80
87
|
@per_page = per_page
|
81
88
|
end
|
82
89
|
|
90
|
+
def build_events_data(events)
|
91
|
+
[events].flatten.map do |event|
|
92
|
+
{
|
93
|
+
eventId: event.id,
|
94
|
+
eventType: event.type,
|
95
|
+
data: event.data,
|
96
|
+
metadata: event.metadata
|
97
|
+
}
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def build_linkig_data(events)
|
102
|
+
[events].flatten.map do |event|
|
103
|
+
{
|
104
|
+
eventId: event.id,
|
105
|
+
eventType: '$>',
|
106
|
+
data: event.title,
|
107
|
+
}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
83
111
|
def make_request(method_name, path, body: {}, headers: {})
|
84
112
|
method = RequestMethod.new(method_name)
|
85
113
|
connection.send(method.to_s, path) do |req|
|
@@ -19,18 +19,20 @@ module EventStoreClient
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def read(stream_name, direction: 'forward', start: 0, count: per_page)
|
23
|
-
if direction == 'forward'
|
24
|
-
|
25
|
-
|
26
|
-
read_stream_backward(stream_name, start: start, count: count)
|
27
|
-
end
|
22
|
+
def read(stream_name, direction: 'forward', start: 0, count: per_page, resolve_links: nil)
|
23
|
+
read_stream_forward(stream_name, start: start, count: count) if direction == 'forward'
|
24
|
+
|
25
|
+
read_stream_backward(stream_name, start: start, count: count)
|
28
26
|
end
|
29
27
|
|
30
28
|
def delete_stream(stream_name, hard_delete: false) # rubocop:disable Lint/UnusedMethodArgument
|
31
29
|
event_store.delete(stream_name)
|
32
30
|
end
|
33
31
|
|
32
|
+
def link_to(stream_name, events)
|
33
|
+
append_to_stream(stream_name, events)
|
34
|
+
end
|
35
|
+
|
34
36
|
private
|
35
37
|
|
36
38
|
attr_reader :endpoint, :per_page
|
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: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Wilgosz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-schema
|
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
requirements: []
|
147
|
-
rubygems_version: 3.0.
|
147
|
+
rubygems_version: 3.0.3
|
148
148
|
signing_key:
|
149
149
|
specification_version: 4
|
150
150
|
summary: Ruby integration for https://eventstore.org
|