avromatic 0.14.0 → 0.15.0.rc0

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: 81c34321b541cd5f890615b13b5d61b59b27a8a5
4
- data.tar.gz: 0bb1ccc7add9573f0dd92433fcf64badc9eb1f28
3
+ metadata.gz: 935170792357d999c9d6a98f815245d6444ea575
4
+ data.tar.gz: a6e2ebefd9798759d134b7e28ee74c518c504683
5
5
  SHA512:
6
- metadata.gz: 99f92368cee3ad3dd2bf300929e691239bbb8b923530ac8ee883b7732dcf0078b96be4ded276744e17409b705f4b452d9d0e1effad1b19104a41f8360145278b
7
- data.tar.gz: 99d8b4e28ed8e8a8aa5af87ad0ca60487f2d3437047b2e3133909ff72e24cc536719dce9f258451e37a53d359f8c55c3a6cd2ed99d3c892fcebbe780ceca45c1
6
+ metadata.gz: c859d6d1487f231a09fb13e5eefb5c9c4c4c43d75acd9f70f45139270988ae99fb543f8bc9dd89a45fc9600e092b4827bc872ac1d4ae557e7b85e7ee1ffedf61
7
+ data.tar.gz: 4eb618843588851496fec520d0265b68b8a230d9d01c3eeb27a71577335338d3b9b6b545596a48992650a194e3b2ff5e24259b465867cad30b7b058359d69206
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # avromatic changelog
2
2
 
3
+ ## v0.15.0
4
+ - Add patch to `AvroTurf::SchemaRegistry` to lookup existing schema ids using
5
+ `GET /subjects/:subject/fingerprints/:fingerprint` from `#register`.
6
+ This endpoint is supported in the avro-schema-registry.
7
+ - Add patch to the `FakeSchemaRegistryServer` from `AvroTurf` to support the
8
+ fingerprint endpoint.
9
+
3
10
  ## v0.14.0
4
11
  - Add `Avromatic::Messaging` and `Avromatic::IO::DatumReader` classes to
5
12
  optimize the decoding of Avro unions to Avromatic models.
@@ -1,4 +1,4 @@
1
- require 'avro_turf/schema_registry'
1
+ require 'avromatic/schema_registry_patch'
2
2
 
3
3
  module Avromatic
4
4
  module Model
@@ -1,5 +1,5 @@
1
1
  require 'webmock/rspec'
2
- require 'avro_turf/test/fake_schema_registry_server'
2
+ require 'avromatic/test/fake_schema_registry_server'
3
3
 
4
4
  RSpec.configure do |config|
5
5
  config.before(:each) do
@@ -0,0 +1,27 @@
1
+ require 'avro_turf'
2
+ require 'avro_turf/schema_registry'
3
+
4
+ AvroTurf::SchemaRegistry.class_eval do
5
+ # Override register to first check if a schema is registered by fingerprint
6
+ def register(subject, schema)
7
+ schema_object = if schema.is_a?(String)
8
+ Avro::Schema.parse(schema)
9
+ else
10
+ schema
11
+ end
12
+
13
+ registered = false
14
+ data = begin
15
+ get("/subjects/#{subject}/fingerprints/#{schema_object.sha256_fingerprint.to_s(16)}")
16
+ rescue
17
+ registered = true
18
+ post("/subjects/#{subject}/versions", body: { schema: schema.to_s }.to_json)
19
+ end
20
+
21
+ id = data.fetch('id')
22
+
23
+ @logger.info("#{registered ? 'Registered' : 'Found'} schema for subject `#{subject}`; id = #{id}")
24
+
25
+ id
26
+ end
27
+ end
@@ -0,0 +1,24 @@
1
+ require 'avro_turf/test/fake_schema_registry_server'
2
+
3
+ # Add support for endpoint to lookup subject schema id by fingerprint.
4
+ FakeSchemaRegistryServer.class_eval do
5
+ SCHEMA_NOT_FOUND = FakeSchemaRegistryServer::SCHEMA_NOT_FOUND
6
+ SCHEMAS = FakeSchemaRegistryServer::SCHEMAS
7
+ SUBJECTS = FakeSchemaRegistryServer::SUBJECTS
8
+
9
+ get '/subjects/:subject/fingerprints/:fingerprint' do
10
+ subject = params[:subject]
11
+ halt(404, SCHEMA_NOT_FOUND) unless SUBJECTS.key?(subject)
12
+
13
+ fingerprint = params[:fingerprint]
14
+ fingerprint = fingerprint.to_i.to_s(16) if /^\d+$/ =~ fingerprint
15
+
16
+ schema_id = SCHEMAS.find_index do |schema|
17
+ Avro::Schema.parse(schema).sha256_fingerprint.to_s(16) == fingerprint
18
+ end
19
+
20
+ halt(404, SCHEMA_NOT_FOUND) unless schema_id && SUBJECTS[subject].include?(schema_id)
21
+
22
+ { id: schema_id }.to_json
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module Avromatic
2
- VERSION = '0.14.0'.freeze
2
+ VERSION = '0.15.0.rc0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avromatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0.rc0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salsify Engineering
@@ -272,6 +272,8 @@ files:
272
272
  - lib/avromatic/model_registry.rb
273
273
  - lib/avromatic/railtie.rb
274
274
  - lib/avromatic/rspec.rb
275
+ - lib/avromatic/schema_registry_patch.rb
276
+ - lib/avromatic/test/fake_schema_registry_server.rb
275
277
  - lib/avromatic/version.rb
276
278
  - log/.gitkeep
277
279
  homepage: https://github.com/salsify/avromatic.git
@@ -289,9 +291,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
289
291
  version: '0'
290
292
  required_rubygems_version: !ruby/object:Gem::Requirement
291
293
  requirements:
292
- - - ">="
294
+ - - ">"
293
295
  - !ruby/object:Gem::Version
294
- version: '0'
296
+ version: 1.3.1
295
297
  requirements: []
296
298
  rubyforge_project:
297
299
  rubygems_version: 2.6.8