Class: Kloudless::HTTP

Inherits:
Object
  • Object
show all
Defined in:
lib/kloudless/http.rb

Overview

Net::HTTP wrapper

Class Method Summary collapse

Class Method Details

.delete(path, params: {}, headers: {}, **kwargs) ⇒ Object



51
52
53
# File 'lib/kloudless/http.rb', line 51

def self.delete(path, params: {}, headers: {}, **kwargs)
  self.request('delete', path, params: params, headers: headers, **kwargs)
end

.execute(request, parse_response: true) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/kloudless/http.rb', line 55

def self.execute(request, parse_response: true)
  uri = request.uri
  @last_request = request
  headers.each {|k,v| request[k] = v}

  response = @mock_response || Net::HTTP.start(uri.hostname, uri.port, use_ssl: (uri.scheme == "https")) {|http|
    http.request(request)
  }

  if parse_response
    json = JSON.parse(response.body)
    raise Kloudless::Error.from_json(json) if json["error_code"]
    json
  else
    response.body
  end
end

.expect(method, returns: nil, args: [], &blk) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/kloudless/http.rb', line 88

def self.expect(method, returns: nil, args: [], &blk)
  begin
    mock = MiniTest::Mock.new
    Kloudless.http = mock
    mock.expect(method, returns, args)
    blk.call
    mock.verify
  ensure
    Kloudless.http = Kloudless::HTTP
  end
end

.get(path, **kwargs) ⇒ Object



32
33
34
# File 'lib/kloudless/http.rb', line 32

def self.get(path, **kwargs)
  self.request('get', path, **kwargs)
end

.headersObject

Public: Headers global to all requests



8
9
10
# File 'lib/kloudless/http.rb', line 8

def self.headers
  @headers ||= {}
end

.last_requestObject

Internal: Returns the last Net::HTTP request sent by #execute.



101
102
103
# File 'lib/kloudless/http.rb', line 101

def self.last_request
  @last_request
end

.mock_response(response = nil, &blk) ⇒ Object

Internal: Returns ‘response` the next time #execute is invoked for the duration of `blk`. Used for testing.

mock = Struct.new(:body).new("{}")
Kloudless::HTTP.mock_response(mock) do
  Kloudless::HTTP.get "/foo"  # returns {}
end


80
81
82
83
84
85
# File 'lib/kloudless/http.rb', line 80

def self.mock_response(response = nil, &blk)
  @mock_response = response || Struct.new(:body).new("{}")
  blk.call
ensure
  @mock_response = nil
end

.patch(path, params: {}, data: {}, headers: {}, **kwargs) ⇒ Object



46
47
48
49
# File 'lib/kloudless/http.rb', line 46

def self.patch(path, params: {}, data: {}, headers: {}, **kwargs)
  self.request('patch', path, params: params, data: data,
               headers: headers, **kwargs)
end

.post(path, params: {}, data: {}, headers: {}, **kwargs) ⇒ Object



36
37
38
39
# File 'lib/kloudless/http.rb', line 36

def self.post(path, params: {}, data: {}, headers: {}, **kwargs)
  self.request('post', path, params: params, data: data,
               headers: headers, **kwargs)
end

.put(path, params: {}, data: {}, headers: {}, **kwargs) ⇒ Object



41
42
43
44
# File 'lib/kloudless/http.rb', line 41

def self.put(path, params: {}, data: {}, headers: {}, **kwargs)
  self.request('put', path, params: params, data: data,
               headers: headers, **kwargs)
end

.request(method, path, params: {}, data: {}, headers: {}, parse_request: true, parse_response: true) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/kloudless/http.rb', line 12

def self.request(method, path, params: {}, data: {}, headers: {},
                 parse_request: true, parse_response: true)
  uri = URI.parse(Kloudless::API_URL + path)
  uri.query = URI.encode_www_form(params) if !params.empty?

  if ['post', 'put', 'patch'].member?(method)
    headers["Content-Type"] ||= "application/json"
  end

  request = Net::HTTP.const_get(method.capitalize).new(uri)
  request.initialize_http_header(headers)

  if !data.empty?
    data = data.to_json if parse_request
    request.body = data
  end

  execute(request, parse_response: parse_response)
end