module Puree::XMLExtractor::Collection
Resource
collection XML extractor.
Public Class Methods
Records available for a resource
# File lib/puree/xml_extractor/collection.rb, line 116 def self.count(xml) doc = Nokogiri::XML xml doc.remove_namespaces! doc.xpath('/result/count').text.to_i end
Get models from any multi-record dataset XML response
@param xml [String] @return [Array<Puree::Model::Dataset>]
# File lib/puree/xml_extractor/collection.rb, line 13 def self.datasets(xml) models :dataset, xml, '/dataSet' end
Get models from any multi-record event XML response
@param xml [String] @return [Array<Puree::Model::Event>]
# File lib/puree/xml_extractor/collection.rb, line 21 def self.events(xml) models :event, xml, '/event' end
Get models from any multi-record external organisation XML response
@param xml [String] @return [Array<Puree::Model::ExternalOrganisation>]
# File lib/puree/xml_extractor/collection.rb, line 29 def self.external_organisations(xml) models :external_organisation, xml, '/externalOrganisation' end
Get models from any multi-record journal XML response
@param xml [String] @return [Array<Puree::Model::Journal>]
# File lib/puree/xml_extractor/collection.rb, line 37 def self.journals(xml) models :journal, xml, '/journal' end
Get models from any multi-record organisation XML response
@param xml [String] @return [Array<Puree::Model::OrganisationalUnit>]
# File lib/puree/xml_extractor/collection.rb, line 45 def self.organisational_units(xml) models :organisational_unit, xml, '/organisationalUnit' end
Get models from any multi-record person XML response
@param xml [String] @return [Array<Puree::Model::Person>]
# File lib/puree/xml_extractor/collection.rb, line 61 def self.persons(xml) models :person, xml, '/person' end
Get models from any multi-record project XML response
@param xml [String] @return [Array<Puree::Model::Project>]
# File lib/puree/xml_extractor/collection.rb, line 53 def self.projects(xml) models :project, xml, '/project' end
Get models from any multi-record person XML response
@param xml [String] @return [Array<Puree::Model::Publisher>]
# File lib/puree/xml_extractor/collection.rb, line 69 def self.publishers(xml) models :publisher, xml, '/publisher' end
Get models from any multi-record Research output XML response
@param xml [String] @return [Hash{Symbol => Array<Puree::Model::ResearchOutput class/subclass>}]
# File lib/puree/xml_extractor/collection.rb, line 77 def self.research_outputs(xml) path_from_root = File.join 'result/items', '/*' doc = Nokogiri::XML xml doc.remove_namespaces! xpath_result = doc.xpath path_from_root data = { journal_articles: [], conference_papers: [], theses: [], other: [] } xpath_result.each do |research_output| xpath_result_type = research_output.xpath('type/term/text') type = xpath_result_type.first.text.strip unless xpath_result_type.empty? if type case type when 'Journal article' extractor = Puree::XMLExtractor::JournalArticle.new research_output.to_s data[:journal_articles] << extractor.model when 'Conference paper' extractor = Puree::XMLExtractor::ConferencePaper.new research_output.to_s data[:conference_papers] << extractor.model when 'Doctoral Thesis' extractor = Puree::XMLExtractor::Thesis.new research_output.to_s data[:theses] << extractor.model when "Master's Thesis" extractor = Puree::XMLExtractor::Thesis.new research_output.to_s data[:theses] << extractor.model else extractor = Puree::XMLExtractor::ResearchOutput.new research_output.to_s data[:other] << extractor.model end end end data end
Private Class Methods
# File lib/puree/xml_extractor/collection.rb, line 141 def self.make_xml_extractor(resource_type, xml) resource_class = "Puree::XMLExtractor::#{Puree::Util::String.titleize(resource_type)}" Object.const_get(resource_class).new xml end
Get models from any multi-record resource XML response
@param xml [String] @return [Array<Puree::Model::Resource subclass>]
# File lib/puree/xml_extractor/collection.rb, line 128 def self.models(resource_type, xml, xpath_root) doc = Nokogiri::XML xml doc.remove_namespaces! path_from_root = File.join 'result/items', xpath_root xpath_result = doc.xpath path_from_root data = [] xpath_result.each do |i| xml_extractor = make_xml_extractor resource_type, i.to_s data << xml_extractor.model end data end