class RealPage::Validator::RequestErrors

Ensure there are no errors in the wrapped contents of the body.

This validator works on responses that have the following format:

<s:Envelope>

<s:Body>
  <actionnameResponse>
    <actionnameResult>
      <actionnameresponse>
        <success>false</success>
        <errorcount>1</errorcount>
        <errors>
          <error>
            <severity>Critical</severity>
            <errornumber>1</errornumber>
            <errormessage>something went wrong</errormessage>
            <internalerrormessage/>
          </error>
        </errors>
      </actionnameresponse>
    </actionnameResult>
  </actionnameResponse>
</s:Body>

</s:Envelope>

Constants

MAX_ERROR_LENGTH

Ensure the concatenated error message does not exceed Snowflake error column max character length. The error column data type is VARCHAR(16777216) 16777216 bytes / 4 bytes per character = 4194304 characters

Attributes

request_name[R]
request_params[R]
response[R]

Public Class Methods

new(response, request_params, request_name) click to toggle source

@param response [Hash<String, Object>] the XML response parsed into a

Hash
# File lib/real_page/validator/request_errors.rb, line 41
def initialize(response, request_params, request_name)
  @response = response
  @request_params = request_params
  @request_name = request_name
end

Public Instance Methods

validate!() click to toggle source

@raise [RealPage::Error::RequestFault] if the response has an error

node in the contents
# File lib/real_page/validator/request_errors.rb, line 49
def validate!
  return unless error?
  send_request_error_to_snowflake
  raise RealPage::Error::BadRequest.new(errors)
end

Private Instance Methods

contents() click to toggle source
# File lib/real_page/validator/request_errors.rb, line 59
def contents
  body = response['s:Envelope']['s:Body']
  response_key = body.keys.detect { |key| key !~ /^xmlns/ }
  contents_response = body[response_key]
  result_key = contents_response.keys.detect { |key| key !~ /^xmlns/ }
  contents_result = contents_response[result_key]
  contents_result.values.first
end
error?() click to toggle source
# File lib/real_page/validator/request_errors.rb, line 68
def error?
  contents['success'] == 'false'
end
error_messages() click to toggle source
# File lib/real_page/validator/request_errors.rb, line 96
def error_messages
  errors.map(&:message).join(' ').slice(0, MAX_ERROR_LENGTH)
end
errors() click to toggle source
# File lib/real_page/validator/request_errors.rb, line 72
def errors
  errors = contents['errors']
  errors_array = Utils::ArrayFetcher.new(hash: errors, key: 'error').fetch
  errors_array.map do |error|
    Struct.new(:message, :severity, :internal_message).new(
      error['errormessage'],
      error['severity'],
      error['internalerrormessage']
    )
  end
end
send_request_error_to_snowflake() click to toggle source
# File lib/real_page/validator/request_errors.rb, line 84
def send_request_error_to_snowflake
  Utils::SnowflakeEventTracker.track_pms_resident_event(
    import_resident_id: request_params[:import_id] || '',
    api_name: request_name,
    resident_type: 'PRIMARY',
    request_params: request_params,
    phones_count: 0,
    unit_name: '',
    error: error_messages
  )
end