deimos-ruby 1.16.1 → 1.16.4

Sign up to get free protection for your applications and to get access to all the features.
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