braintreehttp 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/braintreehttp.gemspec +1 -1
- data/lib/braintreehttp/encoder.rb +48 -7
- data/spec/braintreehttp/encoder_spec.rb +22 -4
- 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: c27ebe667c362f44516138044f39c78650e219d0
|
4
|
+
data.tar.gz: 1c28e5cfaccc55dbd25aebd705c5c85ed5a732c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f54685a7c757914557ba87bfff0676d10dbd4fbf5e90d2e9b1f8570c1317dd39bf6c62438eb935ceefbd146b898f7f4dec5a76cfe65ec21b347f0a19cc09845b
|
7
|
+
data.tar.gz: 7dd8391649bcf0f8a6797d4ed0cfadff17f0741886664018980e56af4b2a150cae3473d26b32577bd605a9b52e8ad18a4a997b8c9a87dd45648a76bbd1366436
|
data/braintreehttp.gemspec
CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.name = "braintreehttp"
|
5
5
|
s.summary = "BraintreeHttp Client Library"
|
6
6
|
s.description = "Used for generated API clients"
|
7
|
-
s.version = "0.1.
|
7
|
+
s.version = "0.1.4"
|
8
8
|
s.license = "MIT"
|
9
9
|
s.author = "Braintree"
|
10
10
|
s.email = "code@getbraintree.com"
|
@@ -3,31 +3,72 @@ require 'json'
|
|
3
3
|
module BraintreeHttp
|
4
4
|
|
5
5
|
class Encoder
|
6
|
+
def initialize
|
7
|
+
@encoders = [Json.new, Text.new]
|
8
|
+
end
|
6
9
|
|
7
10
|
def serialize_request(req)
|
8
11
|
raise UnsupportedEncodingError.new('HttpRequest did not have Content-Type header set') unless req.headers && (req.headers['content-type'] || req.headers['Content-Type'])
|
9
12
|
|
10
13
|
content_type = req.headers['content-type'] || req.headers['Content-Type']
|
11
|
-
|
14
|
+
content_type = content_type.first if content_type.kind_of?(Array)
|
15
|
+
|
16
|
+
enc = _encoder(content_type)
|
17
|
+
raise UnsupportedEncodingError.new("Unable to serialize request with Content-Type #{content_type}. Supported encodings are #{supported_encodings}") unless enc
|
12
18
|
|
13
|
-
|
19
|
+
enc.encode(req.body)
|
14
20
|
end
|
15
21
|
|
16
22
|
def deserialize_response(resp, headers)
|
17
23
|
raise UnsupportedEncodingError.new('HttpResponse did not have Content-Type header set') unless headers && (headers['content-type'] || headers['Content-Type'])
|
18
24
|
|
19
25
|
content_type = headers['content-type'] || headers['Content-Type']
|
20
|
-
|
26
|
+
content_type = content_type.first if content_type.kind_of?(Array)
|
27
|
+
|
28
|
+
enc = _encoder(content_type)
|
29
|
+
raise UnsupportedEncodingError.new("Unable to deserialize response with Content-Type #{content_type}. Supported decodings are #{supported_encodings}") unless enc
|
21
30
|
|
22
|
-
|
31
|
+
enc.decode(resp)
|
23
32
|
end
|
24
33
|
|
25
34
|
def supported_encodings
|
26
|
-
|
35
|
+
@encoders.map { |enc| enc.content_type.inspect }
|
36
|
+
end
|
37
|
+
|
38
|
+
def _encoder(content_type)
|
39
|
+
idx = @encoders.index { |enc| enc.content_type.match(content_type) }
|
40
|
+
|
41
|
+
@encoders[idx] if idx
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Json
|
46
|
+
|
47
|
+
def encode(body)
|
48
|
+
JSON.generate(body)
|
49
|
+
end
|
50
|
+
|
51
|
+
def decode(body)
|
52
|
+
JSON.parse(body)
|
53
|
+
end
|
54
|
+
|
55
|
+
def content_type
|
56
|
+
/^application\/json$/
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class Text
|
61
|
+
|
62
|
+
def encode(body)
|
63
|
+
body.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
def decode(body)
|
67
|
+
body.to_s
|
27
68
|
end
|
28
69
|
|
29
|
-
def
|
30
|
-
|
70
|
+
def content_type
|
71
|
+
/^text\/.*/
|
31
72
|
end
|
32
73
|
end
|
33
74
|
end
|
@@ -3,7 +3,7 @@ require 'ostruct'
|
|
3
3
|
describe Encoder do
|
4
4
|
|
5
5
|
describe 'serialize_request' do
|
6
|
-
it 'serializes the request' do
|
6
|
+
it 'serializes the request when content-type == application/json' do
|
7
7
|
req = OpenStruct.new({
|
8
8
|
:headers => {
|
9
9
|
"content-type" => "application/json"
|
@@ -25,6 +25,17 @@ describe Encoder do
|
|
25
25
|
expect(Encoder.new.serialize_request(req)).to eq(expected)
|
26
26
|
end
|
27
27
|
|
28
|
+
it 'serializes the request when content-type == text/*' do
|
29
|
+
req = OpenStruct.new({
|
30
|
+
:headers => {
|
31
|
+
"content-type" => "text/plain"
|
32
|
+
},
|
33
|
+
:body => "some text"
|
34
|
+
})
|
35
|
+
|
36
|
+
expect(Encoder.new.serialize_request(req)).to eq("some text")
|
37
|
+
end
|
38
|
+
|
28
39
|
it 'throws when content-type is not application/json' do
|
29
40
|
req = OpenStruct.new({
|
30
41
|
:headers => {
|
@@ -33,7 +44,7 @@ describe Encoder do
|
|
33
44
|
:body => { :string => "value" }
|
34
45
|
})
|
35
46
|
|
36
|
-
expect{Encoder.new.serialize_request(req)}.to raise_error(UnsupportedEncodingError, /Unable to serialize request with Content-Type .*\. Supported encodings are
|
47
|
+
expect{Encoder.new.serialize_request(req)}.to raise_error(UnsupportedEncodingError, /Unable to serialize request with Content-Type .*\. Supported encodings are .*/)
|
37
48
|
end
|
38
49
|
|
39
50
|
it 'throws when headers undefined' do
|
@@ -52,7 +63,7 @@ describe Encoder do
|
|
52
63
|
"content-type" => ["application/xml"]
|
53
64
|
}
|
54
65
|
|
55
|
-
expect{Encoder.new.deserialize_response(body, headers)}.to raise_error(UnsupportedEncodingError, /Unable to deserialize response with Content-Type .*\. Supported decodings are
|
66
|
+
expect{Encoder.new.deserialize_response(body, headers)}.to raise_error(UnsupportedEncodingError, /Unable to deserialize response with Content-Type .*\. Supported decodings are .*/)
|
56
67
|
end
|
57
68
|
|
58
69
|
it 'throws when headers undefined' do
|
@@ -61,7 +72,7 @@ describe Encoder do
|
|
61
72
|
expect{Encoder.new.deserialize_response(body, nil)}.to raise_error(UnsupportedEncodingError, 'HttpResponse did not have Content-Type header set')
|
62
73
|
end
|
63
74
|
|
64
|
-
it 'deserializes the response' do
|
75
|
+
it 'deserializes the response when content-type == application/json' do
|
65
76
|
expected = {
|
66
77
|
"string" => "value",
|
67
78
|
"number" => 1.23,
|
@@ -78,5 +89,12 @@ describe Encoder do
|
|
78
89
|
|
79
90
|
expect(Encoder.new.deserialize_response(body, headers)).to eq(expected)
|
80
91
|
end
|
92
|
+
|
93
|
+
it 'deserializes the response when content-type == text/*' do
|
94
|
+
headers = {"content-type" => ["text/plain"]}
|
95
|
+
body = 'some text'
|
96
|
+
|
97
|
+
expect(Encoder.new.deserialize_response(body, headers)).to eq('some text')
|
98
|
+
end
|
81
99
|
end
|
82
100
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: braintreehttp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Braintree
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Used for generated API clients
|
14
14
|
email: code@getbraintree.com
|
@@ -45,7 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
45
45
|
version: '0'
|
46
46
|
requirements: []
|
47
47
|
rubyforge_project: braintreehttp
|
48
|
-
rubygems_version: 2.
|
48
|
+
rubygems_version: 2.6.12
|
49
49
|
signing_key:
|
50
50
|
specification_version: 4
|
51
51
|
summary: BraintreeHttp Client Library
|