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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e81933b68523d17042d1f99dea18e5ff7eb37e78a454f79aa90be7f49b60cdf
4
- data.tar.gz: d8491b83c7a910c9837d24c3be75ba0e906056c05ce3bfbbc7f78c39ee6f4986
3
+ metadata.gz: 5dcca0e1322bc8037b475d5041c4134c959ad3a93aa3c28b2717b52706c6b679
4
+ data.tar.gz: b9c1f859faa365ccc357c1ed5d4715482530a1c2e57695efa88ac247ab2f688f
5
5
  SHA512:
6
- metadata.gz: 0f20a8af161ceab94386cfcb63bb1912c136925beac78691f5cfda3498765353cc18ff5d4899f61903702a0f1b8d107feb9a68b9a119349cdd04537adcacd40b
7
- data.tar.gz: 72062cefec94fae885535789e9bb0e282117bb2d634b06e4c151178ba83e9e4af4936a3b1e5c7eb1e32660735c72ee345bcc8f1092aa796c2fca148dc39e37a0
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
- JSON.parse(args[:metadata] || '{}').merge(created_at: Time.now)
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
- metadata: serializer.serialize(event.metadata),
8
+ type: event.class.to_s,
9
9
  data: serializer.serialize(event.data),
10
- type: event.class.to_s
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
- metadata: metadata,
26
+ id: event.id,
27
+ type: event.type,
28
+ title: event.title,
27
29
  data: data,
28
- type: event.type
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 = [events].flatten.map do |event|
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
- make_request(:get, "/streams/#{stream_name}/#{start}/#{direction}/#{count}")
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
- read_stream_forward(stream_name, start: start, count: count)
25
- else
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EventStoreClient
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.4'
5
5
  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.3
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: 2019-12-18 00:00:00.000000000 Z
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.6
147
+ rubygems_version: 3.0.3
148
148
  signing_key:
149
149
  specification_version: 4
150
150
  summary: Ruby integration for https://eventstore.org