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 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