cyclone_lariat 0.3.3 → 0.3.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: 3fe1faa17fac474b04c873eb81272506724e8ac3ac23e18549b2f63287174e97
4
- data.tar.gz: d645f4859619af32a96448a8357aaf08c6ffc31e1138666df149e44284e00389
3
+ metadata.gz: de7e05c5fba57a9db6c827549404f12b1f88be0336b00d2d5dfb4dc77132b328
4
+ data.tar.gz: 54d81b79a812fdf91513cdee886933d32055fd405c55bb032aae4dec81ac1ff3
5
5
  SHA512:
6
- metadata.gz: 4acacb0d92e72eb15a7247f04e06ad171935f3ab54da976a3427aec45af35beac28f7ce2bbfd79213ce7331cf07541bc7d4a839ff44fc0c76359119b5e341503
7
- data.tar.gz: 23b2bc0a32aa5b10392392249f4f23ee8db12edaafd994fd5505b854da3a5f8773f5d101e972678d6e8c33b74bde1f5a2ab4d68ff757852c513e409c5de9bf89
6
+ metadata.gz: 3d8ce1ebcd03c53309165592b7e4e0cbe342a3033694afdc639e033fb76a88dd1f340ee2204c5602f02399a5e9e56f47a7483dba867d9aafcd9947b3958933c1
7
+ data.tar.gz: 8c8668274a9435e56804739e6625703b733810e46401aca602c04f51763274dafa9456f625fc315ae7b322c62d4a426a582a62db8b6061716ad46aced0ab5ef0
@@ -56,7 +56,6 @@ module CycloneLariat
56
56
  publisher == other.publisher &&
57
57
  type == other.type &&
58
58
  client_error&.message == other.client_error&.message &&
59
- client_error&.details == other.client_error&.details &&
60
59
  version == other.version &&
61
60
  sent_at.to_i == other.sent_at.to_i &&
62
61
  received_at.to_i == other.received_at.to_i &&
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CycloneLariat
4
+ class MessagesMapper
5
+ class << self
6
+ def from_row(row)
7
+ return if row.nil?
8
+
9
+ row[:data] = hash_from_json_column(row[:data])
10
+ row[:client_error_details] = hash_from_json_column(row[:client_error_details]) if row[:client_error_details]
11
+ row
12
+ end
13
+
14
+ def to_row(input)
15
+ row = {
16
+ uuid: input.uuid,
17
+ kind: input.kind,
18
+ type: input.type,
19
+ publisher: input.publisher,
20
+ data: JSON.generate(input.data),
21
+ client_error_message: input.client_error&.message,
22
+ client_error_details: JSON.generate(input.client_error&.details),
23
+ version: input.version,
24
+ sent_at: input.sent_at
25
+ }
26
+ row
27
+ end
28
+
29
+ private
30
+
31
+ def hash_from_json_column(data)
32
+ return JSON.parse(data) if data.is_a?(String)
33
+
34
+ if pg_json_extension_enabled?
35
+ return data.to_h if data.is_a?(Sequel::Postgres::JSONHash)
36
+ return JSON.parse(data.to_s) if data.is_a?(Sequel::Postgres::JSONString)
37
+ end
38
+
39
+ raise ArgumentError, "Unknown type of `#{data}`"
40
+ end
41
+
42
+ def pg_json_extension_enabled?
43
+ Object.const_defined?('Sequel::Postgres::JSONHash')
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'event'
4
+ require_relative 'messages_mapper'
4
5
 
5
6
  module CycloneLariat
6
7
  class MessagesRepo
@@ -11,17 +12,7 @@ module CycloneLariat
11
12
  end
12
13
 
13
14
  def create(msg)
14
- dataset.insert(
15
- uuid: msg.uuid,
16
- kind: msg.kind,
17
- type: msg.type,
18
- publisher: msg.publisher,
19
- data: JSON.generate(msg.data),
20
- client_error_message: msg.client_error&.message,
21
- client_error_details: JSON.generate(msg.client_error&.details),
22
- version: msg.version,
23
- sent_at: msg.sent_at
24
- )
15
+ dataset.insert MessagesMapper.to_row(msg)
25
16
  end
26
17
 
27
18
  def exists?(uuid:)
@@ -36,34 +27,20 @@ module CycloneLariat
36
27
  end
37
28
 
38
29
  def find(uuid:)
39
- raw = dataset.where(uuid: uuid).first
40
- return nil unless raw
41
-
42
- raw[:data] = JSON.parse(raw[:data], symbolize_names: true)
43
- if raw[:client_error_details]
44
- raw[:client_error_details] = JSON.parse(raw[:client_error_details], symbolize_names: true)
45
- end
46
- build raw
30
+ row = dataset.where(uuid: uuid).first
31
+ build MessagesMapper.from_row(row)
47
32
  end
48
33
 
49
34
  def each_unprocessed
50
- dataset.where(processed_at: nil).each do |raw|
51
- raw[:data] = JSON.parse(raw[:data], symbolize_names: true)
52
- if raw[:client_error_details]
53
- raw[:client_error_details] = JSON.parse(raw[:client_error_details], symbolize_names: true)
54
- end
55
- msg = build raw
35
+ dataset.where(processed_at: nil).each do |row|
36
+ msg = build MessagesMapper.from_row(row)
56
37
  yield(msg)
57
38
  end
58
39
  end
59
40
 
60
41
  def each_with_client_errors
61
- dataset.where { (processed_at !~ nil) & (client_error_message !~ nil) }.each do |raw|
62
- raw[:data] = JSON.parse(raw[:data], symbolize_names: true)
63
- if raw[:client_error_details]
64
- raw[:client_error_details] = JSON.parse(raw[:client_error_details], symbolize_names: true)
65
- end
66
- msg = build raw
42
+ dataset.where { (processed_at !~ nil) & (client_error_message !~ nil) }.each do |row|
43
+ msg = build MessagesMapper.from_row(row)
67
44
  yield(msg)
68
45
  end
69
46
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CycloneLariat
4
- VERSION = '0.3.3'
4
+ VERSION = '0.3.4'
5
5
  end
@@ -3,6 +3,7 @@
3
3
  require_relative 'cyclone_lariat/sns_client'
4
4
  require_relative 'cyclone_lariat/errors'
5
5
  require_relative 'cyclone_lariat/event'
6
+ require_relative 'cyclone_lariat/messages_mapper'
6
7
  require_relative 'cyclone_lariat/messages_repo'
7
8
  require_relative 'cyclone_lariat/middleware'
8
9
  require_relative 'cyclone_lariat/version'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cyclone_lariat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Kudrin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-14 00:00:00.000000000 Z
12
+ date: 2021-11-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk-sns
@@ -279,6 +279,7 @@ files:
279
279
  - lib/cyclone_lariat/command.rb
280
280
  - lib/cyclone_lariat/errors.rb
281
281
  - lib/cyclone_lariat/event.rb
282
+ - lib/cyclone_lariat/messages_mapper.rb
282
283
  - lib/cyclone_lariat/messages_repo.rb
283
284
  - lib/cyclone_lariat/middleware.rb
284
285
  - lib/cyclone_lariat/sns_client.rb