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

Version Path
real_page-2.3.6 lib/real_page/document_parser/base.rb
real_page-2.3.5 lib/real_page/document_parser/base.rb
real_page-2.3.4 lib/real_page/document_parser/base.rb
real_page-2.3.3 lib/real_page/document_parser/base.rb
real_page-2.3.2 lib/real_page/document_parser/base.rb
real_page-2.3.1 lib/real_page/document_parser/base.rb
real_page-2.3.0 lib/real_page/document_parser/base.rb