Sha256: 174ba8683ca0cafa7a51e6ddec01daae4e298d71700388672f0932b600cd0f03
Contents?: true
Size: 1.61 KB
Versions: 7
Compression:
Stored size: 1.61 KB
Contents
require 'multi_xml' require 'real_page/validator/request_fault' require 'real_page/document_parser' module RealPage module DocumentParser # Base class for parsing RealPage responses. Subclasses must implement # #parse_body and can optionally override #validator_classes to add more # validation than just the default class Base DEFAULT_VALIDATOR_CLASSES = [Validator::RequestFault].freeze private_constant :DEFAULT_VALIDATOR_CLASSES # @param xml [String] the XML response from the request # @option param request_params [Object] the request parameter # @return [Object] the parsed object(s) from the rsesponse # @raise [RealPage::Error::Base] if the response is invalid def initialize(request_params: nil, request_name: nil) @request_params = request_params @request_name = request_name end def parse(xml) parsed = MultiXml.parse(xml) [*DEFAULT_VALIDATOR_CLASSES, *validator_classes].each do |klass| klass.new(parsed, request_params, request_name).validate! end parse_body(parsed['s:Envelope']['s:Body']) end attr_reader :request_params, :request_name private # @param body [Hash<String, Object>] the body of the XML response parsed # into a Hash # @return [Object] the parsed object(s) from the rsesponse # @raise [RealPage::Error::Base] if the response is invalid def parse_body(body) raise NotImplementedError, "#{self.class.name} must implement #{__method__}" end def validator_classes [] end end end end
Version data entries
7 entries across 7 versions & 1 rubygems