avromatic 4.0.0 → 4.1.0

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: 6b0efb11db848986a5f33f4d499ac919bb1e217b8e1d0b06311f485a26f0c94a
4
- data.tar.gz: 2aee989c64a77e875894146a98ebdcd8a15409ba556b86a1d4bce9c18ee977fa
3
+ metadata.gz: edd31aa475804bf20a1f5b4ddbe90e8c98460617daeaf2e1641316c08cce505b
4
+ data.tar.gz: b20ae31b2aeff034f9fa99e2a90d4bb78dfe894967ab8e0267b1df6ee954a15d
5
5
  SHA512:
6
- metadata.gz: a84b530d3d65135ff5520e412cb8517062dfa964bc3cff4511f81d310429d6b804f93a392c5a6add8c9f7c278207ed38e19a0117b3e17b2dfec948ffb2a10748
7
- data.tar.gz: 7a1e707977d52b68b2bcd78de6bf8db5db097c7afc32493db2d242c1733aa1b3610d53fd640e68db0d23f9192f9e6e7910793512a6001b36976e700d66ae36ee
6
+ metadata.gz: 6e4d441e7645b52840725041d361f699266a9e5dd974e8cd588c8f4750ba21eb4efd016b9c6c20e034a98ed79b673f9aa12a5f0b3a56312a57b344659b93606d
7
+ data.tar.gz: 5b8ba9cc0049f80a31f88399ca504796997038b969d728be5867d6fd5bc6868786e4ae9dffc0de8a7c1db99e129f9398e4f867794dbd449d54f74c69650735bb
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # avromatic changelog
2
2
 
3
+ ## 4.1.0
4
+ - Add support for specifying a subject for the avro schema when building an Avromatic model
5
+
3
6
  ## 4.0.0
4
7
  - Drop support for Ruby 2.6.
5
8
  - Drop support for Avro 1.9.
data/README.md CHANGED
@@ -124,7 +124,7 @@ The Avro schema can be specified by name and loaded using the schema store:
124
124
 
125
125
  ```ruby
126
126
  class MyModel
127
- include Avromatic::Model.build(schema_name :my_model)
127
+ include Avromatic::Model.build(schema_name: :my_model)
128
128
  end
129
129
 
130
130
  # Construct instances by passing in a hash of attributes
@@ -156,12 +156,20 @@ class MyModel
156
156
  end
157
157
  ```
158
158
 
159
+ A specific subject name can be associated with the schema:
160
+ ```ruby
161
+ class MyModel
162
+ include Avromatic::Model.build(schema_name: 'my_model',
163
+ schema_subject: 'my_model-value')
164
+ end
165
+ ```
166
+
159
167
  Models are generated as immutable value
160
168
  objects by default, but can optionally be defined as mutable:
161
169
 
162
170
  ```ruby
163
171
  class MyModel
164
- include Avromatic::Model.build(schema_name :my_model, mutable: true)
172
+ include Avromatic::Model.build(schema_name: :my_model, mutable: true)
165
173
  end
166
174
  ```
167
175
 
@@ -195,6 +203,16 @@ class MyTopic
195
203
  end
196
204
  ```
197
205
 
206
+ A specific subject name can be associated with both the value and key schemas:
207
+ ```ruby
208
+ class MyTopic
209
+ include Avromatic::Model.build(value_schema_name: :topic_value,
210
+ value_schema_subject: 'topic_value-value',
211
+ key_schema_name: :topic_key,
212
+ key_schema_subject: 'topic_key-value')
213
+ end
214
+ ```
215
+
198
216
  A model can also be generated as an anonymous class that can be assigned to a
199
217
  constant:
200
218
 
@@ -24,7 +24,8 @@ module Avromatic
24
24
  end
25
25
 
26
26
  module ClassMethods
27
- delegate :avro_schema, :value_avro_schema, :key_avro_schema, :mutable?, :immutable?, to: :config
27
+ delegate :avro_schema, :value_avro_schema, :key_avro_schema, :mutable?, :immutable?,
28
+ :avro_schema_subject, :value_avro_schema_subject, :key_avro_schema_subject, to: :config
28
29
 
29
30
  def value_avro_field_names
30
31
  @value_avro_field_names ||= value_avro_schema.fields.map(&:name).map(&:to_sym).freeze
@@ -68,6 +69,7 @@ module Avromatic
68
69
  end
69
70
 
70
71
  delegate :avro_schema, :value_avro_schema, :key_avro_schema,
72
+ :avro_schema_subject, :value_avro_schema_subject, :key_avro_schema_subject,
71
73
  :value_avro_field_names, :key_avro_field_names,
72
74
  :value_avro_field_references, :key_avro_field_references,
73
75
  :mutable?, :immutable?,
@@ -7,7 +7,7 @@ module Avromatic
7
7
  class Configuration
8
8
 
9
9
  attr_reader :avro_schema, :key_avro_schema, :nested_models, :mutable,
10
- :allow_optional_key_fields
10
+ :allow_optional_key_fields, :avro_schema_subject, :key_avro_schema_subject
11
11
  alias_method :mutable?, :mutable
12
12
  delegate :schema_store, to: Avromatic
13
13
 
@@ -17,24 +17,30 @@ module Avromatic
17
17
  # @param options [Hash]
18
18
  # @option options [Avro::Schema] :schema
19
19
  # @option options [String, Symbol] :schema_name
20
+ # @option options [String, Symbol] :schema_subject
20
21
  # @option options [Avro::Schema] :value_schema
21
22
  # @option options [String, Symbol] :value_schema_name
23
+ # @option options [String, Symbol] :value_schema_subject
22
24
  # @option options [Avro::Schema] :key_schema
23
25
  # @option options [String, Symbol] :key_schema_name
26
+ # @option options [String, Symbol] :key_schema_subject
24
27
  # @option options [Avromatic::ModelRegistry] :nested_models
25
28
  # @option options [Boolean] :mutable, default false
26
29
  # @option options [Boolean] :allow_optional_key_fields, default false
27
30
  def initialize(**options)
28
31
  @avro_schema = find_avro_schema(**options)
32
+ @avro_schema_subject = options[:schema_subject] || options[:value_schema_subject]
29
33
  raise ArgumentError.new('value_schema(_name) or schema(_name) must be specified') unless avro_schema
30
34
 
31
35
  @key_avro_schema = find_schema_by_option(:key_schema, **options)
36
+ @key_avro_schema_subject = options[:key_schema_subject]
32
37
  @nested_models = options[:nested_models]
33
38
  @mutable = options.fetch(:mutable, false)
34
39
  @allow_optional_key_fields = options.fetch(:allow_optional_key_fields, false)
35
40
  end
36
41
 
37
42
  alias_method :value_avro_schema, :avro_schema
43
+ alias_method :value_avro_schema_subject, :avro_schema_subject
38
44
 
39
45
  def immutable?
40
46
  !mutable?
@@ -16,7 +16,8 @@ module Avromatic
16
16
  def avro_message_value
17
17
  avro_messaging.encode(
18
18
  value_attributes_for_avro,
19
- schema_name: value_avro_schema.fullname
19
+ schema_name: value_avro_schema.fullname,
20
+ subject: value_avro_schema_subject
20
21
  )
21
22
  end
22
23
 
@@ -25,7 +26,8 @@ module Avromatic
25
26
 
26
27
  avro_messaging.encode(
27
28
  key_attributes_for_avro,
28
- schema_name: key_avro_schema.fullname
29
+ schema_name: key_avro_schema.fullname,
30
+ subject: key_avro_schema_subject
29
31
  )
30
32
  end
31
33
  end
@@ -56,15 +58,15 @@ module Avromatic
56
58
 
57
59
  module Registration
58
60
  def register_schemas!
59
- register_schema(key_avro_schema) if key_avro_schema
60
- register_schema(value_avro_schema)
61
+ register_schema(key_avro_schema, subject: key_avro_schema_subject) if key_avro_schema
62
+ register_schema(value_avro_schema, subject: value_avro_schema_subject)
61
63
  nil
62
64
  end
63
65
 
64
66
  private
65
67
 
66
- def register_schema(schema)
67
- avro_messaging.registry.register(schema.fullname, schema)
68
+ def register_schema(schema, subject: nil)
69
+ avro_messaging.registry.register(subject || schema.fullname, schema)
68
70
  end
69
71
  end
70
72
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avromatic
4
- VERSION = '4.0.0'
4
+ VERSION = '4.1.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avromatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salsify Engineering
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-12 00:00:00.000000000 Z
11
+ date: 2022-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel