avromatic 2.2.3 → 2.4.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +85 -0
  3. data/.rubocop.yml +3 -0
  4. data/.ruby-version +1 -1
  5. data/Appraisals +34 -22
  6. data/CHANGELOG.md +19 -0
  7. data/README.md +3 -3
  8. data/avromatic.gemspec +7 -6
  9. data/bin/console +4 -3
  10. data/gemfiles/{rails5_0.gemfile → avro1_10_rails5_2.gemfile} +3 -3
  11. data/gemfiles/avro1_10_rails6_0.gemfile +9 -0
  12. data/gemfiles/avro1_10_rails6_1.gemfile +9 -0
  13. data/gemfiles/{rails5_2.gemfile → avro1_8_rails5_2.gemfile} +0 -0
  14. data/gemfiles/{rails5_1.gemfile → avro1_9_rails5_2.gemfile} +3 -3
  15. data/gemfiles/{rails6_0.gemfile → avro1_9_rails6_0.gemfile} +1 -1
  16. data/gemfiles/{avro_patches_rails5_0.gemfile → avro1_9_rails6_1.gemfile} +3 -3
  17. data/gemfiles/avro_patches_rails5_2.gemfile +1 -1
  18. data/gemfiles/avro_patches_rails6_1.gemfile +9 -0
  19. data/lib/avromatic.rb +0 -5
  20. data/lib/avromatic/io.rb +1 -7
  21. data/lib/avromatic/io/datum_reader.rb +18 -68
  22. data/lib/avromatic/io/datum_writer.rb +5 -11
  23. data/lib/avromatic/io/union_datum.rb +25 -0
  24. data/lib/avromatic/messaging.rb +4 -2
  25. data/lib/avromatic/model/attributes.rb +28 -9
  26. data/lib/avromatic/model/configurable.rb +30 -2
  27. data/lib/avromatic/model/configuration.rb +5 -0
  28. data/lib/avromatic/model/field_helper.rb +5 -1
  29. data/lib/avromatic/model/messaging_serialization.rb +2 -1
  30. data/lib/avromatic/model/raw_serialization.rb +67 -24
  31. data/lib/avromatic/model/types/abstract_timestamp_type.rb +1 -1
  32. data/lib/avromatic/model/types/abstract_type.rb +3 -1
  33. data/lib/avromatic/model/types/array_type.rb +2 -2
  34. data/lib/avromatic/model/types/boolean_type.rb +1 -1
  35. data/lib/avromatic/model/types/custom_type.rb +1 -1
  36. data/lib/avromatic/model/types/date_type.rb +1 -1
  37. data/lib/avromatic/model/types/enum_type.rb +1 -1
  38. data/lib/avromatic/model/types/fixed_type.rb +1 -1
  39. data/lib/avromatic/model/types/float_type.rb +1 -1
  40. data/lib/avromatic/model/types/integer_type.rb +1 -1
  41. data/lib/avromatic/model/types/map_type.rb +2 -2
  42. data/lib/avromatic/model/types/null_type.rb +1 -1
  43. data/lib/avromatic/model/types/record_type.rb +4 -7
  44. data/lib/avromatic/model/types/string_type.rb +1 -1
  45. data/lib/avromatic/model/types/union_type.rb +11 -8
  46. data/lib/avromatic/model/validation.rb +2 -2
  47. data/lib/avromatic/version.rb +1 -1
  48. metadata +62 -47
  49. data/.travis.yml +0 -23
  50. data/gemfiles/avro_patches_rails5_1.gemfile +0 -9
  51. data/lib/avromatic/patches.rb +0 -18
  52. data/lib/avromatic/patches/schema_validator_patch.rb +0 -39
@@ -55,7 +55,7 @@ module Avromatic
55
55
  false
56
56
  end
57
57
 
58
- def serialize(value, **)
58
+ def serialize(value, _strict)
59
59
  @serializer.call(value)
60
60
  end
61
61
 
@@ -32,7 +32,7 @@ module Avromatic
32
32
 
33
33
  alias_method :coerced?, :coercible?
34
34
 
35
- def serialize(value, **)
35
+ def serialize(value, _strict)
36
36
  value
37
37
  end
38
38
 
@@ -47,7 +47,7 @@ module Avromatic
47
47
  (input.is_a?(::Symbol) && allowed_values.include?(input.to_s))
48
48
  end
49
49
 
50
- def serialize(value, **)
50
+ def serialize(value, _strict)
51
51
  value
52
52
  end
53
53
 
@@ -36,7 +36,7 @@ module Avromatic
36
36
 
37
37
  alias_method :coerced?, :coercible?
38
38
 
39
- def serialize(value, **)
39
+ def serialize(value, _strict)
40
40
  value
41
41
  end
42
42
 
@@ -39,7 +39,7 @@ module Avromatic
39
39
  input.nil? || input.is_a?(::Float)
40
40
  end
41
41
 
42
- def serialize(value, **)
42
+ def serialize(value, _strict)
43
43
  value
44
44
  end
45
45
 
@@ -30,7 +30,7 @@ module Avromatic
30
30
 
31
31
  alias_method :coerced?, :coercible?
32
32
 
33
- def serialize(value, **)
33
+ def serialize(value, _strict)
34
34
  value
35
35
  end
36
36
 
@@ -59,12 +59,12 @@ module Avromatic
59
59
  end
60
60
  end
61
61
 
62
- def serialize(value, strict:)
62
+ def serialize(value, strict)
63
63
  if value.nil?
64
64
  value
65
65
  else
66
66
  value.each_with_object({}) do |(element_key, element_value), result|
67
- result[key_type.serialize(element_key, strict: strict)] = value_type.serialize(element_value, strict: strict)
67
+ result[key_type.serialize(element_key, strict)] = value_type.serialize(element_value, strict)
68
68
  end
69
69
  end
70
70
  end
@@ -30,7 +30,7 @@ module Avromatic
30
30
 
31
31
  alias_method :coerced?, :coercible?
32
32
 
33
- def serialize(_value, **)
33
+ def serialize(_value, _strict)
34
34
  nil
35
35
  end
36
36
 
@@ -39,16 +39,13 @@ module Avromatic
39
39
  value.nil? || value.is_a?(record_class)
40
40
  end
41
41
 
42
- def serialize(value, strict:)
42
+ def serialize(value, strict)
43
43
  if value.nil?
44
44
  value
45
- elsif !strict && Avromatic.use_custom_datum_writer && Avromatic.use_encoding_providers? && !record_class.config.mutable
46
- # n.b. Ideally we'd just return value here instead of wrapping it in a
47
- # hash but then we'd have no place to stash the union member index...
48
- { Avromatic::IO::ENCODING_PROVIDER => value }
45
+ elsif strict
46
+ value.avro_value_datum
49
47
  else
50
- # This is only used for recursive serialization so validation has already been done
51
- strict ? value.avro_value_datum(validate: false) : value.value_attributes_for_avro(validate: false)
48
+ value.value_attributes_for_avro
52
49
  end
53
50
  end
54
51
 
@@ -39,7 +39,7 @@ module Avromatic
39
39
  value.nil? || value.is_a?(::String)
40
40
  end
41
41
 
42
- def serialize(value, **)
42
+ def serialize(value, _strict)
43
43
  value
44
44
  end
45
45
 
@@ -7,7 +7,6 @@ module Avromatic
7
7
  module Model
8
8
  module Types
9
9
  class UnionType < AbstractType
10
- MEMBER_INDEX = ::Avromatic::IO::DatumReader::UNION_MEMBER_INDEX
11
10
  attr_reader :member_types, :value_classes, :input_classes
12
11
 
13
12
  def initialize(member_types:)
@@ -24,8 +23,8 @@ module Avromatic
24
23
  return input if coerced?(input)
25
24
 
26
25
  result = nil
27
- if input.is_a?(Hash) && input.key?(MEMBER_INDEX)
28
- result = member_types[input.delete(MEMBER_INDEX)].coerce(input)
26
+ if input.is_a?(Avromatic::IO::UnionDatum)
27
+ result = member_types[input.member_index].coerce(input.datum)
29
28
  else
30
29
  member_types.find do |member_type|
31
30
  result = safe_coerce(member_type, input)
@@ -40,18 +39,22 @@ module Avromatic
40
39
  end
41
40
 
42
41
  def coerced?(value)
42
+ return false if value.is_a?(Avromatic::IO::UnionDatum)
43
+
43
44
  value.nil? || member_types.any? do |member_type|
44
45
  member_type.coerced?(value)
45
46
  end
46
47
  end
47
48
 
48
49
  def coercible?(input)
50
+ return true if value.is_a?(Avromatic::IO::UnionDatum)
51
+
49
52
  coerced?(input) || member_types.any? do |member_type|
50
53
  member_type.coercible?(input)
51
54
  end
52
55
  end
53
56
 
54
- def serialize(value, strict:)
57
+ def serialize(value, strict)
55
58
  # Avromatic does not treat the null of an optional field as part of the union
56
59
  return nil if value.nil?
57
60
 
@@ -60,11 +63,11 @@ module Avromatic
60
63
  raise ArgumentError.new("Expected #{value.inspect} to be one of #{value_classes.map(&:name)}")
61
64
  end
62
65
 
63
- hash = member_types[member_index].serialize(value, strict: strict)
64
- if !strict && Avromatic.use_custom_datum_writer && value.is_a?(Avromatic::Model::Attributes)
65
- hash[Avromatic::IO::UNION_MEMBER_INDEX] = member_index
66
+ serialized_value = member_types[member_index].serialize(value, strict)
67
+ if !strict && Avromatic.use_custom_datum_writer
68
+ serialized_value = Avromatic::IO::UnionDatum.new(member_index, serialized_value)
66
69
  end
67
- hash
70
+ serialized_value
68
71
  end
69
72
 
70
73
  def referenced_model_classes
@@ -64,8 +64,8 @@ module Avromatic
64
64
  end
65
65
  end
66
66
 
67
- unless self.class.config.mutable
68
- @missing_attributes = missing_attributes.deep_freeze
67
+ if recursively_immutable?
68
+ @missing_attributes = missing_attributes.freeze
69
69
  end
70
70
 
71
71
  missing_attributes
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avromatic
4
- VERSION = '2.2.3'
4
+ VERSION = '2.4.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: 2.2.3
4
+ version: 2.4.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: 2020-01-07 00:00:00.000000000 Z
11
+ date: 2021-01-05 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.0'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.1'
22
+ version: '6.2'
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.0'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.1'
32
+ version: '6.2'
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.0'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '6.1'
42
+ version: '6.2'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: '5.0'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '6.1'
52
+ version: '6.2'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: avro
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: 1.7.7
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.10'
62
+ version: '1.11'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -69,7 +69,7 @@ dependencies:
69
69
  version: 1.7.7
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: '1.10'
72
+ version: '1.11'
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: avro_schema_registry-client
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -112,6 +112,20 @@ dependencies:
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
114
  version: '0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: appraisal
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
115
129
  - !ruby/object:Gem::Dependency
116
130
  name: avro-builder
117
131
  requirement: !ruby/object:Gem::Requirement
@@ -140,6 +154,20 @@ dependencies:
140
154
  - - ">="
141
155
  - !ruby/object:Gem::Version
142
156
  version: '1.11'
157
+ - !ruby/object:Gem::Dependency
158
+ name: overcommit
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - '='
162
+ - !ruby/object:Gem::Version
163
+ version: 0.35.0
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - '='
169
+ - !ruby/object:Gem::Version
170
+ version: 0.35.0
143
171
  - !ruby/object:Gem::Dependency
144
172
  name: rake
145
173
  requirement: !ruby/object:Gem::Requirement
@@ -169,7 +197,7 @@ dependencies:
169
197
  - !ruby/object:Gem::Version
170
198
  version: '3.0'
171
199
  - !ruby/object:Gem::Dependency
172
- name: simplecov
200
+ name: rspec_junit_formatter
173
201
  requirement: !ruby/object:Gem::Requirement
174
202
  requirements:
175
203
  - - ">="
@@ -183,21 +211,21 @@ dependencies:
183
211
  - !ruby/object:Gem::Version
184
212
  version: '0'
185
213
  - !ruby/object:Gem::Dependency
186
- name: webmock
214
+ name: salsify_rubocop
187
215
  requirement: !ruby/object:Gem::Requirement
188
216
  requirements:
189
- - - ">="
217
+ - - "~>"
190
218
  - !ruby/object:Gem::Version
191
- version: '0'
219
+ version: 0.52.1.1
192
220
  type: :development
193
221
  prerelease: false
194
222
  version_requirements: !ruby/object:Gem::Requirement
195
223
  requirements:
196
- - - ">="
224
+ - - "~>"
197
225
  - !ruby/object:Gem::Version
198
- version: '0'
226
+ version: 0.52.1.1
199
227
  - !ruby/object:Gem::Dependency
200
- name: appraisal
228
+ name: simplecov
201
229
  requirement: !ruby/object:Gem::Requirement
202
230
  requirements:
203
231
  - - ">="
@@ -211,33 +239,19 @@ dependencies:
211
239
  - !ruby/object:Gem::Version
212
240
  version: '0'
213
241
  - !ruby/object:Gem::Dependency
214
- name: overcommit
215
- requirement: !ruby/object:Gem::Requirement
216
- requirements:
217
- - - '='
218
- - !ruby/object:Gem::Version
219
- version: 0.35.0
220
- type: :development
221
- prerelease: false
222
- version_requirements: !ruby/object:Gem::Requirement
223
- requirements:
224
- - - '='
225
- - !ruby/object:Gem::Version
226
- version: 0.35.0
227
- - !ruby/object:Gem::Dependency
228
- name: salsify_rubocop
242
+ name: webmock
229
243
  requirement: !ruby/object:Gem::Requirement
230
244
  requirements:
231
- - - "~>"
245
+ - - ">="
232
246
  - !ruby/object:Gem::Version
233
- version: 0.52.1.1
247
+ version: '0'
234
248
  type: :development
235
249
  prerelease: false
236
250
  version_requirements: !ruby/object:Gem::Requirement
237
251
  requirements:
238
- - - "~>"
252
+ - - ">="
239
253
  - !ruby/object:Gem::Version
240
- version: 0.52.1.1
254
+ version: '0'
241
255
  - !ruby/object:Gem::Dependency
242
256
  name: sinatra
243
257
  requirement: !ruby/object:Gem::Requirement
@@ -259,13 +273,13 @@ executables: []
259
273
  extensions: []
260
274
  extra_rdoc_files: []
261
275
  files:
276
+ - ".circleci/config.yml"
262
277
  - ".gitignore"
263
278
  - ".overcommit.yml"
264
279
  - ".rspec"
265
280
  - ".rubocop.yml"
266
281
  - ".ruby-gemset"
267
282
  - ".ruby-version"
268
- - ".travis.yml"
269
283
  - Appraisals
270
284
  - CHANGELOG.md
271
285
  - Gemfile
@@ -276,18 +290,21 @@ files:
276
290
  - bin/console
277
291
  - bin/setup
278
292
  - gemfiles/.bundle/config
279
- - gemfiles/avro_patches_rails5_0.gemfile
280
- - gemfiles/avro_patches_rails5_1.gemfile
293
+ - gemfiles/avro1_10_rails5_2.gemfile
294
+ - gemfiles/avro1_10_rails6_0.gemfile
295
+ - gemfiles/avro1_10_rails6_1.gemfile
296
+ - gemfiles/avro1_8_rails5_2.gemfile
297
+ - gemfiles/avro1_9_rails5_2.gemfile
298
+ - gemfiles/avro1_9_rails6_0.gemfile
299
+ - gemfiles/avro1_9_rails6_1.gemfile
281
300
  - gemfiles/avro_patches_rails5_2.gemfile
282
301
  - gemfiles/avro_patches_rails6_0.gemfile
283
- - gemfiles/rails5_0.gemfile
284
- - gemfiles/rails5_1.gemfile
285
- - gemfiles/rails5_2.gemfile
286
- - gemfiles/rails6_0.gemfile
302
+ - gemfiles/avro_patches_rails6_1.gemfile
287
303
  - lib/avromatic.rb
288
304
  - lib/avromatic/io.rb
289
305
  - lib/avromatic/io/datum_reader.rb
290
306
  - lib/avromatic/io/datum_writer.rb
307
+ - lib/avromatic/io/union_datum.rb
291
308
  - lib/avromatic/messaging.rb
292
309
  - lib/avromatic/model.rb
293
310
  - lib/avromatic/model/attributes.rb
@@ -325,8 +342,6 @@ files:
325
342
  - lib/avromatic/model/validation_error.rb
326
343
  - lib/avromatic/model/value_object.rb
327
344
  - lib/avromatic/model_registry.rb
328
- - lib/avromatic/patches.rb
329
- - lib/avromatic/patches/schema_validator_patch.rb
330
345
  - lib/avromatic/railtie.rb
331
346
  - lib/avromatic/rspec.rb
332
347
  - lib/avromatic/version.rb
@@ -335,7 +350,7 @@ homepage: https://github.com/salsify/avromatic.git
335
350
  licenses:
336
351
  - MIT
337
352
  metadata: {}
338
- post_install_message:
353
+ post_install_message:
339
354
  rdoc_options: []
340
355
  require_paths:
341
356
  - lib
@@ -350,8 +365,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
350
365
  - !ruby/object:Gem::Version
351
366
  version: '0'
352
367
  requirements: []
353
- rubygems_version: 3.0.6
354
- signing_key:
368
+ rubygems_version: 3.0.8
369
+ signing_key:
355
370
  specification_version: 4
356
371
  summary: Generate Ruby models from Avro schemas
357
372
  test_files: []
@@ -1,23 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.6.3
4
- - 2.5.5
5
- - 2.4.6
6
- before_script:
7
- - bundle exec rubocop
8
- gemfile:
9
- - gemfiles/rails5_0.gemfile
10
- - gemfiles/rails5_1.gemfile
11
- - gemfiles/rails5_2.gemfile
12
- - gemfiles/rails6_0.gemfile
13
- - gemfiles/avro_patches_rails5_0.gemfile
14
- - gemfiles/avro_patches_rails5_1.gemfile
15
- - gemfiles/avro_patches_rails5_2.gemfile
16
- - gemfiles/avro_patches_rails6_0.gemfile
17
- script: bundle exec rspec
18
- matrix:
19
- exclude:
20
- - rvm: 2.4.6
21
- gemfile: gemfiles/rails6_0.gemfile
22
- - rvm: 2.4.6
23
- gemfile: gemfiles/avro_patches_rails6_0.gemfile