Class: PayPalHttp::Encoder
- Inherits:
-
Object
- Object
- PayPalHttp::Encoder
- Defined in:
- lib/paypalhttp/encoder.rb
Instance Method Summary collapse
- #_encoder(content_type) ⇒ Object
- #_extract_header(headers, key) ⇒ Object
- #deserialize_response(resp, headers) ⇒ Object
-
#initialize ⇒ Encoder
constructor
A new instance of Encoder.
- #serialize_request(req) ⇒ Object
- #supported_encodings ⇒ Object
Constructor Details
#initialize ⇒ Encoder
Returns a new instance of Encoder.
11 12 13 |
# File 'lib/paypalhttp/encoder.rb', line 11 def initialize @encoders = [Json.new, Text.new, Multipart.new, FormEncoded.new] end |
Instance Method Details
#_encoder(content_type) ⇒ Object
65 66 67 68 69 |
# File 'lib/paypalhttp/encoder.rb', line 65 def _encoder(content_type) idx = @encoders.index { |enc| enc.content_type.match(content_type) } @encoders[idx] if idx end |
#_extract_header(headers, key) ⇒ Object
71 72 73 74 75 76 |
# File 'lib/paypalhttp/encoder.rb', line 71 def _extract_header(headers, key) value = headers[key.downcase] value = value.first if value.kind_of?(Array) value end |
#deserialize_response(resp, headers) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/paypalhttp/encoder.rb', line 40 def deserialize_response(resp, headers) raise UnsupportedEncodingError.new('HttpResponse did not have Content-Type header set') unless headers && (headers['content-type']) content_type = _extract_header(headers, 'content-type') content_type.downcase! enc = _encoder(content_type) raise UnsupportedEncodingError.new("Unable to deserialize response with Content-Type #{content_type}. Supported decodings are #{supported_encodings}") unless enc content_encoding = _extract_header(headers, 'content-encoding') if content_encoding == 'gzip' buf = StringIO.new(resp, 'rb') reader = Zlib::GzipReader.new(buf) resp = reader.read end enc.decode(resp) end |
#serialize_request(req) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/paypalhttp/encoder.rb', line 15 def serialize_request(req) raise UnsupportedEncodingError.new('HttpRequest did not have Content-Type header set') unless req.headers && (req.headers['content-type']) content_type = _extract_header(req.headers, 'content-type') enc = _encoder(content_type) raise UnsupportedEncodingError.new("Unable to serialize request with Content-Type #{content_type}. Supported encodings are #{supported_encodings}") unless enc encoded = enc.encode(req) content_encoding = _extract_header(req.headers, 'content-encoding') if content_encoding == 'gzip' out = StringIO.new('w') writer = Zlib::GzipWriter.new(out) writer.write encoded writer.close encoded = out.string end encoded end |
#supported_encodings ⇒ Object
61 62 63 |
# File 'lib/paypalhttp/encoder.rb', line 61 def supported_encodings @encoders.map { |enc| enc.content_type.inspect } end |