avromatic 0.21.0.rc0 → 0.21.0.rc1
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 +4 -4
- data/CHANGELOG.md +5 -2
- data/README.md +4 -3
- data/avromatic.gemspec +5 -5
- data/lib/avromatic.rb +12 -6
- data/lib/avromatic/model/message_decoder.rb +0 -2
- data/lib/avromatic/rspec.rb +3 -3
- data/lib/avromatic/version.rb +1 -1
- metadata +21 -12
- data/lib/avromatic/schema_registry_patch.rb +0 -44
- data/lib/avromatic/test/fake_confluent_schema_registry_server.rb +0 -25
- data/lib/avromatic/test/fake_schema_registry_server.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2772458993a885959c80d6dca47736122e3eacab
|
4
|
+
data.tar.gz: acdadf951b66dec62337cd7a072b3ccd8a39c609
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bff54d4180814fce8d0f464134ea964ce74565fb04140438c5db0e94d033ddbb9e9fa130dc58ddb2d6196ec67fd379ae4db8b0affbc1f47a4ff68c0d5e4c6825
|
7
|
+
data.tar.gz: 87d71e4fcb198adc571c509fefd2f0a0447d5ee05bf830e6dd583cba2f29cd09bc630058c45c866c546cd75cfa37c78f9a830597dfcf332b06939da6d51630ab
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# avromatic changelog
|
2
2
|
|
3
3
|
## v0.21.0
|
4
|
-
-
|
5
|
-
`
|
4
|
+
- Remove monkey-patches for `AvroTurf::ConfluentSchemaRegistry` and
|
5
|
+
`FakeConfluentSchemaRegistryServer` and depend on `avro_schema_registry-client`
|
6
|
+
instead.
|
7
|
+
- Rename the configuration option `use_cacheable_schema_registration` to
|
8
|
+
`use_schema_fingerprint_lookup`.
|
6
9
|
|
7
10
|
## v0.20.0
|
8
11
|
- Support schema stores with a `#clear_schemas` method.
|
data/README.md
CHANGED
@@ -60,12 +60,13 @@ The configuration options below are required when using a schema registry
|
|
60
60
|
(see [Confluent Schema Registry](http://docs.confluent.io/2.0.1/schema-registry/docs/intro.html))
|
61
61
|
and the [Messaging API](#messaging-api).
|
62
62
|
|
63
|
-
* **schema_registry**: An `
|
64
|
-
|
63
|
+
* **schema_registry**: An `AvroSchemaRegistry::Client` or
|
64
|
+
`AvroTurf::ConfluentSchemaRegistry` object used to store Avro schemas
|
65
|
+
so that they can be referenced by id. Either `schema_registry` or
|
65
66
|
`registry_url` must be configured.
|
66
67
|
* **registry_url**: URL for the schema registry. Either `schema_registry` or
|
67
68
|
`registry_url` must be configured.
|
68
|
-
* **
|
69
|
+
* **use_schema_fingerprint_lookup**: Avromatic supports a Schema Registry
|
69
70
|
[extension](https://github.com/salsify/avro-schema-registry#extensions) that
|
70
71
|
provides an endpoint to lookup existing schema ids by fingerprint.
|
71
72
|
A successful response from this GET request can be cached indefinitely.
|
data/avromatic.gemspec
CHANGED
@@ -21,10 +21,10 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_runtime_dependency 'avro', '>= 1.7.7'
|
23
23
|
spec.add_runtime_dependency 'virtus'
|
24
|
-
spec.add_runtime_dependency 'activesupport'
|
25
|
-
spec.add_runtime_dependency 'activemodel'
|
26
|
-
spec.add_runtime_dependency 'avro_turf'
|
27
|
-
spec.add_runtime_dependency '
|
24
|
+
spec.add_runtime_dependency 'activesupport', '>= 4.1', '< 5.1'
|
25
|
+
spec.add_runtime_dependency 'activemodel', '>= 4.1', '< 5.1'
|
26
|
+
spec.add_runtime_dependency 'avro_turf'
|
27
|
+
spec.add_runtime_dependency 'avro_schema_registry-client'
|
28
28
|
|
29
29
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
30
30
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency 'simplecov'
|
33
33
|
spec.add_development_dependency 'webmock'
|
34
34
|
spec.add_development_dependency 'avro-builder', '>= 0.12.0'
|
35
|
-
# For
|
35
|
+
# For AvroSchemaRegistry::FakeServer
|
36
36
|
spec.add_development_dependency 'sinatra'
|
37
37
|
spec.add_development_dependency 'salsify_rubocop', '~> 0.47.0'
|
38
38
|
spec.add_development_dependency 'overcommit', '0.35.0'
|
data/lib/avromatic.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'avromatic/version'
|
2
|
-
require '
|
2
|
+
require 'avro_schema_registry-client'
|
3
3
|
require 'avromatic/model'
|
4
4
|
require 'avromatic/model_registry'
|
5
5
|
require 'avromatic/messaging'
|
@@ -9,7 +9,7 @@ module Avromatic
|
|
9
9
|
class << self
|
10
10
|
attr_accessor :schema_registry, :registry_url, :schema_store, :logger,
|
11
11
|
:messaging, :type_registry, :nested_models,
|
12
|
-
:use_custom_datum_reader, :
|
12
|
+
:use_custom_datum_reader, :use_schema_fingerprint_lookup
|
13
13
|
|
14
14
|
delegate :register_type, to: :type_registry
|
15
15
|
end
|
@@ -18,7 +18,7 @@ module Avromatic
|
|
18
18
|
self.logger = Logger.new($stdout)
|
19
19
|
self.type_registry = Avromatic::Model::TypeRegistry.new
|
20
20
|
self.use_custom_datum_reader = true
|
21
|
-
self.
|
21
|
+
self.use_schema_fingerprint_lookup = true
|
22
22
|
|
23
23
|
def self.configure
|
24
24
|
yield self
|
@@ -27,9 +27,15 @@ module Avromatic
|
|
27
27
|
|
28
28
|
def self.build_schema_registry
|
29
29
|
raise 'Avromatic must be configured with a registry_url' unless registry_url
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
if use_schema_fingerprint_lookup
|
31
|
+
AvroSchemaRegistry::CachedClient.new(
|
32
|
+
AvroSchemaRegistry::Client.new(registry_url, logger: logger)
|
33
|
+
)
|
34
|
+
else
|
35
|
+
AvroTurf::CachedConfluentSchemaRegistry.new(
|
36
|
+
AvroTurf::ConfluentSchemaRegistry.new(registry_url, logger: logger)
|
37
|
+
)
|
38
|
+
end
|
33
39
|
end
|
34
40
|
|
35
41
|
def self.build_messaging
|
data/lib/avromatic/rspec.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'webmock/rspec'
|
2
|
-
require '
|
2
|
+
require 'avro_schema_registry/test/fake_server'
|
3
3
|
|
4
4
|
RSpec.configure do |config|
|
5
5
|
config.before(:each) do
|
6
|
-
WebMock.stub_request(:any, /^#{Avromatic.registry_url}/).to_rack(
|
7
|
-
|
6
|
+
WebMock.stub_request(:any, /^#{Avromatic.registry_url}/).to_rack(AvroSchemaRegistry::FakeServer)
|
7
|
+
AvroSchemaRegistry::FakeServer.clear
|
8
8
|
end
|
9
9
|
end
|
data/lib/avromatic/version.rb
CHANGED
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: 0.21.0.
|
4
|
+
version: 0.21.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Salsify Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro
|
@@ -44,44 +44,56 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '4.1'
|
48
|
+
- - "<"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '5.1'
|
48
51
|
type: :runtime
|
49
52
|
prerelease: false
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
51
54
|
requirements:
|
52
55
|
- - ">="
|
53
56
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
57
|
+
version: '4.1'
|
58
|
+
- - "<"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '5.1'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: activemodel
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
65
|
- - ">="
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
67
|
+
version: '4.1'
|
68
|
+
- - "<"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '5.1'
|
62
71
|
type: :runtime
|
63
72
|
prerelease: false
|
64
73
|
version_requirements: !ruby/object:Gem::Requirement
|
65
74
|
requirements:
|
66
75
|
- - ">="
|
67
76
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
77
|
+
version: '4.1'
|
78
|
+
- - "<"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '5.1'
|
69
81
|
- !ruby/object:Gem::Dependency
|
70
82
|
name: avro_turf
|
71
83
|
requirement: !ruby/object:Gem::Requirement
|
72
84
|
requirements:
|
73
85
|
- - ">="
|
74
86
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0
|
87
|
+
version: '0'
|
76
88
|
type: :runtime
|
77
89
|
prerelease: false
|
78
90
|
version_requirements: !ruby/object:Gem::Requirement
|
79
91
|
requirements:
|
80
92
|
- - ">="
|
81
93
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0
|
94
|
+
version: '0'
|
83
95
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
96
|
+
name: avro_schema_registry-client
|
85
97
|
requirement: !ruby/object:Gem::Requirement
|
86
98
|
requirements:
|
87
99
|
- - ">="
|
@@ -286,9 +298,6 @@ files:
|
|
286
298
|
- lib/avromatic/model_registry.rb
|
287
299
|
- lib/avromatic/railtie.rb
|
288
300
|
- lib/avromatic/rspec.rb
|
289
|
-
- lib/avromatic/schema_registry_patch.rb
|
290
|
-
- lib/avromatic/test/fake_confluent_schema_registry_server.rb
|
291
|
-
- lib/avromatic/test/fake_schema_registry_server.rb
|
292
301
|
- lib/avromatic/version.rb
|
293
302
|
- log/.gitkeep
|
294
303
|
homepage: https://github.com/salsify/avromatic.git
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'avro_turf'
|
2
|
-
require 'avro_turf/confluent_schema_registry'
|
3
|
-
require 'avro-resolution_canonical_form'
|
4
|
-
|
5
|
-
module Avromatic
|
6
|
-
module CacheableSchemaRegistration
|
7
|
-
# Override register to first check if a schema is registered by fingerprint
|
8
|
-
def register(subject, schema)
|
9
|
-
return super unless Avromatic.use_cacheable_schema_registration
|
10
|
-
|
11
|
-
begin
|
12
|
-
lookup_subject_schema(subject, schema)
|
13
|
-
rescue Excon::Errors::NotFound
|
14
|
-
data = post("/subjects/#{subject}/versions", body: { schema: schema.to_s }.to_json)
|
15
|
-
id = data.fetch('id')
|
16
|
-
@logger.info("Registered schema for subject `#{subject}`; id = #{id}")
|
17
|
-
id
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def lookup_subject_schema(subject, schema)
|
22
|
-
schema_object = if schema.is_a?(String)
|
23
|
-
Avro::Schema.parse(schema)
|
24
|
-
else
|
25
|
-
schema
|
26
|
-
end
|
27
|
-
|
28
|
-
data = get("/subjects/#{subject}/fingerprints/#{schema_object.sha256_resolution_fingerprint.to_s(16)}")
|
29
|
-
id = data.fetch('id')
|
30
|
-
@logger.info("Found schema for subject `#{subject}`; id = #{id}")
|
31
|
-
id
|
32
|
-
end
|
33
|
-
|
34
|
-
# Override to add support for additional params
|
35
|
-
def compatible?(subject, schema, version = 'latest', **params)
|
36
|
-
data = post("/compatibility/subjects/#{subject}/versions/#{version}",
|
37
|
-
expects: [200, 404],
|
38
|
-
body: { schema: schema.to_s }.merge!(params).to_json)
|
39
|
-
data.fetch('is_compatible', false) unless data.key?('error_code')
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
AvroTurf::ConfluentSchemaRegistry.prepend(Avromatic::CacheableSchemaRegistration)
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'avro_turf/test/fake_confluent_schema_registry_server'
|
2
|
-
require 'avro-resolution_canonical_form'
|
3
|
-
|
4
|
-
# Add support for endpoint to lookup subject schema id by fingerprint.
|
5
|
-
FakeConfluentSchemaRegistryServer.class_eval do
|
6
|
-
SCHEMA_NOT_FOUND = FakeConfluentSchemaRegistryServer::SCHEMA_NOT_FOUND
|
7
|
-
SCHEMAS = FakeConfluentSchemaRegistryServer::SCHEMAS
|
8
|
-
SUBJECTS = FakeConfluentSchemaRegistryServer::SUBJECTS
|
9
|
-
|
10
|
-
get '/subjects/:subject/fingerprints/:fingerprint' do
|
11
|
-
subject = params[:subject]
|
12
|
-
halt(404, SCHEMA_NOT_FOUND) unless SUBJECTS.key?(subject)
|
13
|
-
|
14
|
-
fingerprint = params[:fingerprint]
|
15
|
-
fingerprint = fingerprint.to_i.to_s(16) if /^\d+$/ =~ fingerprint
|
16
|
-
|
17
|
-
schema_id = SCHEMAS.find_index do |schema|
|
18
|
-
Avro::Schema.parse(schema).sha256_resolution_fingerprint.to_s(16) == fingerprint
|
19
|
-
end
|
20
|
-
|
21
|
-
halt(404, SCHEMA_NOT_FOUND) unless schema_id && SUBJECTS[subject].include?(schema_id)
|
22
|
-
|
23
|
-
{ id: schema_id }.to_json
|
24
|
-
end
|
25
|
-
end
|
@@ -1,6 +0,0 @@
|
|
1
|
-
require 'avromatic/test/fake_confluent_schema_registry_server'
|
2
|
-
require 'avro_turf/test/fake_schema_registry_server'
|
3
|
-
|
4
|
-
# This file is for back compatibility. The class has been renamed
|
5
|
-
# FakeConfluentSchemaRegistryServer, but avro_turf defines an alias for the
|
6
|
-
# old name, so we alias the require for now.
|