Class: FlexmlsApi::FaradayExt::FlexmlsMiddleware
- Inherits:
-
Faraday::Response::ParseJson
- Object
- Faraday::Response::ParseJson
- FlexmlsApi::FaradayExt::FlexmlsMiddleware
- Includes:
- PaginateHelper
- Defined in:
- lib/flexmls_api/faraday.rb
Overview
Flexmls API Faraday middleware
HTTP Response after filter to package api responses and bubble up basic api errors.
Instance Method Summary collapse
-
#initialize(app) ⇒ FlexmlsMiddleware
constructor
A new instance of FlexmlsMiddleware.
-
#on_complete(finished_env) ⇒ Object
Handles pretty much all the api response parsing and error handling.
Methods included from PaginateHelper
Constructor Details
#initialize(app) ⇒ FlexmlsMiddleware
Returns a new instance of FlexmlsMiddleware.
58 59 60 |
# File 'lib/flexmls_api/faraday.rb', line 58 def initialize(app) super(app) end |
Instance Method Details
#on_complete(finished_env) ⇒ Object
Handles pretty much all the api response parsing and error handling. All responses that indicate a failure will raise a FlexmlsApi::ClientError exception
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/flexmls_api/faraday.rb', line 9 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 hash = {:message => response., :code => response.code, :status => finished_env[:status]} # constraint violation if response.code == 1053 details = body['D']['Details'] hash[:details] = details end raise BadResourceRequest,hash when 401 # Handle the WWW-Authenticate Response Header Field if present. This can be returned by # OAuth2 implementations and wouldn't hurt to log. auth_header_error = finished_env[:request_headers]["WWW-Authenticate"] FlexmlsApi.logger.warn("Authentication error #{auth_header_error}") unless auth_header_error.nil? raise PermissionDenied, {:message => response., :code => response.code, :status => finished_env[:status]} when 404 raise NotFound, {:message => response., :code => response.code, :status => finished_env[:status]} when 405 raise NotAllowed, {:message => response., :code => response.code, :status => finished_env[:status]} when 409 raise BadResourceRequest, {:message => response., :code => response.code, :status => finished_env[:status]} when 500 raise ClientError, {:message => response., :code => response.code, :status => finished_env[:status]} when 200..299 FlexmlsApi.logger.debug("Success!") else raise ClientError, {:message => response., :code => response.code, :status => finished_env[:status]} end finished_env[:body] = results end |