Class: Gitlab::Request

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/gitlab/request.rb

Direct Known Subclasses

API

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#endpointObject

Returns the value of attribute endpoint.



12
13
14
# File 'lib/gitlab/request.rb', line 12

def endpoint
  @endpoint
end

#private_tokenObject

Returns the value of attribute private_token.



12
13
14
# File 'lib/gitlab/request.rb', line 12

def private_token
  @private_token
end

Class Method Details

.decode(response) ⇒ Object

Decodes a JSON response into Ruby object.



34
35
36
37
38
# File 'lib/gitlab/request.rb', line 34

def self.decode(response)
  JSON.load response
rescue JSON::ParserError
  raise Error::Parsing.new "The response is not a valid JSON"
end

.parse(body) ⇒ Object

Converts the response body to an ObjectifiedHash.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/gitlab/request.rb', line 15

def self.parse(body)
  body = decode(body)

  if body.is_a? Hash
    ObjectifiedHash.new body
  elsif body.is_a? Array
    PaginatedResponse.new(body.collect! { |e| ObjectifiedHash.new(e) })
  elsif body
    true
  elsif !body
    false
  elsif body.nil?
    false
  else
    raise Error::Parsing.new "Couldn't parse a response body"
  end
end

Instance Method Details

#delete(path, options = {}) ⇒ Object



58
59
60
61
62
# File 'lib/gitlab/request.rb', line 58

def delete(path, options={})
  set_httparty_config(options)
  set_authorization_header(options)
  validate self.class.delete(@endpoint + path, options)
end

#get(path, options = {}) ⇒ Object



40
41
42
43
44
# File 'lib/gitlab/request.rb', line 40

def get(path, options={})
  set_httparty_config(options)
  set_authorization_header(options)
  validate self.class.get(@endpoint + path, options)
end

#post(path, options = {}) ⇒ Object



46
47
48
49
50
# File 'lib/gitlab/request.rb', line 46

def post(path, options={})
  set_httparty_config(options)
  set_authorization_header(options, path)
  validate self.class.post(@endpoint + path, options)
end

#put(path, options = {}) ⇒ Object



52
53
54
55
56
# File 'lib/gitlab/request.rb', line 52

def put(path, options={})
  set_httparty_config(options)
  set_authorization_header(options)
  validate self.class.put(@endpoint + path, options)
end

#set_request_defaults(sudo = nil) ⇒ Object

Sets a base_uri and default_params for requests.

Raises:



88
89
90
91
92
# File 'lib/gitlab/request.rb', line 88

def set_request_defaults(sudo=nil)
  self.class.default_params sudo: sudo
  raise Error::MissingCredentials.new("Please set an endpoint to API") unless @endpoint
  self.class.default_params.delete(:sudo) if sudo.nil?
end

#validate(response) ⇒ Object

Checks the response code for common errors. Returns parsed response for successful requests.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/gitlab/request.rb', line 66

def validate(response)
  case response.code
  when 400 then fail Error::BadRequest.new error_message(response)
  when 401 then fail Error::Unauthorized.new error_message(response)
  when 403 then fail Error::Forbidden.new error_message(response)
  when 404 then fail Error::NotFound.new error_message(response)
  when 405 then fail Error::MethodNotAllowed.new error_message(response)
  when 409 then fail Error::Conflict.new error_message(response)
  when 422 then fail Error::Unprocessable.new error_message(response)
  when 500 then fail Error::InternalServerError.new error_message(response)
  when 502 then fail Error::BadGateway.new error_message(response)
  when 503 then fail Error::ServiceUnavailable.new error_message(response)
  end

  parsed = response.parsed_response
  parsed.client = self if parsed.respond_to?(:client=)
  parsed.parse_headers!(response.headers) if parsed.respond_to?(:parse_headers!)
  parsed
end