class LeanplumApi::ResponseValidation

Constants

SUCCESS
WARN

Public Instance Methods

call(environment) click to toggle source
# File lib/leanplum_api/faraday_middleware/response_validation.rb, line 11
def call(environment)
  if environment.body && environment.body[:data] && environment.body[:data].is_a?(Array)
    requests = environment.body[:data]
  end

  @app.call(environment).on_complete do |response|
    fail ResourceNotFoundError, response.inspect if response.status == 404
    fail BadResponseError, response.inspect unless response.status == 200

    responses = response.body['response']
    fail BadResponseError, "No response array: #{response.inspect}" unless responses.is_a?(Array)

    validate_request_success(responses, requests) if LeanplumApi.configuration.validate_response
  end
end

Private Instance Methods

validate_request_success(success_indicators, requests) click to toggle source
# File lib/leanplum_api/faraday_middleware/response_validation.rb, line 29
def validate_request_success(success_indicators, requests)
  if requests && success_indicators.size != requests.size
    fail BadResponseError, "Attempted #{requests.size} operations; responses for only #{success_indicators.size}!"
  end

  failures = success_indicators.map.with_index do |indicator, i|
    if indicator[WARN]
      LeanplumApi.configuration.logger.warn((requests ? "Warning for #{requests[i]}: " : '') + indicator[WARN].to_s)
    end

    next nil if indicator[SUCCESS].to_s == 'true'

    failure = { message: indicator.key?(SUCCESS) ? indicator.to_s : "No :success key found in #{indicator}" }
    requests ? failure.merge(operation: requests[i]) : failure
  end.compact

  unless failures.empty?
    error_message = "Operation failures: #{failures}"
    LeanplumApi.configuration.logger.error(error_message)
    fail BadResponseError, error_message
  end
end