diff --git a/lib/uber/api_request.rb b/lib/uber/api_request.rb index 6977b5e..c63160a 100644 --- a/lib/uber/api_request.rb +++ b/lib/uber/api_request.rb @@ -17,21 +17,33 @@ def initialize(client, request_method, path, options = {}) # @return [Hash] def perform - @client.send(@request_method, @path, @options).body + @client.send(@request_method, @path, @options) end # @param klass [Class] # @param request [Uber::ApiRequest] # @return [Object] def perform_with_object(klass) - klass.new(perform) + result = perform + # https://developer.uber.com/docs/rides/api/v1-requests#http-error-codes + if [400, 403, 404, 409, 422, 500].include?(result.status) + raise Uber::Error::BadRequest.new(result.body) + else + klass.new(result.body) + end end # @param klass [Class] # @return [Array] def perform_with_objects(klass) - perform.values.flatten.collect do |element| - klass.new(element) + result = perform + + if [400, 403, 404, 409, 422, 500].include?(result.status) + raise Uber::Error::BadRequest.new(result.body.values.flatten.last) + else + result.body.values.flatten.collect do |element| + klass.new(element) + end end end end