avro_turf 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/avro_turf/messaging.rb +3 -3
- data/lib/avro_turf/schema_to_avro_patch.rb +11 -0
- data/lib/avro_turf/version.rb +1 -1
- data/spec/messaging_spec.rb +8 -1
- data/spec/schema_to_avro_patch_spec.rb +42 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0df3c290be95bcafd27a4473ba75df36a5275a6b
|
4
|
+
data.tar.gz: 17e1a0283f0479c60a691d3c52e33fb8eaf3f30c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7df0d445557d08c28a9a6e0357dea7b76159846ab3f3e456b1200e4a28c84bb1853727d4259bcf94432567f8031cfb34e80b30963b5fb1e1f43fff5ce0a52e1e
|
7
|
+
data.tar.gz: 144873d0859cb6c937898b94ca3649dca34284b9fa16ebaa122244faef4c20d838c871ab51ecf91c9c69d803d84fd55215867544ac57d5283a86b18fbc8ffc9f
|
data/README.md
CHANGED
@@ -99,7 +99,7 @@ By default, AvroTurf will encode data in the Avro data file format. This means t
|
|
99
99
|
|
100
100
|
The Messaging API will automatically register schemas used for encoding data, and will fetch the corresponding schema when decoding. Instead of including the full schema in the output, only a schema id generated by the registry is included. Registering the same schema twice is idempotent, so no coordination is needed.
|
101
101
|
|
102
|
-
**NOTE:** The Messaging format is _not_ compatible with the Avro data file API.
|
102
|
+
**NOTE:** [The Messaging format](https://github.com/confluentinc/schema-registry/blob/master/docs/serializer-formatter.rst#wire-format) is _not_ compatible with the Avro data file API.
|
103
103
|
|
104
104
|
The Messaging API is not included by default, so you must require 'avro_turf/messaging' explicitly if you want to use it.
|
105
105
|
|
data/lib/avro_turf/messaging.rb
CHANGED
@@ -43,12 +43,12 @@ class AvroTurf
|
|
43
43
|
# namespace - The namespace of the schema (optional).
|
44
44
|
#
|
45
45
|
# Returns the encoded data as a String.
|
46
|
-
def encode(message, schema_name: nil, namespace: @namespace)
|
46
|
+
def encode(message, schema_name: nil, namespace: @namespace, subject: nil)
|
47
47
|
schema = @schema_store.find(schema_name, namespace)
|
48
48
|
|
49
49
|
# Schemas are registered under the full name of the top level Avro record
|
50
|
-
# type.
|
51
|
-
schema_id = @registry.register(schema.fullname, schema)
|
50
|
+
# type, or `subject` if it's provided.
|
51
|
+
schema_id = @registry.register(subject || schema.fullname, schema)
|
52
52
|
|
53
53
|
stream = StringIO.new
|
54
54
|
writer = Avro::IO::DatumWriter.new(schema)
|
@@ -34,8 +34,19 @@ class AvroTurf
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
module DatumReader
|
39
|
+
def read_default_value(field_schema, default_value)
|
40
|
+
if default_value == :no_default
|
41
|
+
raise Avro::AvroError, "Missing data for #{field_schema} with no default"
|
42
|
+
end
|
43
|
+
|
44
|
+
super
|
45
|
+
end
|
46
|
+
end
|
37
47
|
end
|
38
48
|
end
|
39
49
|
|
40
50
|
Avro::Schema::RecordSchema.send(:prepend, AvroTurf::AvroGemPatch::RecordSchema)
|
41
51
|
Avro::Schema::Field.send(:prepend, AvroTurf::AvroGemPatch::Field)
|
52
|
+
Avro::IO::DatumReader.send(:prepend, AvroTurf::AvroGemPatch::DatumReader)
|
data/lib/avro_turf/version.rb
CHANGED
data/spec/messaging_spec.rb
CHANGED
@@ -79,7 +79,14 @@ describe AvroTurf::Messaging do
|
|
79
79
|
allow(registry).to receive(:register).and_call_original
|
80
80
|
message = { "full_name" => "John Doe" }
|
81
81
|
avro.encode(message, schema_name: "person")
|
82
|
-
expect(registry).to have_received(:register)
|
82
|
+
expect(registry).to have_received(:register).with("person", anything)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "allows specifying a schema registry subject" do
|
86
|
+
allow(registry).to receive(:register).and_call_original
|
87
|
+
message = { "full_name" => "John Doe" }
|
88
|
+
avro.encode(message, schema_name: "person", subject: "people")
|
89
|
+
expect(registry).to have_received(:register).with("people", anything)
|
83
90
|
end
|
84
91
|
end
|
85
92
|
|
@@ -22,3 +22,45 @@ describe Avro::Schema do
|
|
22
22
|
})
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
|
27
|
+
describe Avro::IO::DatumReader do
|
28
|
+
let(:writer_schema) do
|
29
|
+
Avro::Schema.parse <<-AVSC
|
30
|
+
{
|
31
|
+
"name": "no_default",
|
32
|
+
"type": "record",
|
33
|
+
"fields": [
|
34
|
+
{ "type": "string", "name": "one" }
|
35
|
+
]
|
36
|
+
}
|
37
|
+
AVSC
|
38
|
+
end
|
39
|
+
let(:reader_schema) do
|
40
|
+
Avro::Schema.parse <<-AVSC
|
41
|
+
{
|
42
|
+
"name": "no_default",
|
43
|
+
"type": "record",
|
44
|
+
"fields": [
|
45
|
+
{ "type": "string", "name": "one" },
|
46
|
+
{ "type": "string", "name": "two" }
|
47
|
+
]
|
48
|
+
}
|
49
|
+
AVSC
|
50
|
+
end
|
51
|
+
|
52
|
+
it "raises an error for missing fields without a default" do
|
53
|
+
stream = StringIO.new
|
54
|
+
writer = Avro::IO::DatumWriter.new(writer_schema)
|
55
|
+
encoder = Avro::IO::BinaryEncoder.new(stream)
|
56
|
+
writer.write({ 'one' => 'first' }, encoder)
|
57
|
+
encoded = stream.string
|
58
|
+
|
59
|
+
stream = StringIO.new(encoded)
|
60
|
+
decoder = Avro::IO::BinaryDecoder.new(stream)
|
61
|
+
reader = Avro::IO::DatumReader.new(writer_schema, reader_schema)
|
62
|
+
expect do
|
63
|
+
reader.read(decoder)
|
64
|
+
end.to raise_error(Avro::AvroError, 'Missing data for "string" with no default')
|
65
|
+
end
|
66
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avro_turf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Schierbeck
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro
|