avromatic 2.2.1 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
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