lulibrary/puree

View on GitHub
lib/puree/xml_extractor/mixins/person_mixin.rb

Summary

Maintainability
A
3 hrs
Test Coverage
module Puree

  module XMLExtractor

    # Person mixin.
    #
    module PersonMixin

      private

      # @return [Array<Puree::Model::EndeavourPerson>]
      def persons(type, xpath_query_path)
        xpath_result = xpath_query xpath_query_path
        arr = []
        xpath_result.each do |i|
          uuid_internal = i.at_xpath('person/@uuid')
          uuid_external = i.at_xpath('externalPerson/@uuid')
          if uuid_internal
            person_type = 'internal'
            uuid = uuid_internal.text.strip
          elsif uuid_external
            person_type = 'external'
            uuid = uuid_external.text.strip
          else
            person_type = 'other'
            uuid = ''
          end
          if person_type === type
            person = Puree::Model::EndeavourPerson.new
            person.uuid = uuid
            name = Puree::Model::PersonName.new
            name.first = i.xpath('name/firstName').text.strip
            name.last = i.xpath('name/lastName').text.strip
            person.name = name if name.data?
            xpath_result_role = i.xpath('personRole/term/text')
            person.role = xpath_result_role.first.text.strip unless xpath_result_role.empty?
            arr << person if person.data?
          end
        end
        arr
      end

    end

  end
end