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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 64c5c1ae08b3b6a93d40d6bb3943ef02ff0d4f73
4
- data.tar.gz: 56000a66e436f1b85776d29b7f66839d19d9652c
3
+ metadata.gz: 2772458993a885959c80d6dca47736122e3eacab
4
+ data.tar.gz: acdadf951b66dec62337cd7a072b3ccd8a39c609
5
5
  SHA512:
6
- metadata.gz: df9bc9cad465cd515ee4913d5ea1829aff99945952f2a2d35b040b44e267d46670795cd6ee5c6fb7136eda864f876f09afa9c903aecb036be05e71c19bccacf3
7
- data.tar.gz: 9cb6e0825c55dab2cf0df0f80f67e79c740dd356ecddd75922c0fd9e6142daefc395fd5d7c2596e6d6deeb985284ff739fb9b2714892d5d938a2dc1193dcb716
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
- - Add support for additional parameters to
5
- `AvroTurf::ConfluentSchemaRegistry#compatible?`.
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 `AvroTurf::ConfluentSchemaRegistry` object used to store Avro schemas
64
- so that they can be referenced by id. Either `schema_registry` or
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
- * **use_cacheable_schema_registration**: Avromatic supports a Schema Registry
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', '>= 0.8.0'
27
- spec.add_runtime_dependency 'avro-resolution_canonical_form'
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 FakeSchemaRegistryServer
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 'avro_turf'
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, :use_cacheable_schema_registration
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.use_cacheable_schema_registration = true
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
- AvroTurf::CachedConfluentSchemaRegistry.new(
31
- AvroTurf::ConfluentSchemaRegistry.new(registry_url, logger: logger)
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
@@ -1,5 +1,3 @@
1
- require 'avromatic/schema_registry_patch'
2
-
3
1
  module Avromatic
4
2
  module Model
5
3
 
@@ -1,9 +1,9 @@
1
1
  require 'webmock/rspec'
2
- require 'avromatic/test/fake_confluent_schema_registry_server'
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(FakeConfluentSchemaRegistryServer)
7
- FakeConfluentSchemaRegistryServer.clear
6
+ WebMock.stub_request(:any, /^#{Avromatic.registry_url}/).to_rack(AvroSchemaRegistry::FakeServer)
7
+ AvroSchemaRegistry::FakeServer.clear
8
8
  end
9
9
  end
@@ -1,3 +1,3 @@
1
1
  module Avromatic
2
- VERSION = '0.21.0.rc0'.freeze
2
+ VERSION = '0.21.0.rc1'.freeze
3
3
  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: 0.21.0.rc0
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-03-30 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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.8.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.8.0
94
+ version: '0'
83
95
  - !ruby/object:Gem::Dependency
84
- name: avro-resolution_canonical_form
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.