deimos-ruby 1.16.1 → 1.16.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.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Gemfile +6 -0
  5. data/README.md +22 -0
  6. data/lib/deimos/active_record_consume/batch_consumption.rb +7 -2
  7. data/lib/deimos/active_record_consume/batch_slicer.rb +2 -0
  8. data/lib/deimos/active_record_consume/message_consumption.rb +8 -4
  9. data/lib/deimos/active_record_consumer.rb +7 -4
  10. data/lib/deimos/active_record_producer.rb +10 -0
  11. data/lib/deimos/backends/base.rb +4 -2
  12. data/lib/deimos/backends/kafka.rb +1 -0
  13. data/lib/deimos/backends/kafka_async.rb +1 -0
  14. data/lib/deimos/config/configuration.rb +4 -0
  15. data/lib/deimos/config/phobos_config.rb +2 -1
  16. data/lib/deimos/consume/batch_consumption.rb +8 -1
  17. data/lib/deimos/consume/message_consumption.rb +4 -1
  18. data/lib/deimos/instrumentation.rb +11 -4
  19. data/lib/deimos/kafka_message.rb +1 -0
  20. data/lib/deimos/kafka_source.rb +5 -0
  21. data/lib/deimos/kafka_topic_info.rb +4 -0
  22. data/lib/deimos/message.rb +19 -2
  23. data/lib/deimos/metrics/datadog.rb +2 -1
  24. data/lib/deimos/metrics/mock.rb +2 -2
  25. data/lib/deimos/metrics/provider.rb +6 -0
  26. data/lib/deimos/monkey_patches/phobos_cli.rb +1 -1
  27. data/lib/deimos/monkey_patches/phobos_producer.rb +1 -0
  28. data/lib/deimos/producer.rb +12 -6
  29. data/lib/deimos/schema_backends/base.rb +31 -17
  30. data/lib/deimos/schema_backends/mock.rb +2 -2
  31. data/lib/deimos/schema_class/base.rb +9 -5
  32. data/lib/deimos/schema_class/enum.rb +4 -2
  33. data/lib/deimos/schema_class/record.rb +12 -6
  34. data/lib/deimos/shared_config.rb +6 -2
  35. data/lib/deimos/test_helpers.rb +21 -4
  36. data/lib/deimos/tracing/datadog.rb +1 -1
  37. data/lib/deimos/tracing/mock.rb +4 -3
  38. data/lib/deimos/tracing/provider.rb +5 -0
  39. data/lib/deimos/utils/db_poller.rb +9 -1
  40. data/lib/deimos/utils/db_producer.rb +14 -2
  41. data/lib/deimos/utils/deadlock_retry.rb +3 -0
  42. data/lib/deimos/utils/inline_consumer.rb +14 -6
  43. data/lib/deimos/utils/lag_reporter.rb +11 -0
  44. data/lib/deimos/utils/schema_controller_mixin.rb +8 -0
  45. data/lib/deimos/version.rb +1 -1
  46. data/lib/deimos.rb +3 -2
  47. data/lib/generators/deimos/active_record_generator.rb +1 -1
  48. data/lib/generators/deimos/db_backend_generator.rb +1 -0
  49. data/lib/generators/deimos/db_poller_generator.rb +1 -0
  50. data/lib/generators/deimos/schema_class/templates/schema_record.rb.tt +13 -5
  51. data/lib/generators/deimos/schema_class_generator.rb +51 -24
  52. data/rbs_collection.lock.yaml +176 -0
  53. data/rbs_collection.yaml +15 -0
  54. data/regenerate_test_schema_classes.rb +68 -0
  55. data/sig/avro.rbs +14 -0
  56. data/sig/defs.rbs +1859 -0
  57. data/sig/fig_tree.rbs +2 -0
  58. data/spec/active_record_producer_spec.rb +24 -0
  59. data/spec/generators/schema_class/my_schema_spec.rb +16 -0
  60. data/spec/generators/schema_class/my_schema_with_circular_reference_spec.rb +1 -1
  61. data/spec/generators/schema_class/my_schema_with_complex_types_spec.rb +32 -24
  62. data/spec/producer_spec.rb +11 -11
  63. data/spec/schemas/{generated.rb → my_namespace/generated.rb} +28 -32
  64. data/spec/schemas/{my_nested_schema.rb → my_namespace/my_nested_schema.rb} +23 -16
  65. data/spec/schemas/{my_schema.rb → my_namespace/my_schema.rb} +12 -5
  66. data/spec/schemas/my_namespace/my_schema_compound_key.rb +41 -0
  67. data/spec/schemas/my_namespace/my_schema_id_key.rb +36 -0
  68. data/spec/schemas/{my_schema_key.rb → my_namespace/my_schema_key.rb} +3 -3
  69. data/spec/schemas/my_namespace/my_schema_with_boolean.rb +41 -0
  70. data/spec/schemas/{my_schema_with_circular_reference.rb → my_namespace/my_schema_with_circular_reference.rb} +15 -10
  71. data/spec/schemas/{my_schema_with_complex_type.rb → my_namespace/my_schema_with_complex_type.rb} +34 -49
  72. data/spec/schemas/my_namespace/my_schema_with_date_time.rb +56 -0
  73. data/spec/schemas/my_namespace/my_schema_with_id.rb +51 -0
  74. data/spec/schemas/my_namespace/my_schema_with_unique_id.rb +56 -0
  75. data/spec/schemas/my_namespace/wibble.rb +76 -0
  76. data/spec/schemas/my_namespace/widget.rb +56 -0
  77. data/spec/schemas/my_namespace/widget_the_second.rb +56 -0
  78. data/spec/schemas/request/create_topic.rb +36 -0
  79. data/spec/schemas/request/index.rb +36 -0
  80. data/spec/schemas/request/update_request.rb +36 -0
  81. data/spec/schemas/response/create_topic.rb +36 -0
  82. data/spec/schemas/response/index.rb +36 -0
  83. data/spec/schemas/response/update_response.rb +36 -0
  84. data/spec/snapshots/consumers-no-nest.snap +93 -86
  85. data/spec/snapshots/consumers.snap +94 -87
  86. data/spec/snapshots/consumers_and_producers-no-nest.snap +108 -87
  87. data/spec/snapshots/consumers_and_producers.snap +109 -88
  88. data/spec/snapshots/consumers_circular-no-nest.snap +93 -86
  89. data/spec/snapshots/consumers_circular.snap +94 -87
  90. data/spec/snapshots/consumers_complex_types-no-nest.snap +93 -86
  91. data/spec/snapshots/consumers_complex_types.snap +94 -87
  92. data/spec/snapshots/consumers_nested-no-nest.snap +93 -86
  93. data/spec/snapshots/consumers_nested.snap +94 -87
  94. data/spec/snapshots/namespace_folders.snap +111 -90
  95. data/spec/snapshots/producers_with_key-no-nest.snap +94 -87
  96. data/spec/snapshots/producers_with_key.snap +95 -88
  97. data/spec/spec_helper.rb +2 -1
  98. metadata +53 -15
data/sig/fig_tree.rbs ADDED
@@ -0,0 +1,2 @@
1
+ class FigTree
2
+ end
@@ -45,6 +45,24 @@ describe Deimos::ActiveRecordProducer do
45
45
  record_class Widget
46
46
  end
47
47
  stub_const('MyProducerWithUniqueID', producer_class)
48
+
49
+ producer_class = Class.new(Deimos::ActiveRecordProducer) do
50
+ schema 'MySchemaWithUniqueId'
51
+ namespace 'com.my-namespace'
52
+ topic 'my-topic-with-unique-id'
53
+ key_config field: :id
54
+ record_class Widget
55
+
56
+ # :nodoc:
57
+ def self.post_process(batch)
58
+ batch.each do |message|
59
+ message.test_id = 'post_processed'
60
+ message.save!
61
+ end
62
+ end
63
+ end
64
+
65
+ stub_const('MyProducerWithPostProcess', producer_class)
48
66
  end
49
67
 
50
68
  describe 'produce' do
@@ -85,6 +103,12 @@ describe Deimos::ActiveRecordProducer do
85
103
  )
86
104
  end
87
105
 
106
+ it 'should post process the batch of records in #send_events' do
107
+ widget = Widget.create!(test_id: 'abc3', some_int: 4)
108
+ MyProducerWithPostProcess.send_events([widget])
109
+ expect(widget.reload.test_id).to eq('post_processed')
110
+ end
111
+
88
112
  end
89
113
  end
90
114
  end
@@ -0,0 +1,16 @@
1
+ RSpec.describe Schemas::MyNamespace::MySchema do
2
+ let(:key) { Schemas::MyNamespace::MySchemaKey.new(test_id: 123) }
3
+
4
+ it 'should produce a tombstone with a hash' do
5
+ result = described_class.tombstone({test_id: 123})
6
+ expect(result.payload_key).to eq(key)
7
+ expect(result.to_h).to eq({ payload_key: { 'test_id' => 123}})
8
+ end
9
+
10
+ it 'should work with a record' do
11
+ key = Schemas::MyNamespace::MySchemaKey.new(test_id: 123)
12
+ result = described_class.tombstone(key)
13
+ expect(result.payload_key).to eq(key)
14
+ expect(result.to_h).to eq({ payload_key: { 'test_id' => 123}})
15
+ end
16
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # For testing the generated class.
4
- RSpec.describe Schemas::MySchemaWithCircularReference do
4
+ RSpec.describe Schemas::MyNamespace::MySchemaWithCircularReference do
5
5
  let(:payload_hash) do
6
6
  {
7
7
  properties: {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # For testing the generated class.
4
- RSpec.describe Schemas::MySchemaWithComplexType do
4
+ RSpec.describe Schemas::MyNamespace::MySchemaWithComplexType do
5
5
  let(:payload_hash) do
6
6
  {
7
7
  test_id: 'test id',
@@ -9,16 +9,16 @@ RSpec.describe Schemas::MySchemaWithComplexType do
9
9
  test_string_array: %w(abc def),
10
10
  test_int_array: [123, 456],
11
11
  some_integer_map: { 'int_1' => 1, 'int_2' => 2 },
12
- some_record: Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'field 1'),
13
- some_optional_record: Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'field 2'),
14
- some_record_array: [Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'field 3'),
15
- Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'field 4')],
12
+ some_record: described_class::ARecord.new(a_record_field: 'field 1'),
13
+ some_optional_record: described_class::ARecord.new(a_record_field: 'field 2'),
14
+ some_record_array: [described_class::ARecord.new(a_record_field: 'field 3'),
15
+ described_class::ARecord.new(a_record_field: 'field 4')],
16
16
  some_record_map: {
17
- 'record_1' => Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'field 5'),
18
- 'record_2' => Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'field 6')
17
+ 'record_1' => described_class::ARecord.new(a_record_field: 'field 5'),
18
+ 'record_2' => described_class::ARecord.new(a_record_field: 'field 6')
19
19
  },
20
- some_enum_array: [Schemas::MySchemaWithComplexType::AnEnum.new('sym1'),
21
- Schemas::MySchemaWithComplexType::AnEnum.new('sym2')]
20
+ some_enum_array: [described_class::AnEnum.new('sym1'),
21
+ described_class::AnEnum.new('sym2')]
22
22
  }
23
23
  end
24
24
 
@@ -51,6 +51,14 @@ RSpec.describe Schemas::MySchemaWithComplexType do
51
51
 
52
52
  end
53
53
 
54
+ describe '.tombstone' do
55
+ it 'should return a tombstone' do
56
+ record = described_class.tombstone('foo')
57
+ expect(record.tombstone_key).to eq('foo')
58
+ expect(record.to_h).to eq({payload_key: 'foo'})
59
+ end
60
+ end
61
+
54
62
  describe 'base class methods' do
55
63
  let(:klass) do
56
64
  described_class.new(**payload_hash)
@@ -116,7 +124,7 @@ RSpec.describe Schemas::MySchemaWithComplexType do
116
124
  payload_hash.delete(:some_record)
117
125
  klass = described_class.new(**payload_hash)
118
126
  expect(klass.some_record).
119
- to eq(Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'Test String'))
127
+ to eq(described_class::ARecord.new(a_record_field: 'Test String'))
120
128
  end
121
129
 
122
130
  it 'should set some_record to nil' do
@@ -139,26 +147,26 @@ RSpec.describe Schemas::MySchemaWithComplexType do
139
147
 
140
148
  it 'should get the value of some_record_array' do
141
149
  some_record_array = klass.some_record_array
142
- expect(some_record_array.first).to be_instance_of(Schemas::MySchemaWithComplexType::ARecord)
150
+ expect(some_record_array.first).to be_instance_of(described_class::ARecord)
143
151
  expect(some_record_array.first.a_record_field).to eq('field 3')
144
152
  end
145
153
 
146
154
  it 'should get the value of some_record_map' do
147
155
  some_record_map = klass.some_record_map
148
156
  expect(some_record_map['record_1']).
149
- to be_instance_of(Schemas::MySchemaWithComplexType::ARecord)
157
+ to be_instance_of(described_class::ARecord)
150
158
  expect(some_record_map['record_1'].a_record_field).to eq('field 5')
151
159
  end
152
160
 
153
161
  it 'should get the value of some_enum_array' do
154
162
  some_enum_array = klass.some_enum_array
155
- expect(some_enum_array.first).to be_instance_of(Schemas::MySchemaWithComplexType::AnEnum)
163
+ expect(some_enum_array.first).to be_instance_of(described_class::AnEnum)
156
164
  expect(some_enum_array.first.value).to eq('sym1')
157
165
  end
158
166
 
159
167
  it 'should get the value of some_record' do
160
168
  record = klass.some_record
161
- expect(record).to be_instance_of(Schemas::MySchemaWithComplexType::ARecord)
169
+ expect(record).to be_instance_of(described_class::ARecord)
162
170
  expect(record.a_record_field).to eq('field 1')
163
171
  expect(record.to_h).to eq({ 'a_record_field' => 'field 1' })
164
172
  end
@@ -180,40 +188,40 @@ RSpec.describe Schemas::MySchemaWithComplexType do
180
188
 
181
189
  it 'should modify the value of some_optional_record' do
182
190
  expect(klass.some_optional_record).
183
- to eq(Schemas::MySchemaWithComplexType::ARecord.new(a_record_field: 'field 2'))
184
- klass.some_optional_record = Schemas::MySchemaWithComplexType::ARecord.
191
+ to eq(described_class::ARecord.new(a_record_field: 'field 2'))
192
+ klass.some_optional_record = described_class::ARecord.
185
193
  new(a_record_field: 'new field')
186
194
 
187
- expect(klass.some_optional_record).to eq(Schemas::MySchemaWithComplexType::ARecord.
195
+ expect(klass.some_optional_record).to eq(described_class::ARecord.
188
196
  new(a_record_field: 'new field'))
189
197
  expect(klass.some_optional_record.as_json).to eq({ 'a_record_field' => 'new field' })
190
198
  end
191
199
 
192
200
  it 'should accept a hash object inner records' do
193
201
  klass.some_optional_record = { a_record_field: 'new field' }
194
- expect(klass.some_optional_record).to eq(Schemas::MySchemaWithComplexType::ARecord.
195
- new(a_record_field: 'new field'))
202
+ expect(klass.some_optional_record).
203
+ to eq(described_class::ARecord.new(a_record_field: 'new field'))
196
204
  expect(klass.some_optional_record.as_json).to eq({ 'a_record_field' => 'new field' })
197
205
  end
198
206
 
199
207
  it 'should modify the value of some_enum_array' do
200
208
  klass.some_enum_array.first.value = 'new_sym'
201
209
  expect(klass.some_enum_array.first).
202
- to eq(Schemas::MySchemaWithComplexType::AnEnum.new('new_sym'))
210
+ to eq(described_class::AnEnum.new('new_sym'))
203
211
 
204
- klass.some_enum_array.second.an_enum = Schemas::MySchemaWithComplexType::AnEnum.
212
+ klass.some_enum_array.second.an_enum = described_class::AnEnum.
205
213
  new('other_sym')
206
214
  expect(klass.some_enum_array.second.an_enum).to eq('other_sym')
207
215
  end
208
216
 
209
217
  it 'should modify the value of some_record_map' do
210
218
  klass.some_record_map['record_1'].a_record_field = 'new field'
211
- expect(klass.some_record_map['record_1']).to eq(Schemas::MySchemaWithComplexType::ARecord.
219
+ expect(klass.some_record_map['record_1']).to eq(described_class::ARecord.
212
220
  new(a_record_field: 'new field'))
213
221
 
214
- klass.some_record_map['record_2'] = Schemas::MySchemaWithComplexType::ARecord.
222
+ klass.some_record_map['record_2'] = described_class::ARecord.
215
223
  new(a_record_field: 'other field')
216
- expect(klass.some_record_map['record_2']).to eq(Schemas::MySchemaWithComplexType::ARecord.
224
+ expect(klass.some_record_map['record_2']).to eq(described_class::ARecord.
217
225
  new(a_record_field: 'other field'))
218
226
  end
219
227
  end
@@ -397,7 +397,7 @@ module ProducerTest
397
397
  end
398
398
  expect(MyProducer.encoder).to receive(:validate).and_raise('OH NOES')
399
399
  expect {
400
- MyProducer.publish(Schemas::MySchema.new(test_id: 'foo', some_int: 'invalid'))
400
+ MyProducer.publish(Schemas::MyNamespace::MySchema.new(test_id: 'foo', some_int: 'invalid'))
401
401
  }.to raise_error('OH NOES')
402
402
  Deimos.unsubscribe(subscriber)
403
403
  end
@@ -420,8 +420,8 @@ module ProducerTest
420
420
  ).and_call_original
421
421
 
422
422
  MyProducer.publish_list(
423
- [Schemas::MySchema.new(test_id: 'foo', some_int: 123),
424
- Schemas::MySchema.new(test_id: 'bar', some_int: 124)]
423
+ [Schemas::MyNamespace::MySchema.new(test_id: 'foo', some_int: 123),
424
+ Schemas::MyNamespace::MySchema.new(test_id: 'bar', some_int: 124)]
425
425
  )
426
426
  expect('my-topic').to have_sent('test_id' => 'foo', 'some_int' => 123)
427
427
  expect('your-topic').not_to have_sent('test_id' => 'foo', 'some_int' => 123)
@@ -432,8 +432,8 @@ module ProducerTest
432
432
  expect(described_class).not_to receive(:produce_batch)
433
433
  Deimos.configure { |c| c.producers.disabled = true }
434
434
  MyProducer.publish_list(
435
- [Schemas::MySchema.new(test_id: 'foo', some_int: 123),
436
- Schemas::MySchema.new(test_id: 'bar', some_int: 124)]
435
+ [Schemas::MyNamespace::MySchema.new(test_id: 'foo', some_int: 123),
436
+ Schemas::MyNamespace::MySchema.new(test_id: 'bar', some_int: 124)]
437
437
  )
438
438
  expect(MyProducer.topic).not_to have_sent(anything)
439
439
  end
@@ -452,8 +452,8 @@ module ProducerTest
452
452
  }, { topic: 'my-topic-value' })
453
453
 
454
454
  MyProducer.publish_list(
455
- [Schemas::MySchema.new(test_id: 'foo', some_int: 123),
456
- Schemas::MySchema.new(test_id: 'bar', some_int: 124)]
455
+ [Schemas::MyNamespace::MySchema.new(test_id: 'foo', some_int: 123),
456
+ Schemas::MyNamespace::MySchema.new(test_id: 'bar', some_int: 124)]
457
457
  )
458
458
  end
459
459
 
@@ -464,19 +464,19 @@ module ProducerTest
464
464
  { topic: 'my-topic2-key' })
465
465
 
466
466
  MySchemaProducer.publish_list(
467
- [Schemas::MySchema.new(test_id: 'foo', some_int: 123, payload_key: { 'test_id' => 'foo_key' }),
468
- Schemas::MySchema.new(test_id: 'bar', some_int: 124, payload_key: { 'test_id' => 'bar_key' })]
467
+ [Schemas::MyNamespace::MySchema.new(test_id: 'foo', some_int: 123, payload_key: { 'test_id' => 'foo_key' }),
468
+ Schemas::MyNamespace::MySchema.new(test_id: 'bar', some_int: 124, payload_key: { 'test_id' => 'bar_key' })]
469
469
  )
470
470
  end
471
471
 
472
472
  it 'should properly encode and coerce values with a nested record' do
473
473
  expect(MyNestedSchemaProducer.encoder).to receive(:encode_key).with('test_id', 'foo', topic: 'my-topic-key')
474
474
  MyNestedSchemaProducer.publish(
475
- Schemas::MyNestedSchema.new(
475
+ Schemas::MyNamespace::MyNestedSchema.new(
476
476
  test_id: 'foo',
477
477
  test_float: BigDecimal('123.456'),
478
478
  test_array: ['1'],
479
- some_nested_record: Schemas::MyNestedSchema::MyNestedRecord.new(
479
+ some_nested_record: Schemas::MyNamespace::MyNestedSchema::MyNestedRecord.new(
480
480
  some_int: 123,
481
481
  some_float: BigDecimal('456.789'),
482
482
  some_string: '123',
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is autogenerated by Deimos, Do NOT modify
4
- module Schemas
4
+ module Schemas; module MyNamespace
5
5
  ### Primary Schema Class ###
6
6
  # Autogenerated Schema for Record at com.my-namespace.Generated
7
7
  class Generated < Deimos::SchemaClass::Record
@@ -9,27 +9,27 @@ module Schemas
9
9
  ### Secondary Schema Classes ###
10
10
  # Autogenerated Schema for Record at com.my-namespace.ARecord
11
11
  class ARecord < Deimos::SchemaClass::Record
12
-
12
+
13
13
  ### Attribute Accessors ###
14
- # @param value [String]
14
+ # @return [String]
15
15
  attr_accessor :a_record_field
16
-
16
+
17
17
  # @override
18
18
  def initialize(a_record_field: nil)
19
19
  super
20
20
  self.a_record_field = a_record_field
21
21
  end
22
-
22
+
23
23
  # @override
24
24
  def schema
25
25
  'ARecord'
26
26
  end
27
-
27
+
28
28
  # @override
29
29
  def namespace
30
30
  'com.my-namespace'
31
31
  end
32
-
32
+
33
33
  # @override
34
34
  def as_json(_opts={})
35
35
  {
@@ -42,22 +42,11 @@ module Schemas
42
42
  class AnEnum < Deimos::SchemaClass::Enum
43
43
  # @return ['sym1', 'sym2']
44
44
  attr_accessor :an_enum
45
-
46
- # :nodoc:
47
- def initialize(an_enum)
48
- super
49
- self.an_enum = an_enum
50
- end
51
-
45
+
52
46
  # @override
53
47
  def symbols
54
48
  %w(sym1 sym2)
55
49
  end
56
-
57
- # @override
58
- def as_json(_opts={})
59
- @an_enum
60
- end
61
50
  end
62
51
 
63
52
 
@@ -68,34 +57,34 @@ module Schemas
68
57
  attr_reader :a_record
69
58
 
70
59
  ### Attribute Accessors ###
71
- # @param value [String]
60
+ # @return [String]
72
61
  attr_accessor :a_string
73
- # @param value [Integer]
62
+ # @return [Integer]
74
63
  attr_accessor :a_int
75
- # @param value [Integer]
64
+ # @return [Integer]
76
65
  attr_accessor :a_long
77
- # @param value [Float]
66
+ # @return [Float]
78
67
  attr_accessor :a_float
79
- # @param value [Float]
68
+ # @return [Float]
80
69
  attr_accessor :a_double
81
- # @param value [nil, Integer]
70
+ # @return [nil, Integer]
82
71
  attr_accessor :an_optional_int
83
- # @param values [Array<Integer>]
72
+ # @return [Array<Integer>]
84
73
  attr_accessor :an_array
85
- # @param values [Hash<String, String>]
74
+ # @return [Hash<String, String>]
86
75
  attr_accessor :a_map
87
- # @param value [String]
76
+ # @return [String]
88
77
  attr_accessor :timestamp
89
- # @param value [String]
78
+ # @return [String]
90
79
  attr_accessor :message_id
91
80
 
92
81
  ### Attribute Writers ###
93
- # @param value [AnEnum]
82
+ # @return [AnEnum]
94
83
  def an_enum=(value)
95
84
  @an_enum = AnEnum.initialize_from_value(value)
96
85
  end
97
86
 
98
- # @param value [ARecord]
87
+ # @return [ARecord]
99
88
  def a_record=(value)
100
89
  @a_record = ARecord.initialize_from_value(value)
101
90
  end
@@ -138,6 +127,13 @@ module Schemas
138
127
  'com.my-namespace'
139
128
  end
140
129
 
130
+ def self.tombstone(key)
131
+ record = self.new
132
+ record.tombstone_key = key
133
+ record.a_string = key
134
+ record
135
+ end
136
+
141
137
  # @override
142
138
  def as_json(_opts={})
143
139
  {
@@ -156,4 +152,4 @@ module Schemas
156
152
  }
157
153
  end
158
154
  end
159
- end
155
+ end; end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is autogenerated by Deimos, Do NOT modify
4
- module Schemas
4
+ module Schemas; module MyNamespace
5
5
  ### Primary Schema Class ###
6
6
  # Autogenerated Schema for Record at com.my-namespace.MyNestedSchema
7
7
  class MyNestedSchema < Deimos::SchemaClass::Record
@@ -9,17 +9,17 @@ module Schemas
9
9
  ### Secondary Schema Classes ###
10
10
  # Autogenerated Schema for Record at com.my-namespace.MyNestedRecord
11
11
  class MyNestedRecord < Deimos::SchemaClass::Record
12
-
12
+
13
13
  ### Attribute Accessors ###
14
- # @param value [Integer]
14
+ # @return [Integer]
15
15
  attr_accessor :some_int
16
- # @param value [Float]
16
+ # @return [Float]
17
17
  attr_accessor :some_float
18
- # @param value [String]
18
+ # @return [String]
19
19
  attr_accessor :some_string
20
- # @param value [nil, Integer]
20
+ # @return [nil, Integer]
21
21
  attr_accessor :some_optional_int
22
-
22
+
23
23
  # @override
24
24
  def initialize(some_int: nil,
25
25
  some_float: nil,
@@ -31,17 +31,17 @@ module Schemas
31
31
  self.some_string = some_string
32
32
  self.some_optional_int = some_optional_int
33
33
  end
34
-
34
+
35
35
  # @override
36
36
  def schema
37
37
  'MyNestedRecord'
38
38
  end
39
-
39
+
40
40
  # @override
41
41
  def namespace
42
42
  'com.my-namespace'
43
43
  end
44
-
44
+
45
45
  # @override
46
46
  def as_json(_opts={})
47
47
  {
@@ -61,20 +61,20 @@ module Schemas
61
61
  attr_reader :some_optional_record
62
62
 
63
63
  ### Attribute Accessors ###
64
- # @param value [String]
64
+ # @return [String]
65
65
  attr_accessor :test_id
66
- # @param value [Float]
66
+ # @return [Float]
67
67
  attr_accessor :test_float
68
- # @param values [Array<String>]
68
+ # @return [Array<String>]
69
69
  attr_accessor :test_array
70
70
 
71
71
  ### Attribute Writers ###
72
- # @param value [MyNestedRecord]
72
+ # @return [MyNestedRecord]
73
73
  def some_nested_record=(value)
74
74
  @some_nested_record = MyNestedRecord.initialize_from_value(value)
75
75
  end
76
76
 
77
- # @param value [nil, MyNestedRecord]
77
+ # @return [nil, MyNestedRecord]
78
78
  def some_optional_record=(value)
79
79
  @some_optional_record = MyNestedRecord.initialize_from_value(value)
80
80
  end
@@ -103,6 +103,13 @@ module Schemas
103
103
  'com.my-namespace'
104
104
  end
105
105
 
106
+ def self.tombstone(key)
107
+ record = self.new
108
+ record.tombstone_key = key
109
+ record.test_id = key
110
+ record
111
+ end
112
+
106
113
  # @override
107
114
  def as_json(_opts={})
108
115
  {
@@ -114,4 +121,4 @@ module Schemas
114
121
  }
115
122
  end
116
123
  end
117
- end
124
+ end; end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is autogenerated by Deimos, Do NOT modify
4
- module Schemas
4
+ module Schemas; module MyNamespace
5
5
  ### Primary Schema Class ###
6
6
  # Autogenerated Schema for Record at com.my-namespace.MySchema
7
7
  class MySchema < Deimos::SchemaClass::Record
@@ -11,13 +11,13 @@ module Schemas
11
11
  attr_reader :payload_key
12
12
 
13
13
  ### Attribute Accessors ###
14
- # @param value [String]
14
+ # @return [String]
15
15
  attr_accessor :test_id
16
- # @param value [Integer]
16
+ # @return [Integer]
17
17
  attr_accessor :some_int
18
18
 
19
19
  ### Attribute Writers ###
20
- # @param value [MySchemaKey]
20
+ # @return [MySchemaKey]
21
21
  def payload_key=(value)
22
22
  @payload_key = MySchemaKey.initialize_from_value(value)
23
23
  end
@@ -42,6 +42,13 @@ module Schemas
42
42
  'com.my-namespace'
43
43
  end
44
44
 
45
+ def self.tombstone(key)
46
+ record = self.new
47
+ record.tombstone_key = MySchemaKey.initialize_from_value(key)
48
+ record.payload_key = key
49
+ record
50
+ end
51
+
45
52
  # @override
46
53
  def as_json(_opts={})
47
54
  {
@@ -51,4 +58,4 @@ module Schemas
51
58
  }
52
59
  end
53
60
  end
54
- end
61
+ end; end
@@ -0,0 +1,41 @@
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.MySchemaCompound_key
7
+ class MySchemaCompoundKey < Deimos::SchemaClass::Record
8
+
9
+ ### Attribute Accessors ###
10
+ # @return [String]
11
+ attr_accessor :part_one
12
+ # @return [String]
13
+ attr_accessor :part_two
14
+
15
+ # @override
16
+ def initialize(part_one: nil,
17
+ part_two: nil)
18
+ super
19
+ self.part_one = part_one
20
+ self.part_two = part_two
21
+ end
22
+
23
+ # @override
24
+ def schema
25
+ 'MySchemaCompound_key'
26
+ end
27
+
28
+ # @override
29
+ def namespace
30
+ 'com.my-namespace'
31
+ end
32
+
33
+ # @override
34
+ def as_json(_opts={})
35
+ {
36
+ 'part_one' => @part_one,
37
+ 'part_two' => @part_two
38
+ }
39
+ end
40
+ end
41
+ end; end
@@ -0,0 +1,36 @@
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.MySchemaId_key
7
+ class MySchemaIdKey < Deimos::SchemaClass::Record
8
+
9
+ ### Attribute Accessors ###
10
+ # @return [Integer]
11
+ attr_accessor :id
12
+
13
+ # @override
14
+ def initialize(id: nil)
15
+ super
16
+ self.id = id
17
+ end
18
+
19
+ # @override
20
+ def schema
21
+ 'MySchemaId_key'
22
+ end
23
+
24
+ # @override
25
+ def namespace
26
+ 'com.my-namespace'
27
+ end
28
+
29
+ # @override
30
+ def as_json(_opts={})
31
+ {
32
+ 'id' => @id
33
+ }
34
+ end
35
+ end
36
+ end; end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This file is autogenerated by Deimos, Do NOT modify
4
- module Schemas
4
+ module Schemas; module MyNamespace
5
5
  ### Primary Schema Class ###
6
6
  # Autogenerated Schema for Record at com.my-namespace.MySchema_key
7
7
  class MySchemaKey < Deimos::SchemaClass::Record
8
8
 
9
9
  ### Attribute Accessors ###
10
- # @param value [String]
10
+ # @return [String]
11
11
  attr_accessor :test_id
12
12
 
13
13
  # @override
@@ -33,4 +33,4 @@ module Schemas
33
33
  }
34
34
  end
35
35
  end
36
- end
36
+ end; end