class Jahuty::Response::Handler
Inspects the response and returns the appropriate resource or collection.
Public Instance Methods
call(action, response)
click to toggle source
# File lib/jahuty/response/handler.rb, line 9 def call(action, response) resource_name = name_resource action, response payload = parse response @resources ||= ::Jahuty::Resource::Factory.new if collection?(payload) payload.map { |data| @resources.call resource_name, data } elsif resource?(payload) @resources.call resource_name, payload else raise ArgumentError, 'Action and payload mismatch' end end
Private Instance Methods
collection?(payload)
click to toggle source
# File lib/jahuty/response/handler.rb, line 27 def collection?(payload) payload.is_a?(::Array) end
name_resource(action, response)
click to toggle source
# File lib/jahuty/response/handler.rb, line 31 def name_resource(action, response) if success? response action.resource elsif problem? response 'problem' else raise ArgumentError, 'Unexpected response' end end
parse(response)
click to toggle source
# File lib/jahuty/response/handler.rb, line 41 def parse(response) JSON.parse(response.body, symbolize_names: true) end
problem?(response)
click to toggle source
# File lib/jahuty/response/handler.rb, line 45 def problem?(response) response.headers['Content-Type'].include?('application/problem+json') && (response.status < 200 || response.status >= 300) end
resource?(payload)
click to toggle source
# File lib/jahuty/response/handler.rb, line 50 def resource?(payload) payload.is_a?(::Object) end
success?(response)
click to toggle source
# File lib/jahuty/response/handler.rb, line 54 def success?(response) response.headers['Content-Type'].include?('application/json') && response.status.between?(200, 299) end