class Libis::Metadata::Parser::SubfieldCriteriaParser

New style parsers and converters for metadata. New, not finished and untested.

Public Instance Methods

criteria_to_s(criteria) click to toggle source
# File lib/libis/metadata/parser/subfield_criteria_parser.rb, line 27
def criteria_to_s(criteria)
  case criteria
  when Array
    # leave as is
  when Hash
    criteria = [criteria]
  else
    return criteria
  end
  criteria.map {|selection| selection_to_s(selection)}.join(' ')
end
match_criteria(criteria, data) click to toggle source
# File lib/libis/metadata/parser/subfield_criteria_parser.rb, line 48
def match_criteria(criteria, data)
  tree = self.new.parse(criteria)
  return true if tree.is_a? String
  tree = [tree] unless tree.is_a? Array
  tree.map {|selection| match_selection(selection, data)}.any?
end
match_selection(selection, data) click to toggle source
# File lib/libis/metadata/parser/subfield_criteria_parser.rb, line 55
def match_selection(selection, data)
  must_match = selection[:must].to_s.split('')
  return false unless must_match == (must_match & data)
  one_of = selection[:one_of].to_s.split('')
  return false unless one_of.empty? || (one_of & data).any?
  only_one_of = selection[:only_one_of].to_s.split('')
  return false unless only_one_of.empty? || (only_one_of & data).size != 1
  return false if match_selection(selection[:not], data) if selection[:not]
  true
end
selection_to_s(selection) click to toggle source
# File lib/libis/metadata/parser/subfield_criteria_parser.rb, line 39
def selection_to_s(selection)
  return selection unless selection.is_a? Hash
  result = "#{selection[:must]}"
  result += "(#{selection[:one_of]})" if selection[:one_of]
  result += "{#{selection[:only_one_of]}}" if selection[:only_one_of]
  result += "-#{selection_to_s(selection[:not])}" if selection[:not]
  result
end