event_store_client 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|