avromatic 2.2.1 → 2.2.2

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: 2506f67a4583f29252bd64effa9a5891e09d7ae6a6de458bdb5546592fd151f6
4
- data.tar.gz: a32641d0bd7ca448bdc35226dcb795791c1c0c8aab3ea9770bc950e85b32a832
3
+ metadata.gz: cba28133aa9a1a1ce5bb9a03c54fc4aa01f90d6dd3a72b98d74e5eb47276925e
4
+ data.tar.gz: 4fc8e33b860c6213fdda238946799164f8f52655b8cd3d5995f2c095e63aa2e1
5
5
  SHA512:
6
- metadata.gz: 427096144ac8c8d9544ea460a96eb93813fa977089b80c2616ad17e21784928b448bdb1a5d38aba0c4dde892e1caf3b331e444196ecc937c88bbbbc23eb14572
7
- data.tar.gz: 3a220e5ad23058c054b43e872a3bb81ab1018fc4ef40714a723b31cd93ae560518fac6ab9475993503369d8a8950991f283e2fc113c09bc3c66cf40ecf6d9cb5
6
+ metadata.gz: a027c37208e834dee9772ea0fc2cfdd0f0a65699426e4e89b00e32268f3938a2842d1b4101fdd50f04f0b61d151f8ea9a2dd08bba168875b47b39636053eebe6
7
+ data.tar.gz: 7568eb10634ab6dc9e80236c8cedccd18a7259858c4a4834797e91f3349f43cf34d0dec81b5cf3fec4c2cb9c8400002d4066c9240a27eca6d0751f470a1faffa
@@ -1,5 +1,9 @@
1
1
  # avromatic changelog
2
2
 
3
+ ## v2.2.2
4
+ - Fix missing models in the model registry when in development by loading the nested models of eager loaded models.
5
+ - Fake schema registry support for stubbing URLs with usernames and passwords.
6
+
3
7
  ## v2.2.1
4
8
  - Avoid allocating default empty hash in `Avromatic::IO::DatumReader.read_data`
5
9
 
@@ -85,9 +85,7 @@ module Avromatic
85
85
  end
86
86
 
87
87
  def self.eager_load_models!
88
- (@eager_load_model_names || []).each do |model_name|
89
- nested_models.ensure_registered_model(model_name.constantize)
90
- end
88
+ @eager_load_model_names&.each { |model_name| model_name.constantize.register! }
91
89
  end
92
90
  private_class_method :eager_load_models!
93
91
  end
@@ -12,10 +12,21 @@ module Avromatic
12
12
  module ClassMethods
13
13
  # Register this model if it can be used as a nested model.
14
14
  def register!
15
- if key_avro_schema.nil? && value_avro_schema.type_sym == :record
16
- nested_models.register(self)
15
+ return unless key_avro_schema.nil? && value_avro_schema.type_sym == :record
16
+
17
+ roots = [self]
18
+ until roots.empty?
19
+ model = roots.shift
20
+ next if nested_models.registered?(model)
21
+
22
+ nested_models.register(model)
23
+ roots.concat(model.referenced_model_classes)
17
24
  end
18
25
  end
26
+
27
+ def referenced_model_classes
28
+ attribute_definitions.values.flat_map { |definition| definition.type.referenced_model_classes }.freeze
29
+ end
19
30
  end
20
31
  end
21
32
  end
@@ -4,6 +4,9 @@ module Avromatic
4
4
  module Model
5
5
  module Types
6
6
  class AbstractType
7
+ EMPTY_ARRAY = [].freeze
8
+ private_constant :EMPTY_ARRAY
9
+
7
10
  def value_classes
8
11
  raise "#{__method__} must be overridden by #{self.class.name}"
9
12
  end
@@ -31,6 +34,10 @@ module Avromatic
31
34
  def serialize(_value, **)
32
35
  raise "#{__method__} must be overridden by #{self.class.name}"
33
36
  end
37
+
38
+ def referenced_model_classes
39
+ raise "#{__method__} must be overridden by #{self.class.name}"
40
+ end
34
41
  end
35
42
  end
36
43
  end
@@ -47,6 +47,10 @@ module Avromatic
47
47
  value.map { |element| value_type.serialize(element, strict: strict) }
48
48
  end
49
49
  end
50
+
51
+ def referenced_model_classes
52
+ value_type.referenced_model_classes
53
+ end
50
54
  end
51
55
  end
52
56
  end
@@ -33,6 +33,10 @@ module Avromatic
33
33
  def serialize(value, **)
34
34
  value
35
35
  end
36
+
37
+ def referenced_model_classes
38
+ EMPTY_ARRAY
39
+ end
36
40
  end
37
41
  end
38
42
  end
@@ -58,6 +58,10 @@ module Avromatic
58
58
  def serialize(value, **)
59
59
  @serializer.call(value)
60
60
  end
61
+
62
+ def referenced_model_classes
63
+ default_type.referenced_model_classes
64
+ end
61
65
  end
62
66
  end
63
67
  end
@@ -35,6 +35,10 @@ module Avromatic
35
35
  def serialize(value, **)
36
36
  value
37
37
  end
38
+
39
+ def referenced_model_classes
40
+ EMPTY_ARRAY
41
+ end
38
42
  end
39
43
  end
40
44
  end
@@ -50,6 +50,10 @@ module Avromatic
50
50
  def serialize(value, **)
51
51
  value
52
52
  end
53
+
54
+ def referenced_model_classes
55
+ EMPTY_ARRAY
56
+ end
53
57
  end
54
58
  end
55
59
  end
@@ -39,6 +39,10 @@ module Avromatic
39
39
  def serialize(value, **)
40
40
  value
41
41
  end
42
+
43
+ def referenced_model_classes
44
+ EMPTY_ARRAY
45
+ end
42
46
  end
43
47
  end
44
48
  end
@@ -42,6 +42,10 @@ module Avromatic
42
42
  def serialize(value, **)
43
43
  value
44
44
  end
45
+
46
+ def referenced_model_classes
47
+ EMPTY_ARRAY
48
+ end
45
49
  end
46
50
  end
47
51
  end
@@ -33,6 +33,10 @@ module Avromatic
33
33
  def serialize(value, **)
34
34
  value
35
35
  end
36
+
37
+ def referenced_model_classes
38
+ EMPTY_ARRAY
39
+ end
36
40
  end
37
41
  end
38
42
  end
@@ -68,6 +68,11 @@ module Avromatic
68
68
  end
69
69
  end
70
70
  end
71
+
72
+ def referenced_model_classes
73
+ # According to Avro's spec, keys can only be strings, so we can safely disregard #key_type here.
74
+ value_type.referenced_model_classes
75
+ end
71
76
  end
72
77
  end
73
78
  end
@@ -33,6 +33,10 @@ module Avromatic
33
33
  def serialize(_value, **)
34
34
  nil
35
35
  end
36
+
37
+ def referenced_model_classes
38
+ EMPTY_ARRAY
39
+ end
36
40
  end
37
41
  end
38
42
  end
@@ -51,6 +51,10 @@ module Avromatic
51
51
  strict ? value.avro_value_datum(validate: false) : value.value_attributes_for_avro(validate: false)
52
52
  end
53
53
  end
54
+
55
+ def referenced_model_classes
56
+ [record_class].freeze
57
+ end
54
58
  end
55
59
  end
56
60
  end
@@ -5,7 +5,7 @@ require 'avromatic/model/types/abstract_type'
5
5
  module Avromatic
6
6
  module Model
7
7
  module Types
8
- class StringType
8
+ class StringType < AbstractType
9
9
  VALUE_CLASSES = [::String].freeze
10
10
  INPUT_CLASSES = [::String, ::Symbol].freeze
11
11
 
@@ -42,6 +42,10 @@ module Avromatic
42
42
  def serialize(value, **)
43
43
  value
44
44
  end
45
+
46
+ def referenced_model_classes
47
+ EMPTY_ARRAY
48
+ end
45
49
  end
46
50
  end
47
51
  end
@@ -26,6 +26,9 @@ module Avromatic
26
26
  ::Time.at(input.to_i, input.usec)
27
27
  end
28
28
 
29
+ def referenced_model_classes
30
+ EMPTY_ARRAY
31
+ end
29
32
  end
30
33
  end
31
34
  end
@@ -26,6 +26,9 @@ module Avromatic
26
26
  ::Time.at(input.to_i, input.usec / 1000 * 1000)
27
27
  end
28
28
 
29
+ def referenced_model_classes
30
+ EMPTY_ARRAY
31
+ end
29
32
  end
30
33
  end
31
34
  end
@@ -67,6 +67,10 @@ module Avromatic
67
67
  hash
68
68
  end
69
69
 
70
+ def referenced_model_classes
71
+ member_types.flat_map(&:referenced_model_classes).tap(&:uniq!).freeze
72
+ end
73
+
70
74
  private
71
75
 
72
76
  def find_index(value)
@@ -29,7 +29,8 @@ module Avromatic
29
29
  @hash[name] = model
30
30
  end
31
31
 
32
- def registered?(fullname)
32
+ def registered?(fullname_or_model)
33
+ fullname = fullname_or_model.is_a?(String) ? fullname_or_model : model_fullname(fullname_or_model)
33
34
  @hash.key?(fullname)
34
35
  end
35
36
 
@@ -1,11 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'uri'
3
4
  require 'webmock/rspec'
4
5
  require 'avro_schema_registry/test/fake_server'
5
6
 
6
7
  RSpec.configure do |config|
7
8
  config.before(:each) do
8
- WebMock.stub_request(:any, /^#{Avromatic.registry_url}/).to_rack(AvroSchemaRegistry::FakeServer)
9
+ # Strip the username/password from the URL so WebMock can match the URL
10
+ registry_uri = URI(Avromatic.registry_url)
11
+ registry_uri.userinfo = ''
12
+
13
+ WebMock.stub_request(:any, /^#{registry_uri}/).to_rack(AvroSchemaRegistry::FakeServer)
9
14
  AvroSchemaRegistry::FakeServer.clear
10
15
  Avromatic.build_messaging!
11
16
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avromatic
4
- VERSION = '2.2.1'
4
+ VERSION = '2.2.2'
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.1
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salsify Engineering
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-08 00:00:00.000000000 Z
11
+ date: 2020-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel