micromicro 2.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/README.md +3 -96
- data/lib/micro_micro/collections/base_collection.rb +2 -1
- data/lib/micro_micro/collections/items_collection.rb +81 -0
- data/lib/micro_micro/collections/properties_collection.rb +102 -3
- data/lib/micro_micro/collections/relationships_collection.rb +82 -4
- data/lib/micro_micro/document.rb +12 -6
- data/lib/micro_micro/helpers.rb +6 -0
- data/lib/micro_micro/implied_property.rb +13 -0
- data/lib/micro_micro/item.rb +65 -46
- data/lib/micro_micro/parsers/base_property_parser.rb +2 -0
- data/lib/micro_micro/parsers/date_time_parser.rb +3 -5
- data/lib/micro_micro/parsers/date_time_property_parser.rb +3 -0
- data/lib/micro_micro/parsers/embedded_markup_property_parser.rb +1 -0
- data/lib/micro_micro/parsers/image_element_parser.rb +68 -0
- data/lib/micro_micro/parsers/implied_name_property_parser.rb +1 -0
- data/lib/micro_micro/parsers/implied_photo_property_parser.rb +7 -6
- data/lib/micro_micro/parsers/implied_url_property_parser.rb +1 -0
- data/lib/micro_micro/parsers/plain_text_property_parser.rb +1 -0
- data/lib/micro_micro/parsers/url_property_parser.rb +4 -5
- data/lib/micro_micro/parsers/value_class_pattern_parser.rb +4 -2
- data/lib/micro_micro/property.rb +78 -20
- data/lib/micro_micro/relationship.rb +26 -3
- data/lib/micro_micro/version.rb +1 -1
- data/lib/micromicro.rb +8 -6
- metadata +4 -3
data/lib/micro_micro/item.rb
CHANGED
@@ -4,38 +4,47 @@ module MicroMicro
|
|
4
4
|
class Item
|
5
5
|
include Collectible
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
# @param context [Nokogiri::HTML::Document, Nokogiri::XML::NodeSet, Nokogiri::XML::Element]
|
10
|
-
# @return [Array<MicroMicro::Item>]
|
11
|
-
def self.from_context(context)
|
12
|
-
node_set_from(context).map { |node| new(node) }
|
13
|
-
end
|
7
|
+
class ItemNodeSearch
|
8
|
+
attr_reader :node_set
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
10
|
+
def initialize(document)
|
11
|
+
@node_set = Nokogiri::XML::NodeSet.new(document, [])
|
12
|
+
end
|
13
|
+
|
14
|
+
# rubocop:disable Metrics
|
15
|
+
def search(context)
|
16
|
+
context.each { |node| search(node) } if context.is_a?(Nokogiri::XML::NodeSet)
|
17
|
+
|
18
|
+
if context.is_a?(Nokogiri::XML::Element) && !Helpers.ignore_node?(context)
|
19
|
+
if Helpers.item_node?(context)
|
20
|
+
node_set << context unless Helpers.item_nodes?(context.ancestors) && Helpers.property_node?(context)
|
21
|
+
else
|
22
|
+
search(context.element_children)
|
23
|
+
end
|
29
24
|
end
|
25
|
+
|
26
|
+
node_set
|
30
27
|
end
|
28
|
+
# rubocop:enable Metrics
|
29
|
+
end
|
30
|
+
|
31
|
+
private_constant :ItemNodeSearch
|
31
32
|
|
32
|
-
|
33
|
+
# Extract {MicroMicro::Item}s from a context.
|
34
|
+
#
|
35
|
+
# @param context [Nokogiri::HTML::Document, Nokogiri::XML::NodeSet, Nokogiri::XML::Element]
|
36
|
+
# @return [Array<MicroMicro::Item>]
|
37
|
+
def self.from_context(context)
|
38
|
+
ItemNodeSearch
|
39
|
+
.new(context.document)
|
40
|
+
.search(context)
|
41
|
+
.map { |node| new(node) }
|
33
42
|
end
|
34
|
-
# rubocop:enable Metrics
|
35
43
|
|
36
44
|
# Parse a node for microformats2-encoded data.
|
37
45
|
#
|
38
46
|
# @param node [Nokogiri::XML::Element]
|
47
|
+
# @return [MicroMicro::Item]
|
39
48
|
def initialize(node)
|
40
49
|
@node = node
|
41
50
|
|
@@ -44,24 +53,40 @@ module MicroMicro
|
|
44
53
|
properties << implied_url if implied_url?
|
45
54
|
end
|
46
55
|
|
47
|
-
# A collection of child
|
56
|
+
# A collection of child {MicroMicro::Item}s parsed from the node.
|
48
57
|
#
|
49
58
|
# @see https://microformats.org/wiki/microformats2-parsing#parse_an_element_for_class_microformats
|
59
|
+
# microformats.org: microformats2 parsing specification § Parse an element for class microformats
|
50
60
|
#
|
51
61
|
# @return [MicroMicro::Collections::ItemsCollection]
|
52
62
|
def children
|
53
63
|
@children ||= Collections::ItemsCollection.new(self.class.from_context(node.element_children))
|
54
64
|
end
|
55
65
|
|
56
|
-
#
|
66
|
+
# Does this {MicroMicro::Item} contain any child {MicroMicro::Item}s?
|
67
|
+
#
|
68
|
+
# @return [Boolean]
|
69
|
+
def children?
|
70
|
+
children.any?
|
71
|
+
end
|
72
|
+
|
73
|
+
# The value of the node's +id+ attribute, if present.
|
57
74
|
#
|
58
75
|
# @return [String, nil]
|
59
76
|
def id
|
60
77
|
@id ||= node['id']&.strip
|
61
78
|
end
|
62
79
|
|
63
|
-
#
|
80
|
+
# Does this {MicroMicro::Item} have an +id+ attribute value?
|
81
|
+
#
|
82
|
+
# @return [Boolean]
|
83
|
+
def id?
|
84
|
+
id.present?
|
85
|
+
end
|
86
|
+
|
64
87
|
# @return [String]
|
88
|
+
#
|
89
|
+
# :nocov:
|
65
90
|
def inspect
|
66
91
|
"#<#{self.class}:#{format('%#0x', object_id)} " \
|
67
92
|
"types: #{types.inspect}, " \
|
@@ -70,23 +95,23 @@ module MicroMicro
|
|
70
95
|
end
|
71
96
|
# :nocov:
|
72
97
|
|
73
|
-
# A collection of
|
74
|
-
#
|
75
|
-
# @return [MicroMicro::Collections::PropertiesCollection]
|
76
|
-
def plain_text_properties
|
77
|
-
@plain_text_properties ||= properties.plain_text_properties
|
78
|
-
end
|
79
|
-
|
80
|
-
# A collection of properties parsed from the node.
|
98
|
+
# A collection of {MicroMicro::Property}s parsed from the node.
|
81
99
|
#
|
82
100
|
# @return [MicroMicro::Collections::PropertiesCollection]
|
83
101
|
def properties
|
84
102
|
@properties ||= Collections::PropertiesCollection.new(Property.from_context(node.element_children))
|
85
103
|
end
|
86
104
|
|
87
|
-
# Return the parsed
|
105
|
+
# Return the parsed {MicroMicro::Item} as a Hash.
|
88
106
|
#
|
89
107
|
# @see https://microformats.org/wiki/microformats2-parsing#parse_an_element_for_class_microformats
|
108
|
+
# microformats.org: microformats2 parsing specification § Parse an element for class microformats
|
109
|
+
#
|
110
|
+
# @see MicroMicro::Item#children
|
111
|
+
# @see MicroMicro::Item#id
|
112
|
+
# @see MicroMicro::Item#properties
|
113
|
+
# @see MicroMicro::Item#types
|
114
|
+
# @see MicroMicro::Collections::PropertiesCollection#to_h
|
90
115
|
#
|
91
116
|
# @return [Hash]
|
92
117
|
def to_h
|
@@ -95,28 +120,22 @@ module MicroMicro
|
|
95
120
|
properties: properties.to_h
|
96
121
|
}
|
97
122
|
|
98
|
-
hash[:id] = id if id
|
99
|
-
hash[:children] = children.to_a if children
|
123
|
+
hash[:id] = id if id?
|
124
|
+
hash[:children] = children.to_a if children?
|
100
125
|
|
101
126
|
hash
|
102
127
|
end
|
103
128
|
|
104
|
-
# An
|
129
|
+
# An Array of root class names parsed from the node's +class+ attribute.
|
105
130
|
#
|
106
131
|
# @return [Array<String>]
|
107
132
|
def types
|
108
133
|
@types ||= Helpers.root_class_names_from(node)
|
109
134
|
end
|
110
135
|
|
111
|
-
# A collection of url properties parsed from the node.
|
112
|
-
#
|
113
|
-
# @return [MicroMicro::Collections::PropertiesCollection]
|
114
|
-
def url_properties
|
115
|
-
@url_properties ||= properties.url_properties
|
116
|
-
end
|
117
|
-
|
118
136
|
private
|
119
137
|
|
138
|
+
# @return [Nokogiri::XML::Element]
|
120
139
|
attr_reader :node
|
121
140
|
|
122
141
|
# @return [MicroMicro::ImpliedProperty]
|
@@ -173,7 +192,7 @@ module MicroMicro
|
|
173
192
|
|
174
193
|
# @return [Boolean]
|
175
194
|
def nested_items?
|
176
|
-
@nested_items ||= properties.find(&:item_node?) || children
|
195
|
+
@nested_items ||= properties.find(&:item_node?) || children?
|
177
196
|
end
|
178
197
|
end
|
179
198
|
end
|
@@ -10,7 +10,9 @@ module MicroMicro
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# @see https://microformats.org/wiki/microformats2-parsing#parsing_a_p-_property
|
13
|
+
# microformats.org: microformats2 parsing specification § Parsing a +p-+ property
|
13
14
|
# @see https://microformats.org/wiki/microformats2-parsing#parsing_an_e-_property
|
15
|
+
# microformats.org: microformats2 parsing specification § Parsing an +e-+ property
|
14
16
|
#
|
15
17
|
# @return [String]
|
16
18
|
def value
|
@@ -30,6 +30,7 @@ module MicroMicro
|
|
30
30
|
# Value Class Pattern date and time parsing specification.
|
31
31
|
#
|
32
32
|
# @see https://microformats.org/wiki/value-class-pattern#Date_and_time_parsing
|
33
|
+
# microformats.org: Value Class Pattern § Date and time parsing
|
33
34
|
#
|
34
35
|
# @param string [String, #to_s]
|
35
36
|
def initialize(string)
|
@@ -89,17 +90,14 @@ module MicroMicro
|
|
89
90
|
|
90
91
|
# @return [String, nil]
|
91
92
|
def value
|
92
|
-
@value ||=
|
93
|
-
if normalized_date || normalized_time || normalized_timezone
|
94
|
-
"#{normalized_date} #{normalized_time}#{normalized_timezone}".strip
|
95
|
-
end
|
93
|
+
@value ||= "#{normalized_date} #{normalized_time}#{normalized_timezone}".strip.presence
|
96
94
|
end
|
97
95
|
|
98
96
|
# @return [Hash{Symbol => String, nil}]
|
99
97
|
def values
|
100
98
|
@values ||=
|
101
99
|
if string.match?(DATE_TIME_TIMEZONE_REGEXP)
|
102
|
-
string.match(DATE_TIME_TIMEZONE_REGEXP).named_captures.
|
100
|
+
string.match(DATE_TIME_TIMEZONE_REGEXP).named_captures.transform_keys(&:to_sym)
|
103
101
|
else
|
104
102
|
{}
|
105
103
|
end
|
@@ -10,6 +10,7 @@ module MicroMicro
|
|
10
10
|
}.freeze
|
11
11
|
|
12
12
|
# @see https://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property
|
13
|
+
# microformats.org: microformats2 parsing specification § Parsing a +dt-+ property
|
13
14
|
#
|
14
15
|
# @return [String]
|
15
16
|
def value
|
@@ -19,6 +20,7 @@ module MicroMicro
|
|
19
20
|
private
|
20
21
|
|
21
22
|
# @see https://microformats.org/wiki/value-class-pattern#microformats2_parsers_implied_date
|
23
|
+
# microformats.org: Value Class Pattern § microformats2 parsers implied date
|
22
24
|
#
|
23
25
|
# @return [MicroMicro::Parsers::DateTimeParser, nil]
|
24
26
|
def adopted_date_time_parser
|
@@ -39,6 +41,7 @@ module MicroMicro
|
|
39
41
|
end
|
40
42
|
|
41
43
|
# @see https://microformats.org/wiki/value-class-pattern#microformats2_parsers_implied_date
|
44
|
+
# microformats.org: Value Class Pattern § microformats2 parsers implied date
|
42
45
|
#
|
43
46
|
# @return [Boolean]
|
44
47
|
def imply_date?
|
@@ -4,6 +4,7 @@ module MicroMicro
|
|
4
4
|
module Parsers
|
5
5
|
class EmbeddedMarkupPropertyParser < BasePropertyParser
|
6
6
|
# @see https://microformats.org/wiki/microformats2-parsing#parsing_an_e-_property
|
7
|
+
# microformats.org: microformats2 parsing specification § Parsing an +e-+ property
|
7
8
|
#
|
8
9
|
# @return [Hash{Symbol => String}]
|
9
10
|
def value
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MicroMicro
|
4
|
+
module Parsers
|
5
|
+
class ImageElementParser
|
6
|
+
# @return [String]
|
7
|
+
attr_reader :value
|
8
|
+
|
9
|
+
# @param node [Nokogiri::XML::Element]
|
10
|
+
# @param value [String]
|
11
|
+
def initialize(node, value)
|
12
|
+
@node = node
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [String, nil]
|
17
|
+
def alt
|
18
|
+
@alt ||= node['alt']&.strip
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Boolean]
|
22
|
+
def alt?
|
23
|
+
!alt.nil?
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Hash{Symbol => String}, nil]
|
27
|
+
def srcset
|
28
|
+
@srcset ||= image_candidates if node['srcset']
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Boolean]
|
32
|
+
def srcset?
|
33
|
+
srcset.present?
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Hash{Symbol => String, Hash{Symbol => String}}]
|
37
|
+
def to_h
|
38
|
+
hash = { value: value }
|
39
|
+
|
40
|
+
hash[:srcset] = srcset if srcset?
|
41
|
+
hash[:alt] = alt if alt?
|
42
|
+
|
43
|
+
hash
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# @return [Nokogiri::XML::Element]
|
49
|
+
attr_reader :node
|
50
|
+
|
51
|
+
# @return [Hash{Symbol => String}]
|
52
|
+
#
|
53
|
+
# rubocop:disable Style/PerlBackrefs
|
54
|
+
def image_candidates
|
55
|
+
node['srcset']
|
56
|
+
.split(',')
|
57
|
+
.each_with_object({}) do |candidate, hash|
|
58
|
+
candidate.strip.match(/^(.+?)(\s+.+)?$/) do
|
59
|
+
key = ($2 || '1x').strip.to_sym
|
60
|
+
|
61
|
+
hash[key] = $1 unless hash[key]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
# rubocop:enable Style/PerlBackrefs
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -11,18 +11,19 @@ module MicroMicro
|
|
11
11
|
}.freeze
|
12
12
|
|
13
13
|
# @see https://microformats.org/wiki/microformats2-parsing#parsing_for_implied_properties
|
14
|
+
# microformats.org: microformats2 parsing specification § Parsing for implied properties
|
14
15
|
# @see https://microformats.org/wiki/microformats2-parsing#parse_an_img_element_for_src_and_alt
|
16
|
+
# microformats.org: microformats2 parsing specification § Parse an img element for src and alt
|
15
17
|
#
|
16
18
|
# @return [String, Hash{Symbol => String}, nil]
|
17
19
|
def value
|
18
20
|
@value ||=
|
19
21
|
if attribute_value
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
}
|
22
|
+
if candidate_node.matches?('img[alt], img[srcset]')
|
23
|
+
ImageElementParser.new(candidate_node, attribute_value).to_h
|
24
|
+
else
|
25
|
+
attribute_value
|
26
|
+
end
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
@@ -11,6 +11,7 @@ module MicroMicro
|
|
11
11
|
}.freeze
|
12
12
|
|
13
13
|
# @see https://microformats.org/wiki/microformats2-parsing#parsing_for_implied_properties
|
14
|
+
# microformats.org: microformats2 parsing specification § Parsing for implied properties
|
14
15
|
#
|
15
16
|
# @return [String, nil]
|
16
17
|
def value
|
@@ -16,16 +16,15 @@ module MicroMicro
|
|
16
16
|
}.freeze
|
17
17
|
|
18
18
|
# @see https://microformats.org/wiki/microformats2-parsing#parsing_a_u-_property
|
19
|
+
# microformats.org: microformats2 parsing specification § Parsing a +u-+ property
|
19
20
|
# @see https://microformats.org/wiki/microformats2-parsing#parse_an_img_element_for_src_and_alt
|
21
|
+
# microformats.org: microformats2 parsing specification § Parse an img element for src and alt
|
20
22
|
#
|
21
23
|
# @return [String, Hash{Symbol => String}]
|
22
24
|
def value
|
23
25
|
@value ||=
|
24
|
-
if node.matches?('img[alt]')
|
25
|
-
|
26
|
-
value: resolved_value,
|
27
|
-
alt: node['alt'].strip
|
28
|
-
}
|
26
|
+
if node.matches?('img[alt], img[srcset]')
|
27
|
+
ImageElementParser.new(node, resolved_value).to_h
|
29
28
|
else
|
30
29
|
resolved_value
|
31
30
|
end
|
@@ -4,7 +4,9 @@ module MicroMicro
|
|
4
4
|
module Parsers
|
5
5
|
class ValueClassPatternParser
|
6
6
|
# @see https://microformats.org/wiki/value-class-pattern#Basic_Parsing
|
7
|
+
# microformats.org: Value Class Pattern § Basic Parsing
|
7
8
|
# @see https://microformats.org/wiki/value-class-pattern#Date_and_time_values
|
9
|
+
# microformats.org: Value Class Pattern § Date and time values
|
8
10
|
HTML_ATTRIBUTES_MAP = {
|
9
11
|
'alt' => %w[area img],
|
10
12
|
'value' => %w[data],
|
@@ -37,7 +39,7 @@ module MicroMicro
|
|
37
39
|
Helpers.attribute_value_from(node, HTML_ATTRIBUTES_MAP) || node.text
|
38
40
|
end
|
39
41
|
|
40
|
-
# @param
|
42
|
+
# @param node [Nokogiri::XML::Element]
|
41
43
|
# @param separator [String]
|
42
44
|
def initialize(node, separator = '')
|
43
45
|
@node = node
|
@@ -55,7 +57,7 @@ module MicroMicro
|
|
55
57
|
self.class
|
56
58
|
.node_set_from(node)
|
57
59
|
.map { |value_node| self.class.value_from(value_node) }
|
58
|
-
.
|
60
|
+
.compact_blank!
|
59
61
|
end
|
60
62
|
|
61
63
|
private
|
data/lib/micro_micro/property.rb
CHANGED
@@ -11,55 +11,95 @@ module MicroMicro
|
|
11
11
|
'u' => Parsers::UrlPropertyParser
|
12
12
|
}.freeze
|
13
13
|
|
14
|
-
|
14
|
+
private_constant :PROPERTY_PARSERS_MAP
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
class PropertyNodeSearch
|
17
|
+
attr_reader :node_set
|
18
|
+
|
19
|
+
def initialize(document)
|
20
|
+
@node_set = Nokogiri::XML::NodeSet.new(document, [])
|
21
21
|
end
|
22
|
-
end
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
def search(context)
|
24
|
+
context.each { |node| search(node) } if context.is_a?(Nokogiri::XML::NodeSet)
|
25
|
+
|
26
|
+
if context.is_a?(Nokogiri::XML::Element) && !Helpers.ignore_node?(context)
|
27
|
+
node_set << context if Helpers.property_node?(context)
|
29
28
|
|
30
|
-
|
31
|
-
|
29
|
+
search(context.element_children) unless Helpers.item_node?(context)
|
30
|
+
end
|
32
31
|
|
33
|
-
|
32
|
+
node_set
|
34
33
|
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private_constant :PropertyNodeSearch
|
35
37
|
|
36
|
-
|
38
|
+
# This {MicroMicro::Property}'s +name+ value.
|
39
|
+
#
|
40
|
+
# @return [String]
|
41
|
+
attr_reader :name
|
42
|
+
|
43
|
+
# This {MicroMicro::Property}'s node.
|
44
|
+
#
|
45
|
+
# @return [Nokogiri::XML::Element]
|
46
|
+
attr_reader :node
|
47
|
+
|
48
|
+
# This {MicroMicro::Property}'s +prefix+ value.
|
49
|
+
#
|
50
|
+
# @return [String] One of +dt+, +e+, +p+, or +u+.
|
51
|
+
attr_reader :prefix
|
52
|
+
|
53
|
+
# Extract {MicroMicro::Property}s from a context.
|
54
|
+
#
|
55
|
+
# @param context [Nokogiri::XML::NodeSet, Nokogiri::XML::Element]
|
56
|
+
# @return [Array<MicroMicro::Property>]
|
57
|
+
def self.from_context(context)
|
58
|
+
PropertyNodeSearch
|
59
|
+
.new(context.document)
|
60
|
+
.search(context)
|
61
|
+
.flat_map do |node|
|
62
|
+
Helpers.property_class_names_from(node).map { |token| new(node, token) }
|
63
|
+
end
|
37
64
|
end
|
38
65
|
|
66
|
+
# Parse a node for property data.
|
67
|
+
#
|
39
68
|
# @param node [Nokogiri::XML::Element]
|
40
|
-
# @param token [String]
|
69
|
+
# @param token [String] A hyphen-separated token representing a microformats2
|
70
|
+
# property value (e.g. +p-name+, +u-url+).
|
41
71
|
def initialize(node, token)
|
42
72
|
@node = node
|
43
73
|
@prefix, @name = token.split(/-/, 2)
|
44
74
|
end
|
45
75
|
|
76
|
+
# Is this {MicroMicro::Property} a datetime property?
|
77
|
+
#
|
46
78
|
# @return [Boolean]
|
47
79
|
def date_time_property?
|
48
80
|
prefix == 'dt'
|
49
81
|
end
|
50
82
|
|
83
|
+
# Is this {MicroMicro::Property} an embedded markup property?
|
84
|
+
#
|
51
85
|
# @return [Boolean]
|
52
86
|
def embedded_markup_property?
|
53
87
|
prefix == 'e'
|
54
88
|
end
|
55
89
|
|
90
|
+
# Always return +false+ when asked if this {MicroMicro::Property} is an
|
91
|
+
# implied property.
|
92
|
+
#
|
93
|
+
# @see MicroMicro::ImpliedProperty#implied?
|
94
|
+
#
|
56
95
|
# @return [Boolean]
|
57
96
|
def implied?
|
58
97
|
false
|
59
98
|
end
|
60
99
|
|
61
|
-
# :nocov:
|
62
100
|
# @return [String]
|
101
|
+
#
|
102
|
+
# :nocov:
|
63
103
|
def inspect
|
64
104
|
"#<#{self.class}:#{format('%#0x', object_id)} " \
|
65
105
|
"name: #{name.inspect}, " \
|
@@ -68,27 +108,42 @@ module MicroMicro
|
|
68
108
|
end
|
69
109
|
# :nocov:
|
70
110
|
|
111
|
+
# Parse this {MicroMicro::Property}'s node as a {MicroMicro::Item}, if
|
112
|
+
# applicable.
|
113
|
+
#
|
71
114
|
# @return [MicroMicro::Item, nil]
|
72
115
|
def item
|
73
116
|
@item ||= Item.new(node) if item_node?
|
74
117
|
end
|
75
118
|
|
119
|
+
# Should this {MicroMicro::Property}'s node be parsed as a
|
120
|
+
# {MicroMicro::Item}?
|
121
|
+
#
|
122
|
+
# @see MicroMicro::Helpers.item_node?
|
123
|
+
#
|
76
124
|
# @return [Boolean]
|
77
125
|
def item_node?
|
78
126
|
@item_node ||= Helpers.item_node?(node)
|
79
127
|
end
|
80
128
|
|
129
|
+
# Is this {MicroMicro::Property} a plain text property?
|
130
|
+
#
|
81
131
|
# @return [Boolean]
|
82
132
|
def plain_text_property?
|
83
133
|
prefix == 'p'
|
84
134
|
end
|
85
135
|
|
136
|
+
# Is this {MicroMicro::Property} a url property?
|
137
|
+
#
|
86
138
|
# @return [Boolean]
|
87
139
|
def url_property?
|
88
140
|
prefix == 'u'
|
89
141
|
end
|
90
142
|
|
143
|
+
# Return this {MicroMicro::Property}'s parsed value.
|
144
|
+
#
|
91
145
|
# @return [String, Hash]
|
146
|
+
#
|
92
147
|
# rubocop:disable Metrics
|
93
148
|
def value
|
94
149
|
@value ||=
|
@@ -97,8 +152,8 @@ module MicroMicro
|
|
97
152
|
|
98
153
|
return hash.merge(parser.value) if embedded_markup_property?
|
99
154
|
|
100
|
-
p_property = item.properties.
|
101
|
-
u_property = item.properties.
|
155
|
+
p_property = item.properties.find_by(name: 'name') if plain_text_property?
|
156
|
+
u_property = item.properties.find_by(name: 'url') if url_property?
|
102
157
|
|
103
158
|
hash.merge(value: (p_property || u_property || parser).value)
|
104
159
|
else
|
@@ -107,6 +162,9 @@ module MicroMicro
|
|
107
162
|
end
|
108
163
|
# rubocop:enable Metrics
|
109
164
|
|
165
|
+
# Returns +true+ if this {MicroMicro::Property}'s +value+ is anything other
|
166
|
+
# than blank or +nil+.
|
167
|
+
#
|
110
168
|
# @return [Boolean]
|
111
169
|
def value?
|
112
170
|
value.present?
|