Class: MicroMicro::Parsers::ValueClassPatternParser

Inherits:
Object
  • Object
show all
Defined in:
lib/micro_micro/parsers/value_class_pattern_parser.rb

Constant Summary collapse

HTML_ATTRIBUTES_MAP =
{
  "alt"      => ["area", "img"],
  "value"    => ["data"],
  "title"    => ["abbr"],
  "datetime" => ["del", "ins", "time"]
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node, separator = "") ⇒ ValueClassPatternParser

Returns a new instance of ValueClassPatternParser.

Parameters:

  • node (Nokogiri::XML::Element)
  • separator (String) (defaults to: "")


44
45
46
47
# File 'lib/micro_micro/parsers/value_class_pattern_parser.rb', line 44

def initialize(node, separator = "")
  @node = node
  @separator = separator
end

Class Method Details

.node_set_from(context, node_set = Nokogiri::XML::NodeSet.new(context.document, [])) ⇒ Nokogiri::XML::NodeSet

Parameters:

  • context (Nokogiri::XML::NodeSet, Nokogiri::XML::Element)
  • node_set (Nokogiri::XML::NodeSet) (defaults to: Nokogiri::XML::NodeSet.new(context.document, []))

Returns:

  • (Nokogiri::XML::NodeSet)


20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/micro_micro/parsers/value_class_pattern_parser.rb', line 20

def self.node_set_from(context, node_set = Nokogiri::XML::NodeSet.new(context.document, []))
  context.each { |node| node_set_from(node, node_set) } if context.is_a?(Nokogiri::XML::NodeSet)

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

  node_set
end

.value_from(node) ⇒ String?

Parameters:

  • node (Nokogiri::XML::Element)

Returns:

  • (String, nil)


36
37
38
39
40
# File 'lib/micro_micro/parsers/value_class_pattern_parser.rb', line 36

def self.value_from(node)
  return node["title"] if Helpers.value_title_node?(node)

  Helpers.attribute_value_from(node, HTML_ATTRIBUTES_MAP) || node.text
end

Instance Method Details

#valueString?

Returns:

  • (String, nil)


50
51
52
# File 'lib/micro_micro/parsers/value_class_pattern_parser.rb', line 50

def value
  @value ||= values.join(separator).strip if values.any?
end

#valuesArray<String>

Returns:

  • (Array<String>)


55
56
57
58
59
60
61
62
# File 'lib/micro_micro/parsers/value_class_pattern_parser.rb', line 55

def values
  @values ||=
    self
      .class
      .node_set_from(node)
      .map { |value_node| self.class.value_from(value_node) }
      .compact_blank!
end