avromatic 0.21.0.rc0 → 0.21.0.rc1

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
  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.