Class: BraintreeHttp::HttpClient

Inherits:
Object
  • Object
show all
Defined in:
lib/braintreehttp/http_client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment) ⇒ HttpClient

Returns a new instance of HttpClient.



12
13
14
15
16
# File 'lib/braintreehttp/http_client.rb', line 12

def initialize(environment)
  @environment = environment
  @injectors = []
  @encoder = Encoder.new
end

Instance Attribute Details

#encoderObject

Returns the value of attribute encoder.



10
11
12
# File 'lib/braintreehttp/http_client.rb', line 10

def encoder
  @encoder
end

#environmentObject

Returns the value of attribute environment.



10
11
12
# File 'lib/braintreehttp/http_client.rb', line 10

def environment
  @environment
end

Instance Method Details

#_parse_response(response) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/braintreehttp/http_client.rb', line 55

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 = OpenStruct.new(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

#add_injector(&block) ⇒ Object



22
23
24
# File 'lib/braintreehttp/http_client.rb', line 22

def add_injector(&block)
  @injectors << block
end

#execute(request) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/braintreehttp/http_client.rb', line 30

def execute(request)
  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

  http_request = Net::HTTPGenericRequest.new(request.verb, true, true, request.path, request.headers)

  if has_body(request)
    http_request.body = @encoder.serialize_request(request)
  end

  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) ⇒ Object



26
27
28
# File 'lib/braintreehttp/http_client.rb', line 26

def has_body(request)
  request.respond_to?(:body) and request.body
end

#user_agentObject



18
19
20
# File 'lib/braintreehttp/http_client.rb', line 18

def user_agent
  "BraintreeHttp-Ruby HTTP/1.1"
end