Sha256: 9fecf10579ec7186f664a07cb000fbaba3033c60062c16b0fd4be18ca045af45

Contents?: true

Size: 1.95 KB

Versions: 2

Compression:

Stored size: 1.95 KB

Contents

require 'amsi/validator/request_errors'

require_relative 'base'

module Amsi
  module DocumentParser
    # Parse the GetMoveinsByFirstMarketingSource response
    class GetMoveins < Base
      private

      # @param body [Hash<String, Object>] the body of the XML response parsed
      #   into a Hash
      # @return [Array<Amsi::Model::Lease>] the leases contained in the
      #   response
      # @raise [Amsi::Error::Base] if the response is invalid
      def parse_body(body)
        lease_hashes(body).map do |lease_hash|
          lease = Model::Lease.new(lease_hash)
          lease.occupants = occupants(lease_hash)
          lease.guest_card = guest_card(lease_hash)
          lease.matched_guest_cards = matched_guest_cards(lease_hash)

          lease
        end
      end

      def lease_hashes(body)
        response = body['GetMoveinsByFirstMarketingSourceResponse']
        escaped_result = response['GetMoveinsByFirstMarketingSourceResult']
        parsed_result = MultiXml.parse(escaped_result)
        leases = parsed_result['Leases']['Lease']

        return [] if leases.nil?
        leases.is_a?(Array) ? leases : [leases]
      end

      def occupants(lease_hash)
        occupant_hashes(lease_hash).map do |occupant_hash|
          Model::Occupant.new(occupant_hash)
        end
      end

      def occupant_hashes(lease_hash)
        occupants = lease_hash['Occupant']

        return [] if occupants.nil?
        occupants.is_a?(Array) ? occupants : [occupants]
      end

      def guest_card(lease_hash)
        guest_card_hash = lease_hash['GuestCard']
        Model::GuestCard.new(guest_card_hash) unless guest_card_hash.nil?
      end

      def matched_guest_cards(lease_hash)
        matched_guest_card_hashes = lease_hash['MatchedGuestCard']

        if matched_guest_card_hashes.is_a?(Hash)
          [matched_guest_card_hashes]
        else
          [*matched_guest_card_hashes]
        end.map { |h| Model::GuestCard.new(h) }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
amsi-1.0.1 lib/amsi/document_parser/get_moveins.rb
amsi-1.0.0 lib/amsi/document_parser/get_moveins.rb