lib/flexmls_api/faraday.rb in flexmls_api-0.6.5 vs lib/flexmls_api/faraday.rb in flexmls_api-0.7.0
- old
+ new
@@ -1,20 +1,30 @@
module FlexmlsApi
module FaradayExt
#=Flexmls API Faraday middleware
# HTTP Response after filter to package api responses and bubble up basic api errors.
class FlexmlsMiddleware < Faraday::Response::ParseJson
-
+ include FlexmlsApi::PaginateHelper
# Handles pretty much all the api response parsing and error handling. All responses that
# indicate a failure will raise a FlexmlsApi::ClientError exception
def on_complete(finished_env)
body = parse(finished_env[:body])
FlexmlsApi.logger.debug("Response Body: #{body.inspect}")
unless body.is_a?(Hash) && body.key?("D")
raise InvalidResponse, "The server response could not be understood"
end
response = ApiResponse.new body
+ paging = response.pagination
+ if paging.nil?
+ results = response
+ else
+ if finished_env[:url].query_values["_pagination"] == "count"
+ results = paging['TotalRows']
+ else
+ results = paginate_response(response, paging)
+ end
+ end
case finished_env[:status]
when 400, 409
raise BadResourceRequest, {:message => response.message, :code => response.code, :status => finished_env[:status]}
when 401
# Handle the WWW-Authenticate Response Header Field if present. This can be returned by
@@ -31,10 +41,10 @@
when 200..299
FlexmlsApi.logger.debug("Success!")
else
raise ClientError, {:message => response.message, :code => response.code, :status => finished_env[:status]}
end
- finished_env[:body] = response
+ finished_env[:body] = results
end
def initialize(app)
super(app)
end