deimos-ruby 2.1.2 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60b8a371a3669c29d7f59694bc49af057412313aeb08eebab2b88d4dbc5b6da4
4
- data.tar.gz: 9c7231954c6db7ee55ffd4d3e18351bc7470acd443555f270c589da37e054631
3
+ metadata.gz: 3b6f32c7658a4b3cc134cc544bb0d4291b90e6424df288f4b4fcfd7fa93c630f
4
+ data.tar.gz: 2f3ebc77c9c622f5256d77448fec7c7303134519acaa1611f985002838f0278e
5
5
  SHA512:
6
- metadata.gz: 294627ab365d88be5f0617422a88bbd15fe81b46eae81dc663aff66174377145ccbbac218c205b5fbaf2d0dbdef31f0586e43607381423e0cd13cbb673f6913a
7
- data.tar.gz: 216b9300910d20feb4786f4798542fc32a6a1f957dc19dc50209877853424a5d13e208f08f42c38fe420c86ec73e6b620e95a8f20d8700c1a7b3713f8f54472b
6
+ metadata.gz: 4654cbbe510338b52186bf6eb507c930cb932293c0018f4ca5cda83acb1b901ecc646af7adbed3ca167ea1d756b1c3a19857cc727ac7de902028718fad13b9cd
7
+ data.tar.gz: b4cc6c4f30a5c6e5d94b2c56f194ee3fc1b04467f577928f89e6550fca1d0aee2b078c6b616a68db820c132d67a985fbe444302143eed7c218cae50f91d920fd
data/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## UNRELEASED
9
9
 
10
+ # 2.1.4 - 2025-07-22
11
+
12
+ - Feature: Add interrogation methods (e.g. `approved?`) for schema class enums.
13
+ - Fix: Schema class generation was missing payload_key for a number of cases.
14
+ - Fix: Possible crashes when using schema classes with Avro messages.
15
+
10
16
  ## 2.1.2 - 2025-07-21
11
17
 
12
18
  - Fix: Backwards-compatible fix wasn't working correctly.
data/karafka.rb CHANGED
@@ -1 +1,71 @@
1
- # blank load file, used in regenerate_test_schema_classes.rb
1
+ # Used in regenerate_test_schema_classes.rb
2
+
3
+ class MyConsumer < Deimos::Consumer
4
+ def consume(payload, metadata); end
5
+ end
6
+
7
+ require_relative "./lib/generators/deimos/schema_class_generator"
8
+
9
+ Deimos.configure do |deimos_config|
10
+ deimos_config.schema.nest_child_schemas = true
11
+ deimos_config.schema.path = "spec/schemas"
12
+ deimos_config.schema.backend = :avro_validation
13
+ deimos_config.schema.generated_class_path = './spec/schemas'
14
+ deimos_config.schema.use_full_namespace = true
15
+ deimos_config.schema.schema_namespace_map = {
16
+ 'com' => 'Schemas',
17
+ 'com.my-namespace.my-suborg' => %w(Schemas MyNamespace)
18
+ }
19
+ end
20
+
21
+ class KarafkaApp < Karafka::App
22
+ setup do
23
+ config.kafka = {
24
+ "bootstrap.servers": '127.0.0.1:9092'
25
+ }
26
+ end
27
+ routes.draw do
28
+ topic 'MyTopic' do
29
+ consumer MyConsumer
30
+ schema 'Generated'
31
+ namespace 'com.my-namespace'
32
+ key_config({ field: :a_string })
33
+ end
34
+
35
+ topic 'MyTopic2' do
36
+ consumer MyConsumer
37
+ schema 'MySchemaWithComplexTypes'
38
+ namespace 'com.my-namespace'
39
+ key_config({ field: :test_id })
40
+ end
41
+
42
+ topic 'MyTopic3' do
43
+ consumer MyConsumer
44
+ schema 'MySchemaWithCircularReference'
45
+ namespace 'com.my-namespace'
46
+ key_config({ none: true })
47
+ end
48
+
49
+ topic 'MyTopic4' do
50
+ consumer MyConsumer
51
+ schema 'MyNestedSchema'
52
+ namespace 'com.my-namespace'
53
+ key_config({ field: :test_id })
54
+ end
55
+
56
+ topic 'MyTopic5' do
57
+ consumer MyConsumer
58
+ schema 'MyLongNamespaceSchema'
59
+ namespace 'com.my-namespace.my-suborg'
60
+ key_config({ field: :test_id })
61
+ end
62
+
63
+ topic 'MyTopic6' do
64
+ producer_class MyConsumer
65
+ schema 'MySchema'
66
+ namespace 'com.my-namespace'
67
+ key_config({ schema: 'MySchema_key' })
68
+ end
69
+
70
+ end
71
+ end
@@ -65,6 +65,8 @@ module Deimos
65
65
  # @param val [Object]
66
66
  # @return [Object]
67
67
  def coerce_record(type, val)
68
+ return nil if val.nil?
69
+
68
70
  record = val.map do |name, value|
69
71
  field = type.fields.find { |f| f.name == name }
70
72
  coerce_type(field.type, value)
@@ -90,9 +90,9 @@ module Deimos
90
90
 
91
91
  return value if value.is_a?(self)
92
92
  if from_message
93
- self.new_from_message(**value.symbolize_keys)
93
+ self.new_from_message(**value&.symbolize_keys || {})
94
94
  else
95
- self.new(**value.symbolize_keys)
95
+ self.new(**value&.symbolize_keys || {})
96
96
  end
97
97
  end
98
98
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Deimos
4
- VERSION = '2.1.2'
4
+ VERSION = '2.1.4'
5
5
  end
@@ -1,10 +1,13 @@
1
1
  # Autogenerated Schema for Enum at <%= @current_schema.namespace %>.<%= @current_schema.name %>
2
2
  class <%= Deimos::SchemaBackends::AvroBase.schema_classname(@current_schema) %> < Deimos::SchemaClass::Enum
3
- # @return ['<%= @current_schema.symbols.join("', '") %>']
4
- attr_accessor :<%= @current_schema.name.underscore %>
5
-
6
3
  # @override
7
4
  def symbols
8
5
  %w(<%= @current_schema.symbols.join(' ') %>)
9
6
  end
7
+
8
+ <% @current_schema.symbols.each do |symbol| %>
9
+ def <%= symbol.underscore %>?
10
+ @value == '<%= symbol %>'
11
+ end
12
+ <% end %>
10
13
  end
@@ -162,26 +162,22 @@ module Deimos
162
162
  def generate
163
163
  _validate
164
164
  Rails.logger.info("Generating schemas from Deimos.config to #{Deimos.config.schema.generated_class_path}")
165
- found_schemas = Set.new
166
- Deimos.config.producer_objects.each do |config|
165
+ found_schemas = {}
166
+ Deimos.karafka_configs.each do |config|
167
167
  schema_name = config.schema
168
+ next if schema_name.nil?
168
169
  namespace = config.namespace || Deimos.config.producers.schema_namespace
169
170
  key_schema_name = config.key_config[:schema]
170
- found_schemas.add("#{namespace}.#{schema_name}")
171
- found_schemas.add("#{namespace}.#{key_schema_name}") if key_schema_name
172
- generate_classes(schema_name, namespace, config.key_config)
173
- end
174
171
 
175
- Deimos.config.consumer_objects.each do |config|
176
- schema_name = config.schema
177
- namespace = config.namespace
178
- key_schema_name = config.key_config[:schema]
179
- found_schemas.add("#{namespace}.#{schema_name}")
180
- found_schemas.add("#{namespace}.#{key_schema_name}") if key_schema_name
172
+ # don't regenerate if the schema was already found and had a payload key
173
+ next if found_schemas["#{namespace}.#{schema_name}"].present?
174
+
175
+ found_schemas["#{namespace}.#{schema_name}"] = key_schema_name
176
+ found_schemas["#{namespace}.#{key_schema_name}"] = nil
181
177
  generate_classes(schema_name, namespace, config.key_config)
182
178
  end
183
179
 
184
- generate_from_schema_files(found_schemas)
180
+ generate_from_schema_files(found_schemas.keys)
185
181
 
186
182
  end
187
183
 
@@ -245,7 +241,7 @@ module Deimos
245
241
  "record.tombstone_key = key\n record.#{key_config[:field]} = key"
246
242
  elsif key_schema
247
243
  field_base_type = _field_type(key_schema)
248
- "record.tombstone_key = #{field_base_type}.initialize_from_value(key, from_message: self._from_message)\n record.payload_key = key"
244
+ "record.tombstone_key = #{field_base_type}.initialize_from_value(key)\n record.payload_key = key"
249
245
  else
250
246
  ''
251
247
  end
@@ -10,70 +10,4 @@ class DeimosApp < Rails::Application
10
10
  end
11
11
  DeimosApp.initialize!
12
12
 
13
- class MyConsumer < Deimos::Consumer
14
- def consume(payload, metadata); end
15
- end
16
-
17
- require_relative "./lib/generators/deimos/schema_class_generator"
18
-
19
- Deimos.configure do |deimos_config|
20
- deimos_config.schema.nest_child_schemas = true
21
- deimos_config.schema.path = "spec/schemas"
22
- deimos_config.schema.backend = :avro_validation
23
- deimos_config.schema.generated_class_path = './spec/schemas'
24
- deimos_config.schema.use_full_namespace = true
25
- deimos_config.schema.schema_namespace_map = {
26
- 'com' => 'Schemas',
27
- 'com.my-namespace.my-suborg' => %w(Schemas MyNamespace)
28
- }
29
-
30
- consumer do
31
- class_name 'MyConsumer'
32
- topic 'MyTopic'
33
- schema 'Generated'
34
- namespace 'com.my-namespace'
35
- key_config field: :a_string
36
- end
37
-
38
- consumer do
39
- class_name 'MyConsumer'
40
- topic 'MyTopic'
41
- schema 'MySchemaWithComplexTypes'
42
- namespace 'com.my-namespace'
43
- key_config field: :test_id
44
- end
45
-
46
- consumer do
47
- class_name 'MyConsumer'
48
- topic 'MyTopic'
49
- schema 'MySchemaWithCircularReference'
50
- namespace 'com.my-namespace'
51
- key_config none: true
52
- end
53
-
54
- consumer do
55
- class_name 'MyConsumer'
56
- topic 'MyTopic'
57
- schema 'MyNestedSchema'
58
- namespace 'com.my-namespace'
59
- key_config field: :test_id
60
- end
61
-
62
- consumer do
63
- class_name 'MyConsumer'
64
- topic 'MyTopic'
65
- schema 'MyLongNamespaceSchema'
66
- namespace 'com.my-namespace.my-suborg'
67
- key_config field: :test_id
68
- end
69
-
70
- producer do
71
- class_name 'MyConsumer'
72
- topic 'MyTopic'
73
- schema 'MySchema'
74
- namespace 'com.my-namespace'
75
- key_config schema: 'MySchema_key'
76
- end
77
- end
78
-
79
13
  Deimos::Generators::SchemaClassGenerator.new.generate
@@ -45,7 +45,7 @@ module Schemas; module MyNamespace
45
45
 
46
46
  def self.tombstone(key)
47
47
  record = self.allocate
48
- record.tombstone_key = MySchemaKey.initialize_from_value(key, from_message: self._from_message)
48
+ record.tombstone_key = MySchemaKey.initialize_from_value(key)
49
49
  record.payload_key = key
50
50
  record
51
51
  end
@@ -8,7 +8,8 @@ module Schemas; module Com; module MyNamespace
8
8
 
9
9
  attr_accessor :super_int
10
10
 
11
- def initialize(test_id: nil,
11
+ def initialize(_from_message: false,
12
+ test_id: nil,
12
13
  some_int: nil)
13
14
  super
14
15
  self.super_int = some_int.nil? ? 10 : some_int * 9000