Class: Harborapp::ApiResponse
- Inherits:
-
Object
- Object
- Harborapp::ApiResponse
- Defined in:
- lib/harborapp/api_response.rb
Instance Attribute Summary collapse
-
#_body ⇒ Object
Returns the value of attribute _body.
-
#_entity ⇒ Object
Returns the value of attribute _entity.
-
#_headers ⇒ Object
Returns the value of attribute _headers.
-
#_status ⇒ Object
Returns the value of attribute _status.
-
#errors ⇒ Object
Returns the value of attribute errors.
Instance Method Summary collapse
- #first ⇒ Object
-
#initialize(response) ⇒ ApiResponse
constructor
A new instance of ApiResponse.
-
#length ⇒ Object
enumeratable methods and such.
- #limit ⇒ Object
-
#method_missing(meth, *args, &block) ⇒ Object
if we’re trying to access a method directly on the ApiResponse, the user is probably trying to get an attribute directly from the single entity that was returned.
- #offset ⇒ Object
- #success? ⇒ Boolean
- #total_results ⇒ Object
Constructor Details
#initialize(response) ⇒ ApiResponse
Returns a new instance of ApiResponse.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/harborapp/api_response.rb', line 8 def initialize(response) if response.nil? or response.body.nil? or response.code.nil? or response.headers.nil? # this response is broken, raise an error. raise NilApiResponse.new(500, {}, {"errors" => [{"code" => 990, "message" => "API Server sent back an empty response."}]}) end self._body = ((response.body.is_a? String) ? JSON.parse(response.body) : response.body) self._status = response.code self._headers = response.headers case _status when 200, 201 self._entity = Harborapp::Entity.new(_body) when 400,401,403,404,500 if _body["errors"] self.errors = _body["errors"] # quickly look to see if we have authentication errors. We want to raise # exceptions on api key errors. case errors[0]["code"] when "002" raise InvalidApiKey.new(_status, _hearders, _body) when "007" raise ExpiredApiKey.new(_status, _hearders, _body) end end else # TODO: test unknown resonse and make sure the client can deal with it. raise UnknownResponse.new(_status, _headers, _body) end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &block) ⇒ Object
if we’re trying to access a method directly on the ApiResponse, the user is probably trying to get an attribute directly from the single entity that was returned. In this case, we’ll simply look to see if the
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/harborapp/api_response.rb', line 72 def method_missing(meth, *args, &block) return nil unless _entity if _entity.object if _entity.object.respond_to? meth _entity.object.send(meth, *args, &block) else raise NoMethodError.new("Unknown attribute #{meth} on ApiResponse or #{_entity.object.class} entity.") end elsif _entity.list if _entity.list.respond_to? meth _entity.list.send(meth, *args, &block) else raise NoMethodError.new("Unknown attribute #{meth} on ApiResponse or #{_entity.list.class} list.") end end end |
Instance Attribute Details
#_body ⇒ Object
Returns the value of attribute _body.
6 7 8 |
# File 'lib/harborapp/api_response.rb', line 6 def _body @_body end |
#_entity ⇒ Object
Returns the value of attribute _entity.
6 7 8 |
# File 'lib/harborapp/api_response.rb', line 6 def _entity @_entity end |
#_headers ⇒ Object
Returns the value of attribute _headers.
6 7 8 |
# File 'lib/harborapp/api_response.rb', line 6 def _headers @_headers end |
#_status ⇒ Object
Returns the value of attribute _status.
6 7 8 |
# File 'lib/harborapp/api_response.rb', line 6 def _status @_status end |
#errors ⇒ Object
Returns the value of attribute errors.
6 7 8 |
# File 'lib/harborapp/api_response.rb', line 6 def errors @errors end |
Instance Method Details
#first ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/harborapp/api_response.rb', line 43 def first if _entity.list _entity.list.first else # TODO: some sort of exception end end |
#length ⇒ Object
enumeratable methods and such
40 41 42 |
# File 'lib/harborapp/api_response.rb', line 40 def length _entity.list.length if _entity.list end |
#limit ⇒ Object
63 64 65 66 |
# File 'lib/harborapp/api_response.rb', line 63 def limit return nil unless _entity. _entity.["limit"] end |
#offset ⇒ Object
59 60 61 62 |
# File 'lib/harborapp/api_response.rb', line 59 def offset return nil unless _entity. _entity.["offset"] end |
#success? ⇒ Boolean
51 52 53 |
# File 'lib/harborapp/api_response.rb', line 51 def success? errors.nil? or errors.empty? end |
#total_results ⇒ Object
55 56 57 58 |
# File 'lib/harborapp/api_response.rb', line 55 def total_results return nil unless _entity. _entity.["total_results"] end |