sinatra-avro 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  - - ">="