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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74b847c334a0acd04d84f5fbfc19277f53181316
4
- data.tar.gz: a79f2ef7e84dd9a5b8a13f1b4c66c2f367ce938f
3
+ metadata.gz: 3b819f5b483ef91d1140c55c8ea1e8fe1842a4b9
4
+ data.tar.gz: 6ae1f76a6160b0257c8aaee8fa983928e261b78b
5
5
  SHA512:
6
- metadata.gz: 7301c468c09573e7facef164a6afa85b2d57f3b8e9b5f8597025ea97964b990d2e5ae32900b232e1b3122def74ce2f98d9161418a08df92b84fb9f65890c4fb9
7
- data.tar.gz: 5b22aa2c57860ad511c8af6da1d113666729ab9b9755a34352edcd1ee6e9eff7e852c815ff8bff939af243b041c1e65dd1fb6cdeaf578bd1141ec62ba55fcb0a
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 'avro'
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, schema_json)
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
- def load_avro_schema(schema_name)
35
- schema_path = File.join(settings.avro_schema_dir, schema_name + ".avsc")
16
+ private
36
17
 
37
- File.read(schema_path)
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
 
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module Avro
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
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 "avro"
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
- SCHEMA = {
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
- expect(decoded_data).to eq("name" => "Jane", "age" => 42)
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 decoded_data
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.1
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-02-28 00:00:00.000000000 Z
11
+ date: 2015-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: avro
14
+ name: avro_turf
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="