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