class BraintreeHttp::HttpClient
Attributes
encoder[RW]
environment[RW]
Public Class Methods
new(environment)
click to toggle source
# File lib/braintreehttp/http_client.rb, line 10 def initialize(environment) @environment = environment @injectors = [] @encoder = Encoder.new end
Public Instance Methods
_parse_response(response)
click to toggle source
# File lib/braintreehttp/http_client.rb, line 64 def _parse_response(response) status_code = response.code.to_i result = response.body headers = response.to_hash if result && !result.empty? deserialized = @encoder.deserialize_response(response.body, headers) if deserialized.is_a?(String) || deserialized.is_a?(Array) result = deserialized else result = _parse_values(deserialized) end else result = nil end obj = OpenStruct.new({ :status_code => status_code, :result => result, :headers => response.to_hash, }) if status_code >= 200 and status_code < 300 return obj elsif raise HttpError.new(obj.status_code, obj.result, obj.headers) end end
_parse_values(values)
click to toggle source
# File lib/braintreehttp/http_client.rb, line 93 def _parse_values(values) obj = nil if values.is_a?(Array) obj = [] values.each do |v| obj << _parse_values(v) end elsif values.is_a?(Hash) obj = OpenStruct.new() values.each do |k, v| obj[k] = _parse_values(v) end else obj = values end obj end
add_injector(&block)
click to toggle source
# File lib/braintreehttp/http_client.rb, line 20 def add_injector(&block) @injectors << block end
execute(req)
click to toggle source
# File lib/braintreehttp/http_client.rb, line 28 def execute(req) headers = req.headers || {} request = OpenStruct.new({ :verb => req.verb, :path => req.path, :headers => headers.clone, :body => req.body, }) if !request.headers request.headers = {} end @injectors.each do |injector| injector.call(request) end if !request.headers["User-Agent"] || request.headers["User-Agent"] == "Ruby" request.headers["User-Agent"] = user_agent end body = nil if has_body(request) body = @encoder.serialize_request(request) end http_request = Net::HTTPGenericRequest.new(request.verb, body != nil, true, request.path, request.headers) http_request.body = body uri = URI(@environment.base_url) Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| _parse_response(http.request(http_request)) end end
has_body(request)
click to toggle source
# File lib/braintreehttp/http_client.rb, line 24 def has_body(request) request.respond_to?(:body) and request.body end
user_agent()
click to toggle source
# File lib/braintreehttp/http_client.rb, line 16 def user_agent "BraintreeHttp-Ruby HTTP/1.1" end