Class: ApiModel::Response
- Inherits:
-
Object
- Object
- ApiModel::Response
- Defined in:
- lib/api_model/response.rb
Constant Summary collapse
- FALL_THROUGH_METHODS =
[ :class, :nil?, :empty?, :acts_like?, :as_json, :blank?, :duplicable?, :eval_js, :html_safe?, :in?, :presence, :present?, :psych_to_yaml, :to_json, :to_param, :to_query, :to_yaml, :to_yaml_properties, :with_options, :is_a?, :respond_to?, :kind_of? ]
Instance Attribute Summary collapse
-
#http_response ⇒ Object
Returns the value of attribute http_response.
-
#objects ⇒ Object
Returns the value of attribute objects.
Instance Method Summary collapse
- #build(builder, hash) ⇒ Object
- #build_objects ⇒ Object
-
#fetch_from_body(key_reference) ⇒ Object
Uses a string notation split by colons to fetch nested keys from a hash.
-
#initialize(http_response, config) ⇒ Response
constructor
A new instance of Response.
- #metadata ⇒ Object
-
#method_missing(method_name, *args, &block) ⇒ Object
Pass though any method which is not defined to the built objects.
- #response_body ⇒ Object
- #successful? ⇒ Boolean
Constructor Details
#initialize(http_response, config) ⇒ Response
Returns a new instance of Response.
12 13 14 15 |
# File 'lib/api_model/response.rb', line 12 def initialize(http_response, config) @http_response = http_response @_config = config || Configuration.new end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
Pass though any method which is not defined to the built objects. This makes the response class quite transparent, and keeps the response acting like the built object, or array of objects.
64 65 66 |
# File 'lib/api_model/response.rb', line 64 def method_missing(method_name, *args, &block) objects.send method_name, *args, &block end |
Instance Attribute Details
#http_response ⇒ Object
Returns the value of attribute http_response.
10 11 12 |
# File 'lib/api_model/response.rb', line 10 def http_response @http_response end |
#objects ⇒ Object
Returns the value of attribute objects.
10 11 12 |
# File 'lib/api_model/response.rb', line 10 def objects @objects end |
Instance Method Details
#build(builder, hash) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/api_model/response.rb', line 36 def build(builder, hash) if builder.respond_to? :build builder.build hash else builder.new hash end end |
#build_objects ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/api_model/response.rb', line 21 def build_objects raise UnauthenticatedError if @_config.raise_on_unauthenticated && http_response.api_call.response_code == 401 raise NotFoundError if @_config.raise_on_not_found && http_response.api_call.response_code == 404 raise ServerError if @_config.raise_on_server_error && http_response.api_call.response_code == 500 return self if response_body.nil? if response_build_hash.is_a? Array self.objects = response_build_hash.collect{ |hash| build http_response.builder, hash } else self.objects = self.build http_response.builder, response_build_hash end self end |
#fetch_from_body(key_reference) ⇒ Object
Uses a string notation split by colons to fetch nested keys from a hash. For example, if you have a hash which looks like:
{ foo: { bar: { baz: "Hello world" } } }
Then calling ++fetch_from_body(“foo.bar.baz”)++ would return “Hello world”
74 75 76 77 78 |
# File 'lib/api_model/response.rb', line 74 def fetch_from_body(key_reference) key_reference.split(".").inject(response_body) do |hash,key| hash.fetch(key) end end |
#metadata ⇒ Object
17 18 19 |
# File 'lib/api_model/response.rb', line 17 def ||= OpenStruct.new end |
#response_body ⇒ Object
44 45 46 |
# File 'lib/api_model/response.rb', line 44 def response_body @response_body ||= @_config.parser.parse http_response.api_call.body end |
#successful? ⇒ Boolean
48 49 50 |
# File 'lib/api_model/response.rb', line 48 def successful? http_response.api_call.success? end |