sinatra-avro 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/sinatra/avro.rb +7 -23
- data/lib/sinatra/avro/version.rb +1 -1
- data/sinatra-avro.gemspec +1 -1
- data/spec/avro_spec.rb +6 -32
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b819f5b483ef91d1140c55c8ea1e8fe1842a4b9
|
4
|
+
data.tar.gz: 6ae1f76a6160b0257c8aaee8fa983928e261b78b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 370801053a3d24f21eb3956404ff12ce57ca81068a61a8710444d85764861da5095ba203f0f4aa6a6bb7c6e98c5374bf7c3f462ec467ed368fa410b933e9967c
|
7
|
+
data.tar.gz: 419fafcfb3879dfb51a7801dae5d5c436ab42fd09702b081da420156efec2f0b0edf295beacbcd020acd572f323e04f17dd6577e816e98ced545a6c66c2a543b
|
data/lib/sinatra/avro.rb
CHANGED
@@ -1,40 +1,24 @@
|
|
1
1
|
require 'sinatra/avro/version'
|
2
2
|
require 'sinatra/base'
|
3
|
-
require '
|
3
|
+
require 'avro_turf'
|
4
4
|
|
5
5
|
module Sinatra
|
6
6
|
module Avro
|
7
7
|
MIME_TYPE = "avro/binary".freeze
|
8
8
|
|
9
9
|
def avro(object, options = {})
|
10
|
-
schema_json = fetch_avro_schema(options)
|
11
|
-
|
12
10
|
# Set the Content-Type response header.
|
13
11
|
content_type MIME_TYPE
|
14
12
|
|
15
|
-
avro_encode(object,
|
16
|
-
end
|
17
|
-
|
18
|
-
def avro_encode(object, schema_json)
|
19
|
-
schema = ::Avro::Schema.parse(schema_json)
|
20
|
-
writer = ::Avro::IO::DatumWriter.new(schema)
|
21
|
-
io = StringIO.new
|
22
|
-
|
23
|
-
dw = ::Avro::DataFile::Writer.new(io, writer, schema)
|
24
|
-
dw << object.to_h
|
25
|
-
dw.close
|
26
|
-
|
27
|
-
io.string
|
28
|
-
end
|
29
|
-
|
30
|
-
def fetch_avro_schema(options = {})
|
31
|
-
options[:schema] || load_avro_schema(options.fetch(:schema_name))
|
13
|
+
avro_encode(object, options)
|
32
14
|
end
|
33
15
|
|
34
|
-
|
35
|
-
schema_path = File.join(settings.avro_schema_dir, schema_name + ".avsc")
|
16
|
+
private
|
36
17
|
|
37
|
-
|
18
|
+
def avro_encode(object, options)
|
19
|
+
schema_name = options.fetch(:schema_name) { raise "Please specify a schema name" }
|
20
|
+
@avro ||= AvroTurf.new(schemas_path: settings.avro_schema_dir)
|
21
|
+
@avro.encode(object, schema_name: schema_name)
|
38
22
|
end
|
39
23
|
end
|
40
24
|
|
data/lib/sinatra/avro/version.rb
CHANGED
data/sinatra-avro.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_dependency "
|
20
|
+
spec.add_dependency "avro_turf"
|
21
21
|
spec.add_dependency "sinatra"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
data/spec/avro_spec.rb
CHANGED
@@ -4,28 +4,7 @@ require 'json'
|
|
4
4
|
describe Sinatra::Avro do
|
5
5
|
include Sinatra::TestHelpers
|
6
6
|
|
7
|
-
|
8
|
-
type: "record",
|
9
|
-
name: "person",
|
10
|
-
fields: [
|
11
|
-
{ name: "name", type: "string" },
|
12
|
-
{ name: "age", type: "long" },
|
13
|
-
]
|
14
|
-
}.to_json
|
15
|
-
|
16
|
-
|
17
|
-
it "allows serializing responses with Avro" do
|
18
|
-
mock_app do
|
19
|
-
get '/' do
|
20
|
-
data = { "name" => "Jane", "age" => 42 }
|
21
|
-
avro data, schema: SCHEMA
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
expect(decoded_data).to eq("name" => "Jane", "age" => 42)
|
26
|
-
end
|
27
|
-
|
28
|
-
it "allows loading the schema from disk automatically" do
|
7
|
+
before do
|
29
8
|
mock_app do
|
30
9
|
set :avro_schema_dir, "spec/"
|
31
10
|
get '/' do
|
@@ -33,24 +12,19 @@ describe Sinatra::Avro do
|
|
33
12
|
avro data, schema_name: "person"
|
34
13
|
end
|
35
14
|
end
|
15
|
+
end
|
36
16
|
|
37
|
-
|
17
|
+
it "allows serializing data using Avro" do
|
18
|
+
avro = get('/').body
|
19
|
+
expect(avro_decode(avro)).to eq("name" => "Jane", "age" => 42)
|
38
20
|
end
|
39
21
|
|
40
22
|
it "sets the Content-Type header to avro/binary" do
|
41
|
-
mock_app do
|
42
|
-
get '/' do
|
43
|
-
data = { "name" => "Jane", "age" => 42 }
|
44
|
-
avro data, schema: SCHEMA
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
23
|
response = get('/')
|
49
24
|
expect(response["Content-Type"]).to eq "avro/binary"
|
50
25
|
end
|
51
26
|
|
52
|
-
def
|
53
|
-
avro = get('/').body
|
27
|
+
def avro_decode(avro)
|
54
28
|
reader = Avro::DataFile::Reader.new(StringIO.new(avro), Avro::IO::DatumReader.new)
|
55
29
|
data = reader.first
|
56
30
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-avro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.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: 2015-
|
11
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: avro_turf
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|