deimos-ruby 2.0.0.pre.beta5 → 2.0.0.pre.beta7

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: ec1175b32af9a438344b507df915824244ac3c2f0756465bf9c032795aad65a6
4
- data.tar.gz: de5ded4703fd546c3257a8e5bdd52f502df9e755272588bd8636d5057e6f5279
3
+ metadata.gz: 4aeb59ae53a1c0b617581b477fd035fc76182fb2662e2c1655b4f9814747a26a
4
+ data.tar.gz: 58c80ee0fde7651ac46c8d99a8652598500c04757ce5364aa0ddda7b4ca02f9c
5
5
  SHA512:
6
- metadata.gz: 7e9db7f92753f6b3d4433ab8545f91f43e7179c9438849766567b88247216f159413c7ec6048ea58681bad5478d9a569da5ce1ab58cc72147ccecdd800130ce0
7
- data.tar.gz: a12e93d3db8bc7f9fb9f35afe43c9ec23ed3203a6fc4e80a1d1832403b1b77b664d6abdfa95da4d220bb1b4e348c215fa9e35c247de0e4a2d933b680e3cea544
6
+ metadata.gz: 7b366555ec5a9fd5f11a54e12c6db102c14a7675da3bfb6afc07b57729bfe21adf643505fb1290c28dcf072e451926d6e2c8cd55ae3ee58713630809d13c01ce
7
+ data.tar.gz: 48104ebcafa8ac7b0b911928e9aa65ad897747acf8f51279d6ae4bc4b66f26dba471c7329207bf723ec738eea645203cc8546d8f26fccfd204b652ee8eb70cf1
data/Gemfile CHANGED
@@ -4,4 +4,3 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in boilerplate.gemspec
6
6
  gemspec
7
- gem 'karafka', git: 'https://github.com/dorner/karafka', branch: 'redraw'
@@ -18,6 +18,10 @@ module Deimos
18
18
  partition_key: message[:partition_key])
19
19
  _process_message(m, message, config)
20
20
  message[:payload] = m.encoded_payload
21
+ message[:label] = {
22
+ original_payload: m.payload,
23
+ original_key: m.key
24
+ }
21
25
  message[:key] = m.encoded_key
22
26
  message[:partition_key] = if m.partition_key
23
27
  m.partition_key.to_s
@@ -36,22 +36,42 @@ module Deimos
36
36
 
37
37
  end
38
38
 
39
+ def payload(m)
40
+ return nil if m.nil?
41
+
42
+ if m.respond_to?(:payload)
43
+ m.payload
44
+ elsif m[:label]
45
+ m.dig(:label, :raw_payload)
46
+ else
47
+ m[:payload]
48
+ end
49
+ end
50
+
51
+ def key(m)
52
+ return nil if m.nil?
53
+
54
+ if m.respond_to?(:payload) && m.payload
55
+ m.key || m.payload['message_id']
56
+ elsif m.respond_to?(:[])
57
+ if m[:label]
58
+ m.dig(:label, :original_key)
59
+ elsif m[:payload].is_a?(String)
60
+ m[:key] || m[:payload_key]
61
+ else
62
+ payload = m[:payload]&.with_indifferent_access
63
+ m[:key] || m[:payload_key] || payload[:payload_key] || payload[:message_id]
64
+ end
65
+ end
66
+ end
67
+
39
68
  def messages_log_text(payload_log, messages)
40
69
  log_message = {}
41
70
 
42
71
  case payload_log
43
72
  when :keys
44
73
  keys = messages.map do |m|
45
- if m.respond_to?(:payload)
46
- m.key || m.payload['message_id']
47
- elsif m
48
- if m[:payload].is_a?(String)
49
- m[:key] || m[:payload_key]
50
- else
51
- payload = m[:payload]&.with_indifferent_access
52
- m[:key] || m[:payload_key] || payload[:payload_key] || payload[:message_id]
53
- end
54
- end
74
+ key(m)
55
75
  end
56
76
  log_message.merge!(
57
77
  payload_keys: keys
@@ -68,8 +88,8 @@ module Deimos
68
88
  log_message.merge!(
69
89
  payloads: messages.map do |m|
70
90
  {
71
- payload: m.respond_to?(:payload) ? m.payload : m[:payload],
72
- key: m.respond_to?(:payload) ? m.key : m[:key]
91
+ payload: payload(m),
92
+ key: key(m)
73
93
  }
74
94
  end
75
95
  )
@@ -36,6 +36,8 @@ module Deimos
36
36
  comparison == self.as_json
37
37
  end
38
38
 
39
+ alias_method :eql?, :==
40
+
39
41
  # @return [String]
40
42
  def inspect
41
43
  klass = self.class
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Deimos
4
- VERSION = '2.0.0-beta5'
4
+ VERSION = '2.0.0-beta7'
5
5
  end
@@ -100,4 +100,50 @@ RSpec.describe Deimos::ActiveRecordConsume::BatchConsumption do
100
100
  end
101
101
  end
102
102
  end
103
+
104
+ describe '#compact_messages' do
105
+ it 'for scalars' do
106
+ message_1 = Deimos::Message.new({ v: "first" }, key: 1234)
107
+ message_2 = Deimos::Message.new({ v: "last" }, key: 1234)
108
+ result = batch_consumer.send(:compact_messages, [message_1, message_2])
109
+ expect(result.size).to eq(1)
110
+ expect(result.first.equal?(message_2)).to eq(true)
111
+ end
112
+
113
+ it 'for hashes' do
114
+ message_1 = Deimos::Message.new({ v: "first" }, key: { a: 1, b:2.0, c: "c"})
115
+ message_2 = Deimos::Message.new({ v: "last" }, key: { a: 1, b:2.0, c: "c"})
116
+ result = batch_consumer.send(:compact_messages, [message_1, message_2])
117
+ expect(result.size).to eq(1)
118
+ expect(result.first.equal?(message_2)).to eq(true)
119
+ end
120
+
121
+ it 'for schema classes' do
122
+ module Schemas
123
+ class Key < Deimos::SchemaClass::Record
124
+ attr_accessor :some_name
125
+
126
+ # @override
127
+ def initialize(some_name: "")
128
+ super
129
+ self.some_name = some_name
130
+ end
131
+
132
+ # @override
133
+ def as_json(_opts={})
134
+ {
135
+ 'some_name' => @some_name
136
+ }
137
+ end
138
+ end
139
+ end
140
+
141
+ message_1 = Deimos::Message.new({ v: "first" }, key: Schemas::Key.new(some_name: "2"))
142
+ message_2 = Deimos::Message.new({ v: "last" }, key: Schemas::Key.new(some_name: "2"))
143
+
144
+ result = batch_consumer.send(:compact_messages, [message_1, message_2])
145
+ expect(result.size).to eq(1)
146
+ expect(result.first.equal?(message_2)).to eq(true) # The object is same as the latest one in the batch
147
+ end
148
+ end
103
149
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
4
+ require 'logger' # https://stackoverflow.com/questions/79360526/uninitialized-constant-activesupportloggerthreadsafelevellogger-nameerror
4
5
  require 'active_record'
5
6
  require 'action_controller/railtie'
6
7
  require 'database_cleaner'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deimos-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.beta5
4
+ version: 2.0.0.pre.beta7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Orner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-19 00:00:00.000000000 Z
11
+ date: 2025-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avro_turf