class Fanforce::Response def initialize(response, request, url, req_params) case response.code when 200, 201 begin @raw_response = Fanforce::Utils.decode_json(response) if !@raw_response[:results].nil? @results = @raw_response[:results] @current_results = @raw_response[:current_results] @total_results = @raw_response[:total_results] @current_page = @raw_response[:current_page] @total_pages = @raw_response[:total_pages] if request.method == :get and @raw_response[:total_pages] > @raw_response[:current_page] next_page = @raw_response[:current_page] + 1 @next_url = "#{url}?#{Fanforce::Utils.to_query_string(req_params.merge(page: next_page))}" end if request.method == :get and @raw_response[:current_page] > 1 prev_page = @raw_response[:current_page] - 1 @prev_url = "#{url}?#{Fanforce::Utils.to_query_string(req_params.merge(page: prev_page))}" end else @result = @raw_response end rescue raise end when 400 raise Fanforce::BadRequestError.new(response, request, url, req_params) when 401 raise Fanforce::Unauthorized.new(response, request, url, req_params) when 403 raise Fanforce::ForbiddenError.new(response, request, url, req_params) when 404 raise Fanforce::NotFoundError.new(response, request, url, req_params) when 422 raise Fanforce::UnprocessableEntityError.new(response, request, url, req_params) else raise Fanforce::UnknownError.new(response, request, url, req_params) end response end def to_json to_hash.to_json end def to_hash @raw_response end def [](key) @raw_response[key] end def result @result || (raise NoMethodError, 'This API response returns more than 1 record. Try using "results".') end def results @results || (raise NoMethodError, 'This API response only returns 1 record. Try using "result".') end def total_results @total_results || 1 end def current_results @current_results || 1 end def current_page @current_page || 1 end def total_pages @total_pages || 1 end def prev_url @prev_url || nil end def next_url @next_url || nil end end