braintreehttp 0.1.3 → 0.1.4
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 +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
|