Class: GH::Response

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable, Case
Defined in:
lib/gh/response.rb

Overview

Public: Class wrapping low level Github responses.

Delegates safe methods to the parsed body (expected to be an Array or Hash).

Constant Summary collapse

CONTENT_TYPE =

Internal: Content-Type header value expected from Github

"application/json; charset=utf-8"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(headers = {}, body = "{}") ⇒ Response

Internal: Initializes a new instance.

headers - HTTP headers as a Hash body - HTTP body as a String

Raises:

  • (ArgumentError)


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/gh/response.rb', line 26

def initialize(headers = {}, body = "{}")
  @headers = Hash[headers.map { |k,v| [k.downcase, v] }]
  raise ArgumentError, "unexpected Content-Type #{content_type}" if content_type and content_type != CONTENT_TYPE

  case body
  when respond_to(:to_str)  then @body = body.to_str
  when respond_to(:to_hash) then @data = body.to_hash
  when respond_to(:to_ary)  then @data = body.to_ary
  else raise ArgumentError, "cannot parse #{body.inspect}"
  end

  @body ||= MultiJson.encode(@data)
  @body   = @body.encode("utf-8") if @body.respond_to? :encode
  @data ||= MultiJson.decode(@body)
end

Instance Attribute Details

#bodyObject

Returns the value of attribute body.



15
16
17
# File 'lib/gh/response.rb', line 15

def body
  @body
end

#dataObject

Returns the value of attribute data.



15
16
17
# File 'lib/gh/response.rb', line 15

def data
  @data
end

#headersObject

Returns the value of attribute headers.



15
16
17
# File 'lib/gh/response.rb', line 15

def headers
  @headers
end

Instance Method Details

#dupObject

Public: Duplicates the instance. Will also duplicate some instance variables to behave as expected.

Returns new Response instance.



45
46
47
# File 'lib/gh/response.rb', line 45

def dup
  super.dup_ivars
end

#hash?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/gh/response.rb', line 72

def hash?
  respond_to? :to_hash
end

#respond_to?(method) ⇒ Boolean

Public: Returns true or false indicating whether it supports method.

Returns:

  • (Boolean)


55
56
57
58
# File 'lib/gh/response.rb', line 55

def respond_to?(method, *)
  return super unless method.to_s == "to_hash" or method.to_s == "to_ary"
  data.respond_to? method
end

#to_aryObject

Public: Implements to_ary conventions, please check respond_to?(:to_hash).



67
68
69
70
# File 'lib/gh/response.rb', line 67

def to_ary
  return method_missing(__method__) unless respond_to? __method__
  @data.dup.to_ary
end

#to_hashObject

Public: Implements to_hash conventions, please check respond_to?(:to_hash).



61
62
63
64
# File 'lib/gh/response.rb', line 61

def to_hash
  return method_missing(__method__) unless respond_to? __method__
  @data.dup.to_hash
end

#to_sObject

Public: Returns the response body as a String.



50
51
52
# File 'lib/gh/response.rb', line 50

def to_s
  @body.dup
end