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:



90
91
92
93
94
# File 'lib/gitlab/request.rb', line 90

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
85
86
# File 'lib/gitlab/request.rb', line 66

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

  fail error_klass.new(response) if error_klass

  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