class MicroMicro::Property
Constants
- PROPERTY_PARSERS_MAP
Attributes
name[R]
node[R]
prefix[R]
Public Class Methods
new(node, name:, prefix:)
click to toggle source
@param node [Nokogiri::XML::Element] @param name [String] @param prefix [String<dt, e, p, u>]
# File lib/micro_micro/property.rb, line 17 def initialize(node, name:, prefix:) @node = node @name = name @prefix = prefix 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/property.rb, line 67 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) node_set << context if property_node?(context) nodes_from(context.element_children, node_set) unless Item.item_node?(context) end node_set end
properties_from(context)
click to toggle source
@param context [Nokogiri::XML::NodeSet, Nokogiri::XML::Element] @return [Array<MicroMicro::Property>]
# File lib/micro_micro/property.rb, line 81 def self.properties_from(context) nodes_from(context).map do |node| types_from(node).map { |prefix, name| new(node, name: name, prefix: prefix) } end.flatten end
property_node?(node)
click to toggle source
@param node [Nokogiri::XML::Element] @return [Boolean]
# File lib/micro_micro/property.rb, line 89 def self.property_node?(node) types_from(node).any? end
types_from(node)
click to toggle source
@param node [Nokogiri::XML::Element] @return [Array<Array(String, String)>]
@example
node = Nokogiri::HTML('<a href="https://sixtwothree.org" class="p-name u-url">Jason Garber</a>').at_css('a') MicroMicro::Property.types_from(node) #=> [['p', 'name'], ['u', 'url']]
# File lib/micro_micro/property.rb, line 99 def self.types_from(node) node.classes.select { |token| token.match?(/^(?:dt|e|p|u)(?:-[0-9a-z]+)?(?:-[a-z]+)+$/) }.map { |token| token.split(/-/, 2) }.uniq end
Public Instance Methods
implied?()
click to toggle source
@return [Boolean]
# File lib/micro_micro/property.rb, line 24 def implied? false end
inspect()
click to toggle source
@return [String]
# File lib/micro_micro/property.rb, line 29 def inspect format(%(#<#{self.class.name}:%#0x name: #{name.inspect}, prefix: #{prefix.inspect}, value: #{value.inspect}>), object_id) end
item()
click to toggle source
@return [MicroMicro::Item, nil]
# File lib/micro_micro/property.rb, line 34 def item @item ||= Item.new(node) if item_node? end
item_node?()
click to toggle source
@return [Boolean]
# File lib/micro_micro/property.rb, line 39 def item_node? @item_node ||= Item.item_node?(node) end
value()
click to toggle source
@return [String, Hash]
# File lib/micro_micro/property.rb, line 44 def value @value ||= begin return parser.value unless item_node? hash = item.to_h return hash.merge(parser.value) if prefix == 'e' p_property = item.properties.find { |property| property.name == 'name' } if prefix == 'p' u_property = item.properties.find { |property| property.name == 'url' } if prefix == 'u' hash.merge(value: (p_property || u_property || parser).value) end end
value?()
click to toggle source
@return [Boolean]
# File lib/micro_micro/property.rb, line 60 def value? value.present? end
Private Instance Methods
parser()
click to toggle source
# File lib/micro_micro/property.rb, line 105 def parser @parser ||= PROPERTY_PARSERS_MAP[prefix].new(self) end