class MicroMicro::Parsers::ValueClassPatternParser

Constants

HTML_ATTRIBUTES_MAP

@see microformats.org/wiki/value-class-pattern#Basic_Parsing @see microformats.org/wiki/value-class-pattern#Date_and_time_values

Attributes

node[R]
separator[R]

Public Class Methods

new(node, separator = '') click to toggle source

@param context [Nokogiri::XML::Element] @param separator [String]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 15
def initialize(node, separator = '')
  @node = node
  @separator = separator
end
nodes_from(context, node_set = Nokogiri::XML::NodeSet.new(context.document, [])) click to toggle source

@param context [Nokogiri::XML::NodeSet, Nokogiri::XML::Element] @param node_set [Nokogiri::XML::NodeSet] @return [Nokogiri::XML::NodeSet]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 33
def self.nodes_from(context, node_set = Nokogiri::XML::NodeSet.new(context.document, []))
  context.each { |node| nodes_from(node, node_set) } if context.is_a?(Nokogiri::XML::NodeSet)

  if context.is_a?(Nokogiri::XML::Element) && !Document.ignore_node?(context)
    if value_class_node?(context) || value_title_node?(context)
      node_set << context
    else
      nodes_from(context.element_children, node_set)
    end
  end

  node_set
end
value_class_node?(node) click to toggle source

@param node [Nokogiri::XML::Element] @return [Boolean]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 49
def self.value_class_node?(node)
  node.classes.include?('value')
end
value_from(node) click to toggle source

@param node [Nokogiri::XML::Element] @return [String, nil]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 55
def self.value_from(node)
  return node['title'] if value_title_node?(node)

  HTML_ATTRIBUTES_MAP.each do |attribute, names|
    return node[attribute] if names.include?(node.name) && node[attribute]
  end

  node.text
end
value_title_node?(node) click to toggle source

@param node [Nokogiri::XML::Element] @return [Boolean]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 67
def self.value_title_node?(node)
  node.classes.include?('value-title')
end

Public Instance Methods

value() click to toggle source

@return [String, nil]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 21
def value
  @value ||= values.join(separator).strip if values.any?
end
values() click to toggle source

@return [Array<String>]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 26
def values
  @values ||= value_nodes.map { |value_node| self.class.value_from(value_node) }.select(&:present?)
end

Private Instance Methods

value_nodes() click to toggle source

@return [Nokogiri::XML::NodeSet]

# File lib/micro_micro/parsers/value_class_pattern_parser.rb, line 76
def value_nodes
  @value_nodes ||= self.class.nodes_from(node)
end