event_store_client 0.1.6 → 0.1.7
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08af7988b22788f181f313f057f739a3c78f538cf53758eb075391551e4d9baf'
|
4
|
+
data.tar.gz: ca38daf119afa7676e910dc4ca2cad2ab8fd16d6a675ed6fde48335d2db670bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21dcbc1dafdc7362cd54373ff93f1343397aa432d90ab935f286fd49b921421b88728f5d41178f8075a465cc948fc7ecbf15b42a7489e6565e31467c367bbaff
|
7
|
+
data.tar.gz: '098272251a70ae10f095f9f118fdf2ba197cfe12e586b3ee6d31e96501ceea7032fe25964f087861b7938edd6c6204ceb057135713ef9c89377d59651bb1fc9b'
|
@@ -5,9 +5,12 @@ require 'dry-struct'
|
|
5
5
|
module EventStoreClient
|
6
6
|
class Client
|
7
7
|
NoCallMethodOnSubscriber = Class.new(StandardError)
|
8
|
+
WrongExpectedEventVersion = Class.new(StandardError)
|
8
9
|
|
9
10
|
def publish(stream:, events:, expected_version: nil)
|
10
11
|
connection.publish(stream: stream, events: events, expected_version: expected_version)
|
12
|
+
rescue StoreAdapter::Api::Client::WrongExpectedEventVersion => e
|
13
|
+
raise WrongExpectedEventVersion.new(e.message)
|
11
14
|
end
|
12
15
|
|
13
16
|
def read(stream, direction: 'forward', start: 0, all: false)
|
@@ -61,12 +64,15 @@ module EventStoreClient
|
|
61
64
|
nil
|
62
65
|
end
|
63
66
|
|
64
|
-
|
67
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
68
|
+
def link_to(stream:, events:, expected_version: nil)
|
65
69
|
raise ArgumentError if !stream || stream == ''
|
66
70
|
raise ArgumentError if events.nil? || (events.is_a?(Array) && events.empty?)
|
67
|
-
|
68
|
-
|
71
|
+
connection.link_to(stream, events, expected_version: expected_version)
|
72
|
+
rescue StoreAdapter::Api::Client::WrongExpectedEventVersion => e
|
73
|
+
raise WrongExpectedEventVersion.new(e.message)
|
69
74
|
end
|
75
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
70
76
|
|
71
77
|
attr_accessor :connection, :service_name
|
72
78
|
|
@@ -6,8 +6,7 @@ require 'json'
|
|
6
6
|
|
7
7
|
module EventStoreClient
|
8
8
|
class Event < Dry::Struct
|
9
|
-
|
10
|
-
|
9
|
+
attribute :id, Types::Strict::String.optional.default(nil)
|
11
10
|
attribute :type, Types::Strict::String
|
12
11
|
attribute :title, Types::Strict::String.optional.default(nil)
|
13
12
|
attribute :data, Types::Strict::String.default('{}')
|
@@ -16,7 +15,7 @@ module EventStoreClient
|
|
16
15
|
private
|
17
16
|
|
18
17
|
def initialize(**args)
|
19
|
-
|
18
|
+
id = args[:id] || SecureRandom.uuid
|
20
19
|
hash_meta = JSON.parse(args[:metadata] || '{}')
|
21
20
|
hash_meta['created_at'] ||= Time.now
|
22
21
|
args[:metadata] = JSON.generate(hash_meta)
|
@@ -4,14 +4,17 @@ module EventStoreClient
|
|
4
4
|
module StoreAdapter
|
5
5
|
module Api
|
6
6
|
class Client
|
7
|
+
WrongExpectedEventVersion = Class.new(StandardError)
|
8
|
+
|
7
9
|
def append_to_stream(stream_name, events, expected_version: nil)
|
8
10
|
headers = {
|
9
|
-
'ES-ExpectedVersion' => expected_version
|
10
|
-
}.reject { |_key, val| val.empty? }
|
11
|
+
'ES-ExpectedVersion' => expected_version&.to_s
|
12
|
+
}.reject { |_key, val| val.nil? || val.empty? }
|
11
13
|
|
12
14
|
data = build_events_data(events)
|
13
|
-
|
14
|
-
|
15
|
+
response = make_request(:post, "/streams/#{stream_name}", body: data, headers: headers)
|
16
|
+
validate_response(response, expected_version)
|
17
|
+
response
|
15
18
|
end
|
16
19
|
|
17
20
|
def delete_stream(stream_name, hard_delete)
|
@@ -69,14 +72,20 @@ module EventStoreClient
|
|
69
72
|
)
|
70
73
|
end
|
71
74
|
|
72
|
-
def link_to(stream_name, events)
|
75
|
+
def link_to(stream_name, events, expected_version: nil)
|
73
76
|
data = build_linkig_data(events)
|
77
|
+
headers = {
|
78
|
+
'ES-ExpectedVersion' => expected_version&.to_s
|
79
|
+
}.reject { |_key, val| val.nil? || val.empty? }
|
74
80
|
|
75
|
-
make_request(
|
81
|
+
response = make_request(
|
76
82
|
:post,
|
77
83
|
"/streams/#{stream_name}",
|
78
|
-
body: data
|
84
|
+
body: data,
|
85
|
+
headers: headers
|
79
86
|
)
|
87
|
+
validate_response(response, expected_version)
|
88
|
+
response
|
80
89
|
end
|
81
90
|
|
82
91
|
def ack(url)
|
@@ -125,6 +134,14 @@ module EventStoreClient
|
|
125
134
|
def connection
|
126
135
|
@connection ||= Api::Connection.new(endpoint).call
|
127
136
|
end
|
137
|
+
|
138
|
+
def validate_response(resp, expected_version)
|
139
|
+
return unless resp.status == 400 && resp.reason_phrase == 'Wrong expected EventNumber'
|
140
|
+
raise WrongExpectedEventVersion.new(
|
141
|
+
"current version: #{resp.headers.fetch('es-currentversion')} | "\
|
142
|
+
"expected: #{expected_version}"
|
143
|
+
)
|
144
|
+
end
|
128
145
|
end
|
129
146
|
end
|
130
147
|
end
|
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.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Wilgosz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-schema
|