deimos-ruby 2.1.7 → 2.1.8

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: 3890d253c7d9b137c55d02e1968697b9a2921a8cd57dec3be49b6eb3ea50d670
4
- data.tar.gz: 4538ffbef398ea60d5fe1f3cd20e30a1fe4e45c00e2369717ea160491554d687
3
+ metadata.gz: db2890edc1a3d0148f1d2d17d488956140403691807b782b14fb59ab85e5eb70
4
+ data.tar.gz: 559be5246d5793112335575066f02ec07ed4310baf86bdb630a076d448770714
5
5
  SHA512:
6
- metadata.gz: 221bf0e05c603dda8f6451d4205ed4ea86f209fe8bdc4d6c43c5ad1a19aff57c9df80f9a82a3c134a31e78b6072eab076d6f3e8594fb8a01f4892857068f9aa0
7
- data.tar.gz: 41cec49b3a6913617398bf194fd1d8fb65304231b34aca051fad5c37307b2e617b571c220ff95aefec57b2200564a9827bddd37ae80553a8091d784561f0c6d5
6
+ metadata.gz: 75f32bba6112ba1cabb233c9333bb0f6e56029d30a85d24ccca5057302f103b76482e364fb183f3f8fa545f3dbb75f4f03404f4b12392ec4e8c4bea199a8ccf7
7
+ data.tar.gz: a8a745e864fd29d442fd4a4f474f58428f3ffe7fee1ea41e50ebebff8121da0aba8c91c5605ac6c991b91fe7ccb6ff03fbabf203dc296beb43e60e13f3b9c991
data/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## UNRELEASED
9
9
 
10
+ # 2.1.8 - 2025-08-11
11
+
12
+ - Feature: Producers can now customize the deletion payload, so different producers using the same model can send different delete messages.
13
+
10
14
  # 2.1.7 - 2025-07-23
11
15
 
12
16
  - Feature: Skip batch_record_list fill_primary_keys! if the primary key has already been filled during consumption
@@ -320,7 +324,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
320
324
  # 1.12.2 - 2021-12-10
321
325
 
322
326
  ### Features :star:
323
-
324
327
  - Added `Deimos.encode` and `Deimos.decode` for non-topic-related encoding and decoding.
325
328
 
326
329
  # 1.12.1 - 2021-11-02
@@ -331,7 +334,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
331
334
  # 1.12.0 - 2021-11-01
332
335
 
333
336
  ### Features :star:
334
-
335
337
  - Generate Schema classes from Avro Schemas
336
338
  - Use Schema Classes in your consumer and producer
337
339
 
@@ -365,7 +367,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
365
367
  - Added a `save_record` method to ActiveRecordConsumer in case calling code wants to work with the record before saving.
366
368
 
367
369
  - ### Fixes :wrench:
368
-
369
370
  - Fixed a regression where the default values for consumer / Phobos listener configs were not correct (they were all nil). This is technically a breaking change, but it puts the configs back the way they were at version 1.4 and matches the documentation.
370
371
 
371
372
  ## 1.9.2 - 2021-01-29
@@ -382,7 +383,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
382
383
  - Bumped the version of ruby-kafka to latest
383
384
 
384
385
  - ### Fixes :wrench:
385
-
386
386
  - Prevents DB Poller from reconnecting to DB if there is an open transaction
387
387
  - Replaces `before` by `prepend_before` for more consistent test setups.
388
388
  - Adds validation in the `kafka_producers` method (fixes [#90](https://github.com/flipp-oss/deimos/issues/90))
@@ -76,6 +76,15 @@ module Deimos
76
76
  Utils::SchemaClass.instance(payload, encoder.schema, encoder.namespace)
77
77
  end
78
78
 
79
+ # Deletion payload for a record by default, delegate to the
80
+ # model's deletion_payload. Producers may override this method to
81
+ # customize the deletion key/payload per producer.
82
+ # @param record [ActiveRecord::Base]
83
+ # @return [Hash]
84
+ def generate_deletion_payload(record)
85
+ record.deletion_payload
86
+ end
87
+
79
88
  # Query to use when polling the database with the DbPoller. Add
80
89
  # includes, joins, or wheres as necessary, or replace entirely.
81
90
  # @param time_from [Time] the time to start the query from.
@@ -100,7 +109,7 @@ module Deimos
100
109
  end
101
110
 
102
111
  # Post process records after publishing
103
- # @param records [Array<ActiveRecord::Base>]
112
+ # @param _records [Array<ActiveRecord::Base>]
104
113
  def post_process(_records)
105
114
  end
106
115
 
@@ -46,7 +46,9 @@ module Deimos
46
46
  def send_kafka_event_on_destroy
47
47
  return unless self.class.kafka_config[:delete]
48
48
 
49
- self.class.kafka_producers.each { |p| p.publish_list([self.deletion_payload]) }
49
+ self.class.kafka_producers.each do |p|
50
+ p.publish_list([p.generate_deletion_payload(self)])
51
+ end
50
52
  end
51
53
 
52
54
  # Payload to send after we are destroyed.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Deimos
4
- VERSION = '2.1.7'
4
+ VERSION = '2.1.8'
5
5
  end
@@ -105,23 +105,96 @@ module KafkaSourceSpec
105
105
  expect('my-topic-the-second').to have_sent(nil, widget.id)
106
106
  end
107
107
 
108
+ context 'multi-producer model using two different key fields' do
109
+ before(:each) do
110
+ class MultiKeyWidget < ActiveRecord::Base
111
+ include Deimos::KafkaSource
112
+ self.table_name = 'widgets'
113
+
114
+ def self.kafka_producers
115
+ [WidgetProducer, WidgetStringKeyProducer]
116
+ end
117
+ end
118
+
119
+ class WidgetStringKeyProducer < Deimos::ActiveRecordProducer
120
+ class << self
121
+
122
+ def generate_payload(attributes, record)
123
+ payload = super(attributes, record)
124
+ payload.merge('id' => record.model_id)
125
+
126
+ end
127
+
128
+ def generate_deletion_payload(record)
129
+ { payload_key: record.model_id }
130
+ end
131
+ end
132
+ end
133
+
134
+ Karafka::App.routes.redraw do
135
+ topic 'my-topic' do
136
+ namespace 'com.my-namespace'
137
+ schema 'Widget'
138
+ key_config field: :id
139
+ producer_class WidgetProducer
140
+ end
141
+
142
+ topic 'my-topic-the-Third' do
143
+ namespace 'com.my-namespace'
144
+ schema 'WidgetTheThird'
145
+ key_config field: :model_id
146
+ producer_class WidgetStringKeyProducer
147
+ end
148
+
149
+ end
150
+ end
151
+
152
+ it 'publishes create/delete with correct keys per producer (primary: id, secondary: model_id)' do
153
+ multi_key_widget = MultiKeyWidget.create!(widget_id: 7, model_id: 'model-id-123', name: 'name-123')
154
+
155
+ expect('my-topic').to have_sent({
156
+ widget_id: 7,
157
+ name: 'name-123',
158
+ id: multi_key_widget.id,
159
+ created_at: anything,
160
+ updated_at: anything
161
+ }, multi_key_widget.id)
162
+
163
+ expect('my-topic-the-Third').to have_sent({
164
+ widget_id: 7,
165
+ model_id: multi_key_widget.model_id,
166
+ id: multi_key_widget.model_id,
167
+ created_at: anything,
168
+ updated_at: anything
169
+ }, multi_key_widget.model_id)
170
+
171
+ expect(WidgetProducer).to receive(:generate_deletion_payload).and_call_original
172
+ expect(WidgetStringKeyProducer).to receive(:generate_deletion_payload).and_call_original
173
+
174
+ multi_key_widget.destroy
175
+
176
+ expect('my-topic').to have_sent(nil, multi_key_widget.id)
177
+ expect('my-topic-the-Third').to have_sent(nil, multi_key_widget.model_id)
178
+ end
179
+ end
180
+
108
181
  context 'with truncation off' do
109
182
  before(:each) do
110
183
  Deimos.config.producers.truncate_columns = false
111
184
  end
112
185
  it 'should not truncate values' do
113
- widget = Widget.create!(widget_id: 1, name: 'a'*500)
186
+ widget = Widget.create!(widget_id: 1, name: 'a' * 500)
114
187
  expect('my-topic').to have_sent({
115
188
  widget_id: 1,
116
- name: 'a'*500,
189
+ name: 'a' * 500,
117
190
  id: widget.id,
118
191
  created_at: anything,
119
192
  updated_at: anything
120
193
  }, 1)
121
- widget.update_attribute(:name, 'b'*500)
194
+ widget.update_attribute(:name, 'b' * 500)
122
195
  expect('my-topic').to have_sent({
123
196
  widget_id: 1,
124
- name: 'b'*500,
197
+ name: 'b' * 500,
125
198
  id: widget.id,
126
199
  created_at: anything,
127
200
  updated_at: anything
@@ -134,18 +207,18 @@ module KafkaSourceSpec
134
207
  Deimos.config.producers.truncate_columns = true
135
208
  end
136
209
  it 'should truncate values' do
137
- widget = Widget.create!(widget_id: 1, name: 'a'*500)
210
+ widget = Widget.create!(widget_id: 1, name: 'a' * 500)
138
211
  expect('my-topic').to have_sent({
139
212
  widget_id: 1,
140
- name: 'a'*100,
213
+ name: 'a' * 100,
141
214
  id: widget.id,
142
215
  created_at: anything,
143
216
  updated_at: anything
144
217
  }, 1)
145
- widget.update_attribute(:name, 'b'*500)
218
+ widget.update_attribute(:name, 'b' * 500)
146
219
  expect('my-topic').to have_sent({
147
220
  widget_id: 1,
148
- name: 'b'*100,
221
+ name: 'b' * 100,
149
222
  id: widget.id,
150
223
  created_at: anything,
151
224
  updated_at: anything
@@ -304,6 +377,7 @@ module KafkaSourceSpec
304
377
  [WidgetProducer]
305
378
  end
306
379
  end
380
+
307
381
  WidgetNoImportHook.reset_column_information
308
382
  end
309
383
 
@@ -0,0 +1,27 @@
1
+ {
2
+ "namespace": "com.my-namespace",
3
+ "name": "WidgetTheThird",
4
+ "type": "record",
5
+ "fields": [
6
+ {
7
+ "name": "id",
8
+ "type": "string"
9
+ },
10
+ {
11
+ "name": "widget_id",
12
+ "type": "long"
13
+ },
14
+ {
15
+ "name": "model_id",
16
+ "type": "string"
17
+ },
18
+ {
19
+ "name": "updated_at",
20
+ "type": "long"
21
+ },
22
+ {
23
+ "name": "created_at",
24
+ "type": "long"
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is autogenerated by Deimos, Do NOT modify
4
+ module Schemas; module MyNamespace
5
+ ### Primary Schema Class ###
6
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
7
+ class WidgetTheThird < Deimos::SchemaClass::Record
8
+
9
+ ### Attribute Accessors ###
10
+ # @return [String]
11
+ attr_accessor :id
12
+ # @return [Integer]
13
+ attr_accessor :widget_id
14
+ # @return [String]
15
+ attr_accessor :model_id
16
+ # @return [Integer]
17
+ attr_accessor :updated_at
18
+ # @return [Integer]
19
+ attr_accessor :created_at
20
+
21
+ # @override
22
+ def initialize(_from_message: false, id: nil,
23
+ widget_id: nil,
24
+ model_id: nil,
25
+ updated_at: nil,
26
+ created_at: nil)
27
+ @_from_message = _from_message
28
+ super
29
+ self.id = id
30
+ self.widget_id = widget_id
31
+ self.model_id = model_id
32
+ self.updated_at = updated_at
33
+ self.created_at = created_at
34
+ end
35
+
36
+ # @override
37
+ def schema
38
+ 'WidgetTheThird'
39
+ end
40
+
41
+ # @override
42
+ def namespace
43
+ 'com.my-namespace'
44
+ end
45
+
46
+ # @override
47
+ def as_json(_opts={})
48
+ {
49
+ 'id' => @id,
50
+ 'widget_id' => @widget_id,
51
+ 'model_id' => @model_id,
52
+ 'updated_at' => @updated_at,
53
+ 'created_at' => @created_at
54
+ }
55
+ end
56
+ end
57
+ end; end
@@ -1648,6 +1648,66 @@ module Schemas
1648
1648
  end
1649
1649
 
1650
1650
 
1651
+ spec/app/lib/schema_classes/widget_the_third.rb:
1652
+ # frozen_string_literal: true
1653
+
1654
+ # This file is autogenerated by Deimos, Do NOT modify
1655
+ module Schemas
1656
+ ### Primary Schema Class ###
1657
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1658
+ class WidgetTheThird < Deimos::SchemaClass::Record
1659
+
1660
+ ### Attribute Accessors ###
1661
+ # @return [String]
1662
+ attr_accessor :id
1663
+ # @return [Integer]
1664
+ attr_accessor :widget_id
1665
+ # @return [String]
1666
+ attr_accessor :model_id
1667
+ # @return [Integer]
1668
+ attr_accessor :updated_at
1669
+ # @return [Integer]
1670
+ attr_accessor :created_at
1671
+
1672
+ # @override
1673
+ def initialize(_from_message: false, id: nil,
1674
+ widget_id: nil,
1675
+ model_id: nil,
1676
+ updated_at: nil,
1677
+ created_at: nil)
1678
+ @_from_message = _from_message
1679
+ super
1680
+ self.id = id
1681
+ self.widget_id = widget_id
1682
+ self.model_id = model_id
1683
+ self.updated_at = updated_at
1684
+ self.created_at = created_at
1685
+ end
1686
+
1687
+ # @override
1688
+ def schema
1689
+ 'WidgetTheThird'
1690
+ end
1691
+
1692
+ # @override
1693
+ def namespace
1694
+ 'com.my-namespace'
1695
+ end
1696
+
1697
+ # @override
1698
+ def as_json(_opts={})
1699
+ {
1700
+ 'id' => @id,
1701
+ 'widget_id' => @widget_id,
1702
+ 'model_id' => @model_id,
1703
+ 'updated_at' => @updated_at,
1704
+ 'created_at' => @created_at
1705
+ }
1706
+ end
1707
+ end
1708
+ end
1709
+
1710
+
1651
1711
  spec/app/lib/schema_classes/yet_another_enum.rb:
1652
1712
  # frozen_string_literal: true
1653
1713
 
@@ -1653,3 +1653,63 @@ module Schemas
1653
1653
  end
1654
1654
  end
1655
1655
 
1656
+
1657
+ spec/app/lib/schema_classes/widget_the_third.rb:
1658
+ # frozen_string_literal: true
1659
+
1660
+ # This file is autogenerated by Deimos, Do NOT modify
1661
+ module Schemas
1662
+ ### Primary Schema Class ###
1663
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1664
+ class WidgetTheThird < Deimos::SchemaClass::Record
1665
+
1666
+ ### Attribute Accessors ###
1667
+ # @return [String]
1668
+ attr_accessor :id
1669
+ # @return [Integer]
1670
+ attr_accessor :widget_id
1671
+ # @return [String]
1672
+ attr_accessor :model_id
1673
+ # @return [Integer]
1674
+ attr_accessor :updated_at
1675
+ # @return [Integer]
1676
+ attr_accessor :created_at
1677
+
1678
+ # @override
1679
+ def initialize(_from_message: false, id: nil,
1680
+ widget_id: nil,
1681
+ model_id: nil,
1682
+ updated_at: nil,
1683
+ created_at: nil)
1684
+ @_from_message = _from_message
1685
+ super
1686
+ self.id = id
1687
+ self.widget_id = widget_id
1688
+ self.model_id = model_id
1689
+ self.updated_at = updated_at
1690
+ self.created_at = created_at
1691
+ end
1692
+
1693
+ # @override
1694
+ def schema
1695
+ 'WidgetTheThird'
1696
+ end
1697
+
1698
+ # @override
1699
+ def namespace
1700
+ 'com.my-namespace'
1701
+ end
1702
+
1703
+ # @override
1704
+ def as_json(_opts={})
1705
+ {
1706
+ 'id' => @id,
1707
+ 'widget_id' => @widget_id,
1708
+ 'model_id' => @model_id,
1709
+ 'updated_at' => @updated_at,
1710
+ 'created_at' => @created_at
1711
+ }
1712
+ end
1713
+ end
1714
+ end
1715
+
@@ -1648,6 +1648,66 @@ module Schemas
1648
1648
  end
1649
1649
 
1650
1650
 
1651
+ spec/app/lib/schema_classes/widget_the_third.rb:
1652
+ # frozen_string_literal: true
1653
+
1654
+ # This file is autogenerated by Deimos, Do NOT modify
1655
+ module Schemas
1656
+ ### Primary Schema Class ###
1657
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1658
+ class WidgetTheThird < Deimos::SchemaClass::Record
1659
+
1660
+ ### Attribute Accessors ###
1661
+ # @return [String]
1662
+ attr_accessor :id
1663
+ # @return [Integer]
1664
+ attr_accessor :widget_id
1665
+ # @return [String]
1666
+ attr_accessor :model_id
1667
+ # @return [Integer]
1668
+ attr_accessor :updated_at
1669
+ # @return [Integer]
1670
+ attr_accessor :created_at
1671
+
1672
+ # @override
1673
+ def initialize(_from_message: false, id: nil,
1674
+ widget_id: nil,
1675
+ model_id: nil,
1676
+ updated_at: nil,
1677
+ created_at: nil)
1678
+ @_from_message = _from_message
1679
+ super
1680
+ self.id = id
1681
+ self.widget_id = widget_id
1682
+ self.model_id = model_id
1683
+ self.updated_at = updated_at
1684
+ self.created_at = created_at
1685
+ end
1686
+
1687
+ # @override
1688
+ def schema
1689
+ 'WidgetTheThird'
1690
+ end
1691
+
1692
+ # @override
1693
+ def namespace
1694
+ 'com.my-namespace'
1695
+ end
1696
+
1697
+ # @override
1698
+ def as_json(_opts={})
1699
+ {
1700
+ 'id' => @id,
1701
+ 'widget_id' => @widget_id,
1702
+ 'model_id' => @model_id,
1703
+ 'updated_at' => @updated_at,
1704
+ 'created_at' => @created_at
1705
+ }
1706
+ end
1707
+ end
1708
+ end
1709
+
1710
+
1651
1711
  spec/app/lib/schema_classes/yet_another_enum.rb:
1652
1712
  # frozen_string_literal: true
1653
1713
 
@@ -1653,3 +1653,63 @@ module Schemas
1653
1653
  end
1654
1654
  end
1655
1655
 
1656
+
1657
+ spec/app/lib/schema_classes/widget_the_third.rb:
1658
+ # frozen_string_literal: true
1659
+
1660
+ # This file is autogenerated by Deimos, Do NOT modify
1661
+ module Schemas
1662
+ ### Primary Schema Class ###
1663
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1664
+ class WidgetTheThird < Deimos::SchemaClass::Record
1665
+
1666
+ ### Attribute Accessors ###
1667
+ # @return [String]
1668
+ attr_accessor :id
1669
+ # @return [Integer]
1670
+ attr_accessor :widget_id
1671
+ # @return [String]
1672
+ attr_accessor :model_id
1673
+ # @return [Integer]
1674
+ attr_accessor :updated_at
1675
+ # @return [Integer]
1676
+ attr_accessor :created_at
1677
+
1678
+ # @override
1679
+ def initialize(_from_message: false, id: nil,
1680
+ widget_id: nil,
1681
+ model_id: nil,
1682
+ updated_at: nil,
1683
+ created_at: nil)
1684
+ @_from_message = _from_message
1685
+ super
1686
+ self.id = id
1687
+ self.widget_id = widget_id
1688
+ self.model_id = model_id
1689
+ self.updated_at = updated_at
1690
+ self.created_at = created_at
1691
+ end
1692
+
1693
+ # @override
1694
+ def schema
1695
+ 'WidgetTheThird'
1696
+ end
1697
+
1698
+ # @override
1699
+ def namespace
1700
+ 'com.my-namespace'
1701
+ end
1702
+
1703
+ # @override
1704
+ def as_json(_opts={})
1705
+ {
1706
+ 'id' => @id,
1707
+ 'widget_id' => @widget_id,
1708
+ 'model_id' => @model_id,
1709
+ 'updated_at' => @updated_at,
1710
+ 'created_at' => @created_at
1711
+ }
1712
+ end
1713
+ end
1714
+ end
1715
+
@@ -1648,6 +1648,66 @@ module Schemas
1648
1648
  end
1649
1649
 
1650
1650
 
1651
+ spec/app/lib/schema_classes/widget_the_third.rb:
1652
+ # frozen_string_literal: true
1653
+
1654
+ # This file is autogenerated by Deimos, Do NOT modify
1655
+ module Schemas
1656
+ ### Primary Schema Class ###
1657
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1658
+ class WidgetTheThird < Deimos::SchemaClass::Record
1659
+
1660
+ ### Attribute Accessors ###
1661
+ # @return [String]
1662
+ attr_accessor :id
1663
+ # @return [Integer]
1664
+ attr_accessor :widget_id
1665
+ # @return [String]
1666
+ attr_accessor :model_id
1667
+ # @return [Integer]
1668
+ attr_accessor :updated_at
1669
+ # @return [Integer]
1670
+ attr_accessor :created_at
1671
+
1672
+ # @override
1673
+ def initialize(_from_message: false, id: nil,
1674
+ widget_id: nil,
1675
+ model_id: nil,
1676
+ updated_at: nil,
1677
+ created_at: nil)
1678
+ @_from_message = _from_message
1679
+ super
1680
+ self.id = id
1681
+ self.widget_id = widget_id
1682
+ self.model_id = model_id
1683
+ self.updated_at = updated_at
1684
+ self.created_at = created_at
1685
+ end
1686
+
1687
+ # @override
1688
+ def schema
1689
+ 'WidgetTheThird'
1690
+ end
1691
+
1692
+ # @override
1693
+ def namespace
1694
+ 'com.my-namespace'
1695
+ end
1696
+
1697
+ # @override
1698
+ def as_json(_opts={})
1699
+ {
1700
+ 'id' => @id,
1701
+ 'widget_id' => @widget_id,
1702
+ 'model_id' => @model_id,
1703
+ 'updated_at' => @updated_at,
1704
+ 'created_at' => @created_at
1705
+ }
1706
+ end
1707
+ end
1708
+ end
1709
+
1710
+
1651
1711
  spec/app/lib/schema_classes/yet_another_enum.rb:
1652
1712
  # frozen_string_literal: true
1653
1713
 
@@ -1653,3 +1653,63 @@ module Schemas
1653
1653
  end
1654
1654
  end
1655
1655
 
1656
+
1657
+ spec/app/lib/schema_classes/widget_the_third.rb:
1658
+ # frozen_string_literal: true
1659
+
1660
+ # This file is autogenerated by Deimos, Do NOT modify
1661
+ module Schemas
1662
+ ### Primary Schema Class ###
1663
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1664
+ class WidgetTheThird < Deimos::SchemaClass::Record
1665
+
1666
+ ### Attribute Accessors ###
1667
+ # @return [String]
1668
+ attr_accessor :id
1669
+ # @return [Integer]
1670
+ attr_accessor :widget_id
1671
+ # @return [String]
1672
+ attr_accessor :model_id
1673
+ # @return [Integer]
1674
+ attr_accessor :updated_at
1675
+ # @return [Integer]
1676
+ attr_accessor :created_at
1677
+
1678
+ # @override
1679
+ def initialize(_from_message: false, id: nil,
1680
+ widget_id: nil,
1681
+ model_id: nil,
1682
+ updated_at: nil,
1683
+ created_at: nil)
1684
+ @_from_message = _from_message
1685
+ super
1686
+ self.id = id
1687
+ self.widget_id = widget_id
1688
+ self.model_id = model_id
1689
+ self.updated_at = updated_at
1690
+ self.created_at = created_at
1691
+ end
1692
+
1693
+ # @override
1694
+ def schema
1695
+ 'WidgetTheThird'
1696
+ end
1697
+
1698
+ # @override
1699
+ def namespace
1700
+ 'com.my-namespace'
1701
+ end
1702
+
1703
+ # @override
1704
+ def as_json(_opts={})
1705
+ {
1706
+ 'id' => @id,
1707
+ 'widget_id' => @widget_id,
1708
+ 'model_id' => @model_id,
1709
+ 'updated_at' => @updated_at,
1710
+ 'created_at' => @created_at
1711
+ }
1712
+ end
1713
+ end
1714
+ end
1715
+
@@ -1648,6 +1648,66 @@ module Schemas
1648
1648
  end
1649
1649
 
1650
1650
 
1651
+ spec/app/lib/schema_classes/widget_the_third.rb:
1652
+ # frozen_string_literal: true
1653
+
1654
+ # This file is autogenerated by Deimos, Do NOT modify
1655
+ module Schemas
1656
+ ### Primary Schema Class ###
1657
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1658
+ class WidgetTheThird < Deimos::SchemaClass::Record
1659
+
1660
+ ### Attribute Accessors ###
1661
+ # @return [String]
1662
+ attr_accessor :id
1663
+ # @return [Integer]
1664
+ attr_accessor :widget_id
1665
+ # @return [String]
1666
+ attr_accessor :model_id
1667
+ # @return [Integer]
1668
+ attr_accessor :updated_at
1669
+ # @return [Integer]
1670
+ attr_accessor :created_at
1671
+
1672
+ # @override
1673
+ def initialize(_from_message: false, id: nil,
1674
+ widget_id: nil,
1675
+ model_id: nil,
1676
+ updated_at: nil,
1677
+ created_at: nil)
1678
+ @_from_message = _from_message
1679
+ super
1680
+ self.id = id
1681
+ self.widget_id = widget_id
1682
+ self.model_id = model_id
1683
+ self.updated_at = updated_at
1684
+ self.created_at = created_at
1685
+ end
1686
+
1687
+ # @override
1688
+ def schema
1689
+ 'WidgetTheThird'
1690
+ end
1691
+
1692
+ # @override
1693
+ def namespace
1694
+ 'com.my-namespace'
1695
+ end
1696
+
1697
+ # @override
1698
+ def as_json(_opts={})
1699
+ {
1700
+ 'id' => @id,
1701
+ 'widget_id' => @widget_id,
1702
+ 'model_id' => @model_id,
1703
+ 'updated_at' => @updated_at,
1704
+ 'created_at' => @created_at
1705
+ }
1706
+ end
1707
+ end
1708
+ end
1709
+
1710
+
1651
1711
  spec/app/lib/schema_classes/yet_another_enum.rb:
1652
1712
  # frozen_string_literal: true
1653
1713
 
@@ -1653,3 +1653,63 @@ module Schemas
1653
1653
  end
1654
1654
  end
1655
1655
 
1656
+
1657
+ spec/app/lib/schema_classes/widget_the_third.rb:
1658
+ # frozen_string_literal: true
1659
+
1660
+ # This file is autogenerated by Deimos, Do NOT modify
1661
+ module Schemas
1662
+ ### Primary Schema Class ###
1663
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1664
+ class WidgetTheThird < Deimos::SchemaClass::Record
1665
+
1666
+ ### Attribute Accessors ###
1667
+ # @return [String]
1668
+ attr_accessor :id
1669
+ # @return [Integer]
1670
+ attr_accessor :widget_id
1671
+ # @return [String]
1672
+ attr_accessor :model_id
1673
+ # @return [Integer]
1674
+ attr_accessor :updated_at
1675
+ # @return [Integer]
1676
+ attr_accessor :created_at
1677
+
1678
+ # @override
1679
+ def initialize(_from_message: false, id: nil,
1680
+ widget_id: nil,
1681
+ model_id: nil,
1682
+ updated_at: nil,
1683
+ created_at: nil)
1684
+ @_from_message = _from_message
1685
+ super
1686
+ self.id = id
1687
+ self.widget_id = widget_id
1688
+ self.model_id = model_id
1689
+ self.updated_at = updated_at
1690
+ self.created_at = created_at
1691
+ end
1692
+
1693
+ # @override
1694
+ def schema
1695
+ 'WidgetTheThird'
1696
+ end
1697
+
1698
+ # @override
1699
+ def namespace
1700
+ 'com.my-namespace'
1701
+ end
1702
+
1703
+ # @override
1704
+ def as_json(_opts={})
1705
+ {
1706
+ 'id' => @id,
1707
+ 'widget_id' => @widget_id,
1708
+ 'model_id' => @model_id,
1709
+ 'updated_at' => @updated_at,
1710
+ 'created_at' => @created_at
1711
+ }
1712
+ end
1713
+ end
1714
+ end
1715
+
@@ -1648,6 +1648,66 @@ module Schemas
1648
1648
  end
1649
1649
 
1650
1650
 
1651
+ spec/app/lib/schema_classes/widget_the_third.rb:
1652
+ # frozen_string_literal: true
1653
+
1654
+ # This file is autogenerated by Deimos, Do NOT modify
1655
+ module Schemas
1656
+ ### Primary Schema Class ###
1657
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1658
+ class WidgetTheThird < Deimos::SchemaClass::Record
1659
+
1660
+ ### Attribute Accessors ###
1661
+ # @return [String]
1662
+ attr_accessor :id
1663
+ # @return [Integer]
1664
+ attr_accessor :widget_id
1665
+ # @return [String]
1666
+ attr_accessor :model_id
1667
+ # @return [Integer]
1668
+ attr_accessor :updated_at
1669
+ # @return [Integer]
1670
+ attr_accessor :created_at
1671
+
1672
+ # @override
1673
+ def initialize(_from_message: false, id: nil,
1674
+ widget_id: nil,
1675
+ model_id: nil,
1676
+ updated_at: nil,
1677
+ created_at: nil)
1678
+ @_from_message = _from_message
1679
+ super
1680
+ self.id = id
1681
+ self.widget_id = widget_id
1682
+ self.model_id = model_id
1683
+ self.updated_at = updated_at
1684
+ self.created_at = created_at
1685
+ end
1686
+
1687
+ # @override
1688
+ def schema
1689
+ 'WidgetTheThird'
1690
+ end
1691
+
1692
+ # @override
1693
+ def namespace
1694
+ 'com.my-namespace'
1695
+ end
1696
+
1697
+ # @override
1698
+ def as_json(_opts={})
1699
+ {
1700
+ 'id' => @id,
1701
+ 'widget_id' => @widget_id,
1702
+ 'model_id' => @model_id,
1703
+ 'updated_at' => @updated_at,
1704
+ 'created_at' => @created_at
1705
+ }
1706
+ end
1707
+ end
1708
+ end
1709
+
1710
+
1651
1711
  spec/app/lib/schema_classes/yet_another_enum.rb:
1652
1712
  # frozen_string_literal: true
1653
1713
 
@@ -1653,3 +1653,63 @@ module Schemas
1653
1653
  end
1654
1654
  end
1655
1655
 
1656
+
1657
+ spec/app/lib/schema_classes/widget_the_third.rb:
1658
+ # frozen_string_literal: true
1659
+
1660
+ # This file is autogenerated by Deimos, Do NOT modify
1661
+ module Schemas
1662
+ ### Primary Schema Class ###
1663
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1664
+ class WidgetTheThird < Deimos::SchemaClass::Record
1665
+
1666
+ ### Attribute Accessors ###
1667
+ # @return [String]
1668
+ attr_accessor :id
1669
+ # @return [Integer]
1670
+ attr_accessor :widget_id
1671
+ # @return [String]
1672
+ attr_accessor :model_id
1673
+ # @return [Integer]
1674
+ attr_accessor :updated_at
1675
+ # @return [Integer]
1676
+ attr_accessor :created_at
1677
+
1678
+ # @override
1679
+ def initialize(_from_message: false, id: nil,
1680
+ widget_id: nil,
1681
+ model_id: nil,
1682
+ updated_at: nil,
1683
+ created_at: nil)
1684
+ @_from_message = _from_message
1685
+ super
1686
+ self.id = id
1687
+ self.widget_id = widget_id
1688
+ self.model_id = model_id
1689
+ self.updated_at = updated_at
1690
+ self.created_at = created_at
1691
+ end
1692
+
1693
+ # @override
1694
+ def schema
1695
+ 'WidgetTheThird'
1696
+ end
1697
+
1698
+ # @override
1699
+ def namespace
1700
+ 'com.my-namespace'
1701
+ end
1702
+
1703
+ # @override
1704
+ def as_json(_opts={})
1705
+ {
1706
+ 'id' => @id,
1707
+ 'widget_id' => @widget_id,
1708
+ 'model_id' => @model_id,
1709
+ 'updated_at' => @updated_at,
1710
+ 'created_at' => @created_at
1711
+ }
1712
+ end
1713
+ end
1714
+ end
1715
+
@@ -1733,3 +1733,63 @@ module Schemas; module Com; module MyNamespace
1733
1733
  end
1734
1734
  end; end; end
1735
1735
 
1736
+
1737
+ spec/app/lib/schema_classes/schemas/com/my_namespace/widget_the_third.rb:
1738
+ # frozen_string_literal: true
1739
+
1740
+ # This file is autogenerated by Deimos, Do NOT modify
1741
+ module Schemas; module Com; module MyNamespace
1742
+ ### Primary Schema Class ###
1743
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1744
+ class WidgetTheThird < Deimos::SchemaClass::Record
1745
+
1746
+ ### Attribute Accessors ###
1747
+ # @return [String]
1748
+ attr_accessor :id
1749
+ # @return [Integer]
1750
+ attr_accessor :widget_id
1751
+ # @return [String]
1752
+ attr_accessor :model_id
1753
+ # @return [Integer]
1754
+ attr_accessor :updated_at
1755
+ # @return [Integer]
1756
+ attr_accessor :created_at
1757
+
1758
+ # @override
1759
+ def initialize(_from_message: false, id: nil,
1760
+ widget_id: nil,
1761
+ model_id: nil,
1762
+ updated_at: nil,
1763
+ created_at: nil)
1764
+ @_from_message = _from_message
1765
+ super
1766
+ self.id = id
1767
+ self.widget_id = widget_id
1768
+ self.model_id = model_id
1769
+ self.updated_at = updated_at
1770
+ self.created_at = created_at
1771
+ end
1772
+
1773
+ # @override
1774
+ def schema
1775
+ 'WidgetTheThird'
1776
+ end
1777
+
1778
+ # @override
1779
+ def namespace
1780
+ 'com.my-namespace'
1781
+ end
1782
+
1783
+ # @override
1784
+ def as_json(_opts={})
1785
+ {
1786
+ 'id' => @id,
1787
+ 'widget_id' => @widget_id,
1788
+ 'model_id' => @model_id,
1789
+ 'updated_at' => @updated_at,
1790
+ 'created_at' => @created_at
1791
+ }
1792
+ end
1793
+ end
1794
+ end; end; end
1795
+
@@ -1733,3 +1733,63 @@ module Schemas; module MyNamespace
1733
1733
  end
1734
1734
  end; end
1735
1735
 
1736
+
1737
+ spec/app/lib/schema_classes/schemas/my_namespace/widget_the_third.rb:
1738
+ # frozen_string_literal: true
1739
+
1740
+ # This file is autogenerated by Deimos, Do NOT modify
1741
+ module Schemas; module MyNamespace
1742
+ ### Primary Schema Class ###
1743
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1744
+ class WidgetTheThird < Deimos::SchemaClass::Record
1745
+
1746
+ ### Attribute Accessors ###
1747
+ # @return [String]
1748
+ attr_accessor :id
1749
+ # @return [Integer]
1750
+ attr_accessor :widget_id
1751
+ # @return [String]
1752
+ attr_accessor :model_id
1753
+ # @return [Integer]
1754
+ attr_accessor :updated_at
1755
+ # @return [Integer]
1756
+ attr_accessor :created_at
1757
+
1758
+ # @override
1759
+ def initialize(_from_message: false, id: nil,
1760
+ widget_id: nil,
1761
+ model_id: nil,
1762
+ updated_at: nil,
1763
+ created_at: nil)
1764
+ @_from_message = _from_message
1765
+ super
1766
+ self.id = id
1767
+ self.widget_id = widget_id
1768
+ self.model_id = model_id
1769
+ self.updated_at = updated_at
1770
+ self.created_at = created_at
1771
+ end
1772
+
1773
+ # @override
1774
+ def schema
1775
+ 'WidgetTheThird'
1776
+ end
1777
+
1778
+ # @override
1779
+ def namespace
1780
+ 'com.my-namespace'
1781
+ end
1782
+
1783
+ # @override
1784
+ def as_json(_opts={})
1785
+ {
1786
+ 'id' => @id,
1787
+ 'widget_id' => @widget_id,
1788
+ 'model_id' => @model_id,
1789
+ 'updated_at' => @updated_at,
1790
+ 'created_at' => @created_at
1791
+ }
1792
+ end
1793
+ end
1794
+ end; end
1795
+
@@ -1648,6 +1648,66 @@ module Schemas
1648
1648
  end
1649
1649
 
1650
1650
 
1651
+ spec/app/lib/schema_classes/widget_the_third.rb:
1652
+ # frozen_string_literal: true
1653
+
1654
+ # This file is autogenerated by Deimos, Do NOT modify
1655
+ module Schemas
1656
+ ### Primary Schema Class ###
1657
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1658
+ class WidgetTheThird < Deimos::SchemaClass::Record
1659
+
1660
+ ### Attribute Accessors ###
1661
+ # @return [String]
1662
+ attr_accessor :id
1663
+ # @return [Integer]
1664
+ attr_accessor :widget_id
1665
+ # @return [String]
1666
+ attr_accessor :model_id
1667
+ # @return [Integer]
1668
+ attr_accessor :updated_at
1669
+ # @return [Integer]
1670
+ attr_accessor :created_at
1671
+
1672
+ # @override
1673
+ def initialize(_from_message: false, id: nil,
1674
+ widget_id: nil,
1675
+ model_id: nil,
1676
+ updated_at: nil,
1677
+ created_at: nil)
1678
+ @_from_message = _from_message
1679
+ super
1680
+ self.id = id
1681
+ self.widget_id = widget_id
1682
+ self.model_id = model_id
1683
+ self.updated_at = updated_at
1684
+ self.created_at = created_at
1685
+ end
1686
+
1687
+ # @override
1688
+ def schema
1689
+ 'WidgetTheThird'
1690
+ end
1691
+
1692
+ # @override
1693
+ def namespace
1694
+ 'com.my-namespace'
1695
+ end
1696
+
1697
+ # @override
1698
+ def as_json(_opts={})
1699
+ {
1700
+ 'id' => @id,
1701
+ 'widget_id' => @widget_id,
1702
+ 'model_id' => @model_id,
1703
+ 'updated_at' => @updated_at,
1704
+ 'created_at' => @created_at
1705
+ }
1706
+ end
1707
+ end
1708
+ end
1709
+
1710
+
1651
1711
  spec/app/lib/schema_classes/yet_another_enum.rb:
1652
1712
  # frozen_string_literal: true
1653
1713
 
@@ -1653,3 +1653,63 @@ module Schemas
1653
1653
  end
1654
1654
  end
1655
1655
 
1656
+
1657
+ spec/app/lib/schema_classes/widget_the_third.rb:
1658
+ # frozen_string_literal: true
1659
+
1660
+ # This file is autogenerated by Deimos, Do NOT modify
1661
+ module Schemas
1662
+ ### Primary Schema Class ###
1663
+ # Autogenerated Schema for Record at com.my-namespace.WidgetTheThird
1664
+ class WidgetTheThird < Deimos::SchemaClass::Record
1665
+
1666
+ ### Attribute Accessors ###
1667
+ # @return [String]
1668
+ attr_accessor :id
1669
+ # @return [Integer]
1670
+ attr_accessor :widget_id
1671
+ # @return [String]
1672
+ attr_accessor :model_id
1673
+ # @return [Integer]
1674
+ attr_accessor :updated_at
1675
+ # @return [Integer]
1676
+ attr_accessor :created_at
1677
+
1678
+ # @override
1679
+ def initialize(_from_message: false, id: nil,
1680
+ widget_id: nil,
1681
+ model_id: nil,
1682
+ updated_at: nil,
1683
+ created_at: nil)
1684
+ @_from_message = _from_message
1685
+ super
1686
+ self.id = id
1687
+ self.widget_id = widget_id
1688
+ self.model_id = model_id
1689
+ self.updated_at = updated_at
1690
+ self.created_at = created_at
1691
+ end
1692
+
1693
+ # @override
1694
+ def schema
1695
+ 'WidgetTheThird'
1696
+ end
1697
+
1698
+ # @override
1699
+ def namespace
1700
+ 'com.my-namespace'
1701
+ end
1702
+
1703
+ # @override
1704
+ def as_json(_opts={})
1705
+ {
1706
+ 'id' => @id,
1707
+ 'widget_id' => @widget_id,
1708
+ 'model_id' => @model_id,
1709
+ 'updated_at' => @updated_at,
1710
+ 'created_at' => @created_at
1711
+ }
1712
+ end
1713
+ end
1714
+ end
1715
+
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.1.7
4
+ version: 2.1.8
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-07-23 00:00:00.000000000 Z
11
+ date: 2025-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avro_turf
@@ -577,6 +577,7 @@ files:
577
577
  - spec/schemas/com/my-namespace/Wibble.avsc
578
578
  - spec/schemas/com/my-namespace/Widget.avsc
579
579
  - spec/schemas/com/my-namespace/WidgetTheSecond.avsc
580
+ - spec/schemas/com/my-namespace/WidgetTheThird.avsc
580
581
  - spec/schemas/com/my-namespace/my-suborg/MyLongNamespaceSchema.avsc
581
582
  - spec/schemas/com/my-namespace/request/CreateTopic.avsc
582
583
  - spec/schemas/com/my-namespace/request/Index.avsc
@@ -609,6 +610,7 @@ files:
609
610
  - spec/schemas/my_namespace/wibble.rb
610
611
  - spec/schemas/my_namespace/widget.rb
611
612
  - spec/schemas/my_namespace/widget_the_second.rb
613
+ - spec/schemas/my_namespace/widget_the_third.rb
612
614
  - spec/snapshots/consumers-no-nest.snap
613
615
  - spec/snapshots/consumers.snap
614
616
  - spec/snapshots/consumers_and_producers-no-nest.snap
@@ -707,6 +709,7 @@ test_files:
707
709
  - spec/schemas/com/my-namespace/Wibble.avsc
708
710
  - spec/schemas/com/my-namespace/Widget.avsc
709
711
  - spec/schemas/com/my-namespace/WidgetTheSecond.avsc
712
+ - spec/schemas/com/my-namespace/WidgetTheThird.avsc
710
713
  - spec/schemas/com/my-namespace/my-suborg/MyLongNamespaceSchema.avsc
711
714
  - spec/schemas/com/my-namespace/request/CreateTopic.avsc
712
715
  - spec/schemas/com/my-namespace/request/Index.avsc
@@ -739,6 +742,7 @@ test_files:
739
742
  - spec/schemas/my_namespace/wibble.rb
740
743
  - spec/schemas/my_namespace/widget.rb
741
744
  - spec/schemas/my_namespace/widget_the_second.rb
745
+ - spec/schemas/my_namespace/widget_the_third.rb
742
746
  - spec/snapshots/consumers-no-nest.snap
743
747
  - spec/snapshots/consumers.snap
744
748
  - spec/snapshots/consumers_and_producers-no-nest.snap