avromatic 3.0.2 → 4.0.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: e809f79141573b5b305bd08859b5bc78554ce8044c7affb7f47d6ccf3ffabe9f
4
- data.tar.gz: 537f11353220a3dbd723f6bc5f9939a1d72e2db570085276e4f990db96284b27
3
+ metadata.gz: 6b0efb11db848986a5f33f4d499ac919bb1e217b8e1d0b06311f485a26f0c94a
4
+ data.tar.gz: 2aee989c64a77e875894146a98ebdcd8a15409ba556b86a1d4bce9c18ee977fa
5
5
  SHA512:
6
- metadata.gz: 623cfd23c9b9700be27022c8eb31f1815f0ff78c938e3dbfd08df485f942b79d3c925225406d33b5c5f7575b7247314a9781a5ab8705dc90929dcc9d26528350
7
- data.tar.gz: 4835ad980bf412547204c70ae261014b966b71c24f56b30f595a9d0e1ecc41d85ad1e123861466ca5951db9d7e40032a386b2454eacf07bb23d02e3103f1b166
6
+ metadata.gz: a84b530d3d65135ff5520e412cb8517062dfa964bc3cff4511f81d310429d6b804f93a392c5a6add8c9f7c278207ed38e19a0117b3e17b2dfec948ffb2a10748
7
+ data.tar.gz: 7a1e707977d52b68b2bcd78de6bf8db5db097c7afc32493db2d242c1733aa1b3610d53fd640e68db0d23f9192f9e6e7910793512a6001b36976e700d66ae36ee
data/.circleci/config.yml CHANGED
@@ -2,14 +2,14 @@ version: 2.1
2
2
  jobs:
3
3
  lint:
4
4
  docker:
5
- - image: salsify/ruby_ci:2.5.8
5
+ - image: salsify/ruby_ci:2.7.4
6
6
  working_directory: ~/avromatic
7
7
  steps:
8
8
  - checkout
9
9
  - restore_cache:
10
10
  keys:
11
- - v2-gems-ruby-2.5.8-{{ checksum "avromatic.gemspec" }}-{{ checksum "Gemfile" }}
12
- - v2-gems-ruby-2.5.8-
11
+ - v2-gems-ruby-2.7.4-{{ checksum "avromatic.gemspec" }}-{{ checksum "Gemfile" }}
12
+ - v2-gems-ruby-2.7.4-
13
13
  - run:
14
14
  name: Install Gems
15
15
  command: |
@@ -18,7 +18,7 @@ jobs:
18
18
  bundle clean
19
19
  fi
20
20
  - save_cache:
21
- key: v2-gems-ruby-2.5.8-{{ checksum "avromatic.gemspec" }}-{{ checksum "Gemfile" }}
21
+ key: v2-gems-ruby-2.7.4-{{ checksum "avromatic.gemspec" }}-{{ checksum "Gemfile" }}
22
22
  paths:
23
23
  - "vendor/bundle"
24
24
  - "gemfiles/vendor/bundle"
@@ -69,21 +69,20 @@ workflows:
69
69
  matrix:
70
70
  parameters:
71
71
  gemfile:
72
- - "gemfiles/avro1_9_rails5_2.gemfile"
73
72
  - "gemfiles/avro1_10_rails5_2.gemfile"
74
- - "gemfiles/avro1_9_rails6_0.gemfile"
75
73
  - "gemfiles/avro1_10_rails6_0.gemfile"
76
74
  - "gemfiles/avro1_10_rails6_1.gemfile"
77
- - "gemfiles/avro1_9_rails6_1.gemfile"
75
+ - "gemfiles/avro1_10_rails7_0.gemfile"
76
+ - "gemfiles/avro1_11_rails7_0.gemfile"
78
77
  ruby-version:
79
- - "2.5.8"
80
- - "2.6.6"
81
- - "2.7.2"
78
+ - "2.7.4"
82
79
  - test:
83
80
  matrix:
84
81
  parameters:
85
82
  gemfile:
86
83
  - "gemfiles/avro1_10_rails6_1.gemfile"
87
- - "gemfiles/avro1_9_rails6_1.gemfile"
84
+ - "gemfiles/avro1_10_rails7_0.gemfile"
85
+ - "gemfiles/avro1_11_rails7_0.gemfile"
88
86
  ruby-version:
89
- - "3.0.0"
87
+ - "3.0.3"
88
+ - "3.1.0"
@@ -0,0 +1 @@
1
+ * @jturkel @kphelps @tjwp
data/.rubocop.yml CHANGED
@@ -2,10 +2,10 @@ inherit_gem:
2
2
  salsify_rubocop: conf/rubocop.yml
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.5
5
+ TargetRubyVersion: 2.7
6
6
  Exclude:
7
7
  - 'vendor/**/*'
8
- - 'gemfiles/vendor/**/*'
8
+ - 'gemfiles/**/*'
9
9
 
10
10
  Style/MultilineBlockChain:
11
11
  Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.8
1
+ 2.7.4
data/Appraisals CHANGED
@@ -1,37 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- appraise 'avro1_9-rails5_2' do
4
- gem 'avro', '1.9.2'
5
- gem 'activesupport', '~> 5.2.0'
6
- gem 'activemodel', '~> 5.2.0'
7
- end
8
-
9
3
  appraise 'avro1_10-rails5_2' do
10
4
  gem 'avro', '~> 1.10.0'
11
5
  gem 'activesupport', '~> 5.2.0'
12
6
  gem 'activemodel', '~> 5.2.0'
13
7
  end
14
8
 
15
- appraise 'avro1_9-rails6_0' do
16
- gem 'avro', '1.9.2'
17
- gem 'activesupport', '~> 6.0.0'
18
- gem 'activemodel', '~> 6.0.0'
19
- end
20
-
21
9
  appraise 'avro1_10-rails6_0' do
22
10
  gem 'avro', '~> 1.10.0'
23
11
  gem 'activesupport', '~> 6.0.0'
24
12
  gem 'activemodel', '~> 6.0.0'
25
13
  end
26
14
 
27
- appraise 'avro1_9-rails6_1' do
28
- gem 'avro', '1.9.2'
15
+ appraise 'avro1_10-rails6_1' do
16
+ gem 'avro', '~> 1.10.0'
29
17
  gem 'activesupport', '~> 6.1.0'
30
18
  gem 'activemodel', '~> 6.1.0'
31
19
  end
32
20
 
33
- appraise 'avro1_10-rails6_1' do
21
+ appraise 'avro1_10-rails7_0' do
34
22
  gem 'avro', '~> 1.10.0'
23
+ gem 'activesupport', '~> 7.0.0'
24
+ gem 'activemodel', '~> 7.0.0'
25
+ end
26
+
27
+ appraise 'avro1_11-rails6_1' do
28
+ gem 'avro', '~> 1.11.0'
35
29
  gem 'activesupport', '~> 6.1.0'
36
30
  gem 'activemodel', '~> 6.1.0'
37
31
  end
32
+
33
+ appraise 'avro1_11-rails7_0' do
34
+ gem 'avro', '~> 1.11.0'
35
+ gem 'activesupport', '~> 7.0.0'
36
+ gem 'activemodel', '~> 7.0.0'
37
+ end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # avromatic changelog
2
2
 
3
+ ## 4.0.0
4
+ - Drop support for Ruby 2.6.
5
+ - Drop support for Avro 1.9.
6
+ - Add support for Avro 1.11.
7
+ - Add support for Rails 7.0.
8
+
3
9
  ## 3.0.2
4
10
  - Reset the schema registry client between RSpec tests to ensure any cached values are
5
11
  consistent with the fake schema registry.
data/avromatic.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'avromatic/version'
6
6
 
@@ -15,16 +15,25 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = 'https://github.com/salsify/avromatic.git'
16
16
  spec.license = 'MIT'
17
17
 
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
20
+ spec.metadata['rubygems_mfa_required'] = 'true'
21
+ else
22
+ raise 'RubyGems 2.0 or newer is required to set allowed_push_host.'
23
+ end
24
+
18
25
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
26
  spec.bindir = 'exe'
20
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
28
  spec.require_paths = ['lib']
22
29
 
23
- spec.required_ruby_version = '>= 2.5'
30
+ spec.metadata['rubygems_mfa_required'] = 'true'
31
+
32
+ spec.required_ruby_version = '>= 2.7'
24
33
 
25
- spec.add_runtime_dependency 'activemodel', '>= 5.2', '< 6.2'
26
- spec.add_runtime_dependency 'activesupport', '>= 5.2', '< 6.2'
27
- spec.add_runtime_dependency 'avro', '>= 1.9.0', '< 1.11'
34
+ spec.add_runtime_dependency 'activemodel', '>= 5.2', '< 7.1'
35
+ spec.add_runtime_dependency 'activesupport', '>= 5.2', '< 7.1'
36
+ spec.add_runtime_dependency 'avro', '>= 1.10.0', '< 1.12'
28
37
  spec.add_runtime_dependency 'avro_schema_registry-client', '>= 0.4.0'
29
38
  spec.add_runtime_dependency 'avro_turf'
30
39
  spec.add_runtime_dependency 'ice_nine'
@@ -36,7 +45,7 @@ Gem::Specification.new do |spec|
36
45
  spec.add_development_dependency 'rake', '~> 13.0'
37
46
  spec.add_development_dependency 'rspec', '~> 3.8'
38
47
  spec.add_development_dependency 'rspec_junit_formatter'
39
- spec.add_development_dependency 'salsify_rubocop', '~> 0.52.1.1'
48
+ spec.add_development_dependency 'salsify_rubocop', '~> 1.1.0'
40
49
  spec.add_development_dependency 'simplecov'
41
50
  spec.add_development_dependency 'webmock'
42
51
  # For AvroSchemaRegistry::FakeServer
@@ -2,8 +2,8 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "avro", "1.9.2"
6
- gem "activesupport", "~> 5.2.0"
7
- gem "activemodel", "~> 5.2.0"
5
+ gem "avro", "~> 1.10.0"
6
+ gem "activesupport", "~> 7.0.0"
7
+ gem "activemodel", "~> 7.0.0"
8
8
 
9
9
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "avro", "1.9.2"
5
+ gem "avro", "~> 1.11.0"
6
6
  gem "activesupport", "~> 6.1.0"
7
7
  gem "activemodel", "~> 6.1.0"
8
8
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "avro", "1.9.2"
6
- gem "activesupport", "~> 6.0.0"
7
- gem "activemodel", "~> 6.0.0"
5
+ gem "avro", "~> 1.11.0"
6
+ gem "activesupport", "~> 7.0.0"
7
+ gem "activemodel", "~> 7.0.0"
8
8
 
9
9
  gemspec path: "../"
@@ -21,9 +21,7 @@ module Avromatic
21
21
  end
22
22
  end
23
23
 
24
- unless index_of_schema
25
- raise Avro::IO::AvroTypeError.new(writers_schema, datum)
26
- end
24
+ raise Avro::IO::AvroTypeError.new(writers_schema, datum) unless index_of_schema
27
25
 
28
26
  encoder.write_long(index_of_schema)
29
27
  write_data(writers_schema.schemas[index_of_schema], datum, encoder)
@@ -16,12 +16,10 @@ module Avromatic
16
16
  # The first byte is MAGIC!!!
17
17
  magic_byte = decoder.read(1)
18
18
 
19
- if magic_byte != MAGIC_BYTE
20
- raise "Expected data to begin with a magic byte, got `#{magic_byte.inspect}`"
21
- end
19
+ raise "Expected data to begin with a magic byte, got `#{magic_byte.inspect}`" if magic_byte != MAGIC_BYTE
22
20
 
23
21
  # The schema id is a 4-byte big-endian integer.
24
- schema_id = decoder.read(4).unpack('N').first
22
+ schema_id = decoder.read(4).unpack1('N')
25
23
 
26
24
  writers_schema = @schemas_by_id.fetch(schema_id) do
27
25
  schema_json = @registry.fetch(schema_id)
@@ -22,6 +22,7 @@ module Avromatic
22
22
 
23
23
  class AttributeDefinition
24
24
  attr_reader :name, :name_string, :setter_name, :type, :field, :default, :owner
25
+
25
26
  delegate :serialize, to: :type
26
27
 
27
28
  def initialize(owner:, field:, type:)
@@ -58,21 +59,31 @@ module Avromatic
58
59
  def coerce(input)
59
60
  type.coerce(input)
60
61
  rescue Avromatic::Model::UnknownAttributeError => e
61
- raise Avromatic::Model::CoercionError.new("Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \
62
+ raise Avromatic::Model::CoercionError.new(
63
+ "Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \
62
64
  "because the following unexpected attributes were provided: #{e.unknown_attributes.join(', ')}. " \
63
65
  "Only the following attributes are allowed: #{e.allowed_attributes.join(', ')}. " \
64
- "Provided argument: #{input.inspect}")
66
+ "Provided argument: #{input.inspect}"
67
+ )
65
68
  rescue StandardError
66
69
  if type.input_classes && type.input_classes.none? { |input_class| input.is_a?(input_class) }
67
- raise Avromatic::Model::CoercionError.new("Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \
68
- "because a #{input.class.name} was provided but expected a #{type.input_classes.map(&:name).to_sentence(two_words_connector: ' or ', last_word_connector: ', or ')}. " \
69
- "Provided argument: #{input.inspect}")
70
+ raise Avromatic::Model::CoercionError.new(
71
+ "Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \
72
+ "because a #{input.class.name} was provided but expected a #{type.input_classes.map(&:name).to_sentence(
73
+ two_words_connector: ' or ', last_word_connector: ', or '
74
+ )}. " \
75
+ "Provided argument: #{input.inspect}"
76
+ )
70
77
  elsif input.is_a?(Hash) && type.is_a?(Avromatic::Model::Types::UnionType)
71
- raise Avromatic::Model::CoercionError.new("Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \
72
- "because no union member type matches the provided attributes: #{input.inspect}")
78
+ raise Avromatic::Model::CoercionError.new(
79
+ "Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \
80
+ "because no union member type matches the provided attributes: #{input.inspect}"
81
+ )
73
82
  else
74
- raise Avromatic::Model::CoercionError.new("Value for #{owner.name}##{name} could not be coerced to a #{type.name}. " \
75
- "Provided argument: #{input.inspect}")
83
+ raise Avromatic::Model::CoercionError.new(
84
+ "Value for #{owner.name}##{name} could not be coerced to a #{type.name}. " \
85
+ "Provided argument: #{input.inspect}"
86
+ )
76
87
  end
77
88
  end
78
89
  end
@@ -106,7 +117,8 @@ module Avromatic
106
117
  unknown_attributes = (data.keys.map(&:to_s) - _attributes.keys.map(&:to_s)).sort
107
118
  allowed_attributes = attribute_definitions.keys.map(&:to_s).sort
108
119
  message = "Unexpected arguments for #{self.class.name}#initialize: #{unknown_attributes.join(', ')}. " \
109
- "Only the following arguments are allowed: #{allowed_attributes.join(', ')}. Provided arguments: #{data.inspect}"
120
+ "Only the following arguments are allowed: #{allowed_attributes.join(', ')}. " \
121
+ "Provided arguments: #{data.inspect}"
110
122
  raise Avromatic::Model::UnknownAttributeError.new(message, unknown_attributes: unknown_attributes,
111
123
  allowed_attributes: allowed_attributes)
112
124
  end
@@ -136,8 +148,8 @@ module Avromatic
136
148
  begin
137
149
  define_avro_attributes(key_avro_schema, generated_methods_module,
138
150
  allow_optional: config.allow_optional_key_fields)
139
- rescue OptionalFieldError => ex
140
- raise "Optional field '#{ex.field.name}' not allowed in key schema."
151
+ rescue OptionalFieldError => e
152
+ raise "Optional field '#{e.field.name}' not allowed in key schema."
141
153
  end
142
154
  end
143
155
  define_avro_attributes(avro_schema, generated_methods_module)
@@ -155,6 +167,7 @@ module Avromatic
155
167
  conflicts =
156
168
  (key_avro_field_names & value_avro_field_names).each_with_object([]) do |name, msgs|
157
169
  next unless schema_fields_differ?(name)
170
+
158
171
  msgs << "Field '#{name}' has a different type in each schema: "\
159
172
  "value #{value_avro_fields_by_name[name]}, "\
160
173
  "key #{key_avro_fields_by_name[name]}"
@@ -190,7 +203,11 @@ module Avromatic
190
203
 
191
204
  # Add all generated methods to a module so they can be overridden
192
205
  generated_methods_module.send(:define_method, field.name) { _attributes[symbolized_field_name] }
193
- generated_methods_module.send(:define_method, "#{field.name}?") { !!_attributes[symbolized_field_name] } if FieldHelper.boolean?(field)
206
+ if FieldHelper.boolean?(field)
207
+ generated_methods_module.send(:define_method, "#{field.name}?") do
208
+ !!_attributes[symbolized_field_name]
209
+ end
210
+ end
194
211
 
195
212
  generated_methods_module.send(:define_method, "#{field.name}=") do |value|
196
213
  _attributes[symbolized_field_name] = attribute_definition.coerce(value)
@@ -27,6 +27,7 @@ module Avromatic
27
27
  def initialize(**options)
28
28
  @avro_schema = find_avro_schema(**options)
29
29
  raise ArgumentError.new('value_schema(_name) or schema(_name) must be specified') unless avro_schema
30
+
30
31
  @key_avro_schema = find_schema_by_option(:key_schema, **options)
31
32
  @nested_models = options[:nested_models]
32
33
  @mutable = options.fetch(:mutable, false)
@@ -46,6 +47,7 @@ module Avromatic
46
47
  (options[:schema] || options[:schema_name])
47
48
  raise ArgumentError.new('Only one of value_schema(_name) and schema(_name) can be specified')
48
49
  end
50
+
49
51
  find_schema_by_option(:value_schema, **options) || find_schema_by_option(:schema, **options)
50
52
  end
51
53
 
@@ -89,6 +89,7 @@ module Avromatic
89
89
  message_key, message_value = extract_key_and_value(*args)
90
90
  model_key = model_key_for_message(message_key, message_value)
91
91
  raise UnexpectedKeyError.new(*model_key) unless model_map.key?(model_key)
92
+
92
93
  [model_map[model_key], message_key, message_value]
93
94
  end
94
95
 
@@ -106,7 +107,7 @@ module Avromatic
106
107
  end
107
108
 
108
109
  def extract_schema_id(data)
109
- data[1..4].unpack('N').first
110
+ data[1..4].unpack1('N')
110
111
  end
111
112
 
112
113
  def validate_magic_byte!(data)
@@ -118,6 +119,7 @@ module Avromatic
118
119
  models.each_with_object(Hash.new) do |model, map|
119
120
  key = model_key(model)
120
121
  raise DuplicateKeyError.new(map[key], model) if map.key?(key) && !model.equal?(map[key])
122
+
121
123
  map[key] = model
122
124
  end
123
125
  end
@@ -22,6 +22,7 @@ module Avromatic
22
22
 
23
23
  def avro_message_key
24
24
  raise 'Model has no key schema' unless key_avro_schema
25
+
25
26
  avro_messaging.encode(
26
27
  key_attributes_for_avro,
27
28
  schema_name: key_avro_schema.fullname
@@ -36,6 +36,7 @@ module Avromatic
36
36
  end
37
37
 
38
38
  raise 'Model has no key schema' unless key_avro_schema
39
+
39
40
  avro_raw_encode(key_attributes_for_avro, :key)
40
41
  end
41
42
 
@@ -118,7 +119,7 @@ module Avromatic
118
119
  # If supplied then the key_schema and value_schema are used as the writer's
119
120
  # schema for the corresponding value. The model's schemas are always used
120
121
  # as the reader's schemas.
121
- def avro_raw_decode(key: nil, value:, key_schema: nil, value_schema: nil)
122
+ def avro_raw_decode(value:, key: nil, key_schema: nil, value_schema: nil)
122
123
  key_attributes = key && decode_avro_datum(key, key_schema, :key)
123
124
  value_attributes = decode_avro_datum(value, value_schema, :value)
124
125
  value_attributes.merge!(key_attributes) if key_attributes
@@ -150,10 +151,10 @@ module Avromatic
150
151
 
151
152
  def datum_writer
152
153
  @datum_writer ||= begin
153
- hash = { value: datum_writer_class.new(value_avro_schema) }
154
- hash[:key] = datum_writer_class.new(key_avro_schema) if key_avro_schema
155
- hash
156
- end
154
+ hash = { value: datum_writer_class.new(value_avro_schema) }
155
+ hash[:key] = datum_writer_class.new(key_avro_schema) if key_avro_schema
156
+ hash
157
+ end
157
158
  end
158
159
 
159
160
  def datum_reader
@@ -11,6 +11,7 @@ module Avromatic
11
11
  attr_reader :value_type
12
12
 
13
13
  def initialize(value_type:)
14
+ super()
14
15
  @value_type = value_type
15
16
  end
16
17
 
@@ -11,6 +11,7 @@ module Avromatic
11
11
  attr_reader :custom_type_configuration, :value_classes, :default_type
12
12
 
13
13
  def initialize(custom_type_configuration:, default_type:)
14
+ super()
14
15
  @custom_type_configuration = custom_type_configuration
15
16
  @default_type = default_type
16
17
  @deserializer = custom_type_configuration.deserializer || IDENTITY_PROC
@@ -27,7 +28,11 @@ module Avromatic
27
28
  end
28
29
 
29
30
  def name
30
- custom_type_configuration.value_class ? custom_type_configuration.value_class.name.to_s.freeze : default_type.name
31
+ if custom_type_configuration.value_class
32
+ custom_type_configuration.value_class.name.to_s.freeze
33
+ else
34
+ default_type.name
35
+ end
31
36
  end
32
37
 
33
38
  def coerce(input)
@@ -12,6 +12,7 @@ module Avromatic
12
12
  attr_reader :allowed_values
13
13
 
14
14
  def initialize(allowed_values)
15
+ super()
15
16
  @allowed_values = allowed_values.to_set
16
17
  end
17
18
 
@@ -11,6 +11,7 @@ module Avromatic
11
11
  attr_reader :size
12
12
 
13
13
  def initialize(size)
14
+ super()
14
15
  @size = size
15
16
  end
16
17
 
@@ -11,6 +11,7 @@ module Avromatic
11
11
  attr_reader :value_type, :key_type
12
12
 
13
13
  def initialize(key_type:, value_type:)
14
+ super()
14
15
  @key_type = key_type
15
16
  @value_type = value_type
16
17
  end
@@ -9,6 +9,7 @@ module Avromatic
9
9
  attr_reader :record_class, :value_classes, :input_classes
10
10
 
11
11
  def initialize(record_class:)
12
+ super()
12
13
  @record_class = record_class
13
14
  @value_classes = [record_class].freeze
14
15
  @input_classes = [record_class, Hash].freeze
@@ -59,10 +59,12 @@ module Avromatic
59
59
  when :enum
60
60
  Avromatic::Model::Types::EnumType.new(schema.symbols)
61
61
  when :array
62
- value_type = create(schema: schema.items, nested_models: nested_models, use_custom_types: use_custom_types)
62
+ value_type = create(schema: schema.items, nested_models: nested_models,
63
+ use_custom_types: use_custom_types)
63
64
  Avromatic::Model::Types::ArrayType.new(value_type: value_type)
64
65
  when :map
65
- value_type = create(schema: schema.values, nested_models: nested_models, use_custom_types: use_custom_types)
66
+ value_type = create(schema: schema.values, nested_models: nested_models,
67
+ use_custom_types: use_custom_types)
66
68
  Avromatic::Model::Types::MapType.new(
67
69
  key_type: Avromatic::Model::Types::StringType.new,
68
70
  value_type: value_type
@@ -97,8 +99,10 @@ module Avromatic
97
99
  if nested_models.registered?(fullname)
98
100
  nested_model = nested_models[fullname]
99
101
  unless schema_fingerprint(schema) == schema_fingerprint(nested_model.avro_schema)
100
- raise "The #{nested_model.name} model is already registered with an incompatible version of the #{schema.fullname} schema"
102
+ raise "The #{nested_model.name} model is already registered with an incompatible version of the " \
103
+ "#{schema.fullname} schema"
101
104
  end
105
+
102
106
  nested_model
103
107
  else
104
108
  Avromatic::Model.model(schema: schema, nested_models: nested_models)
@@ -10,6 +10,7 @@ module Avromatic
10
10
  attr_reader :member_types, :value_classes, :input_classes
11
11
 
12
12
  def initialize(member_types:)
13
+ super()
13
14
  @member_types = member_types
14
15
  @value_classes = member_types.flat_map(&:value_classes)
15
16
  @input_classes = member_types.flat_map(&:input_classes).uniq
@@ -31,9 +32,7 @@ module Avromatic
31
32
  end
32
33
  end
33
34
 
34
- if result.nil?
35
- raise ArgumentError.new("Could not coerce '#{input.inspect}' to #{name}")
36
- end
35
+ raise ArgumentError.new("Could not coerce '#{input.inspect}' to #{name}") if result.nil?
37
36
 
38
37
  result
39
38
  end
@@ -64,9 +64,7 @@ module Avromatic
64
64
  end
65
65
  end
66
66
 
67
- if recursively_immutable?
68
- @missing_attributes = missing_attributes.freeze
69
- end
67
+ @missing_attributes = missing_attributes.freeze if recursively_immutable?
70
68
 
71
69
  missing_attributes
72
70
  end
@@ -24,8 +24,10 @@ module Avromatic
24
24
 
25
25
  def register(model)
26
26
  raise 'models with a key schema are not supported' if model.key_avro_schema
27
+
27
28
  name = model_fullname(model)
28
29
  raise "'#{name}' has already been registered" if registered?(name)
30
+
29
31
  @hash[name] = model
30
32
  end
31
33
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avromatic
4
- VERSION = '3.0.2'
4
+ VERSION = '4.0.0'
5
5
  end
data/lib/avromatic.rb CHANGED
@@ -34,6 +34,7 @@ module Avromatic
34
34
 
35
35
  def self.build_schema_registry
36
36
  raise 'Avromatic must be configured with a registry_url' unless registry_url
37
+
37
38
  if use_schema_fingerprint_lookup
38
39
  AvroSchemaRegistry::CachedClient.new(
39
40
  AvroSchemaRegistry::Client.new(registry_url, logger: logger)
@@ -51,6 +52,7 @@ module Avromatic
51
52
 
52
53
  def self.build_messaging
53
54
  raise 'Avromatic must be configured with a schema_store' unless schema_store
55
+
54
56
  Avromatic::Messaging.new(
55
57
  registry: schema_registry || build_schema_registry,
56
58
  schema_store: schema_store,
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: 3.0.2
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salsify Engineering
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-08 00:00:00.000000000 Z
11
+ date: 2022-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '5.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.2'
22
+ version: '7.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '5.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.2'
32
+ version: '7.1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '5.2'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '6.2'
42
+ version: '7.1'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,27 +49,27 @@ dependencies:
49
49
  version: '5.2'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '6.2'
52
+ version: '7.1'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: avro
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.9.0
59
+ version: 1.10.0
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.11'
62
+ version: '1.12'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 1.9.0
69
+ version: 1.10.0
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: '1.11'
72
+ version: '1.12'
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: avro_schema_registry-client
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -216,14 +216,14 @@ dependencies:
216
216
  requirements:
217
217
  - - "~>"
218
218
  - !ruby/object:Gem::Version
219
- version: 0.52.1.1
219
+ version: 1.1.0
220
220
  type: :development
221
221
  prerelease: false
222
222
  version_requirements: !ruby/object:Gem::Requirement
223
223
  requirements:
224
224
  - - "~>"
225
225
  - !ruby/object:Gem::Version
226
- version: 0.52.1.1
226
+ version: 1.1.0
227
227
  - !ruby/object:Gem::Dependency
228
228
  name: simplecov
229
229
  requirement: !ruby/object:Gem::Requirement
@@ -274,6 +274,7 @@ extensions: []
274
274
  extra_rdoc_files: []
275
275
  files:
276
276
  - ".circleci/config.yml"
277
+ - ".github/CODEOWNERS"
277
278
  - ".gitignore"
278
279
  - ".overcommit.yml"
279
280
  - ".rspec"
@@ -293,9 +294,9 @@ files:
293
294
  - gemfiles/avro1_10_rails5_2.gemfile
294
295
  - gemfiles/avro1_10_rails6_0.gemfile
295
296
  - gemfiles/avro1_10_rails6_1.gemfile
296
- - gemfiles/avro1_9_rails5_2.gemfile
297
- - gemfiles/avro1_9_rails6_0.gemfile
298
- - gemfiles/avro1_9_rails6_1.gemfile
297
+ - gemfiles/avro1_10_rails7_0.gemfile
298
+ - gemfiles/avro1_11_rails6_1.gemfile
299
+ - gemfiles/avro1_11_rails7_0.gemfile
299
300
  - lib/avromatic.rb
300
301
  - lib/avromatic/io.rb
301
302
  - lib/avromatic/io/datum_reader.rb
@@ -345,8 +346,10 @@ files:
345
346
  homepage: https://github.com/salsify/avromatic.git
346
347
  licenses:
347
348
  - MIT
348
- metadata: {}
349
- post_install_message:
349
+ metadata:
350
+ allowed_push_host: https://rubygems.org
351
+ rubygems_mfa_required: 'true'
352
+ post_install_message:
350
353
  rdoc_options: []
351
354
  require_paths:
352
355
  - lib
@@ -354,15 +357,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
354
357
  requirements:
355
358
  - - ">="
356
359
  - !ruby/object:Gem::Version
357
- version: '2.5'
360
+ version: '2.7'
358
361
  required_rubygems_version: !ruby/object:Gem::Requirement
359
362
  requirements:
360
363
  - - ">="
361
364
  - !ruby/object:Gem::Version
362
365
  version: '0'
363
366
  requirements: []
364
- rubygems_version: 3.0.8
365
- signing_key:
367
+ rubygems_version: 3.2.22
368
+ signing_key:
366
369
  specification_version: 4
367
370
  summary: Generate Ruby models from Avro schemas
368
371
  test_files: []