class Qti::Models::MetaData

Public Class Methods

new(node) click to toggle source
# File lib/qti/models/metadata.rb, line 4
def initialize(node)
  @node = node
end

Public Instance Methods

taxonpaths() click to toggle source
# File lib/qti/models/metadata.rb, line 8
def taxonpaths
  return unless lom
  hier = Hash.new { |h, k| h[k] = [] }
  lom.xpath('imsmd:classification/imsmd:taxonPath').each do |tp|
    entry = taxonpath_entry(tp)
    hier[entry[:source]] = entry[:taxonpath]
  end
  hier
end

Private Instance Methods

imsmd() click to toggle source
# File lib/qti/models/metadata.rb, line 36
def imsmd
  @node.namespaces&.keys&.include?('xmlns:imsmd')
end
lom() click to toggle source
# File lib/qti/models/metadata.rb, line 31
def lom
  return unless imsmd
  @lom ||= metadata&.xpath('imsmd:lom')&.first
end
metadata() click to toggle source
# File lib/qti/models/metadata.rb, line 27
def metadata
  @metadata ||= @node&.xpath('xmlns:metadata')&.first
end
taxon(node, path) click to toggle source
# File lib/qti/models/metadata.rb, line 45
def taxon(node, path)
  return path unless node
  xpath = 'imsmd:taxon/imsmd:entry/*[self::imsmd:string or self::imsmd:langstring]'
  node.xpath(xpath).each do |taxon|
    lang = taxon.attr('language') || taxon.attr('lang') || taxon.attr('xml:lang') || 'default'
    path[lang].push(taxon.text)
  end
  taxon(node.xpath('imsmd:taxon')&.first, path)
end
taxonpath_entry(node) click to toggle source
# File lib/qti/models/metadata.rb, line 20
def taxonpath_entry(node)
  {
    source: node.xpath('imsmd:source/imsmd:string').text,
    taxonpath: taxons(node)
  }
end
taxons(node) click to toggle source
# File lib/qti/models/metadata.rb, line 40
def taxons(node)
  hier = Hash.new { |h, k| h[k] = [] }
  taxon(node, hier)
end