micromicro 1.0.0 → 2.0.1
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 +33 -0
- data/CONTRIBUTING.md +2 -2
- data/README.md +21 -20
- data/lib/micro_micro/collectible.rb +2 -0
- data/lib/micro_micro/collections/base_collection.rb +7 -1
- data/lib/micro_micro/collections/items_collection.rb +3 -1
- data/lib/micro_micro/collections/properties_collection.rb +12 -0
- data/lib/micro_micro/collections/relationships_collection.rb +11 -10
- data/lib/micro_micro/document.rb +11 -99
- data/lib/micro_micro/helpers.rb +88 -0
- data/lib/micro_micro/implied_property.rb +2 -0
- data/lib/micro_micro/item.rb +57 -62
- data/lib/micro_micro/parsers/base_implied_property_parser.rb +29 -0
- data/lib/micro_micro/parsers/base_property_parser.rb +6 -14
- data/lib/micro_micro/parsers/date_time_parser.rb +60 -25
- data/lib/micro_micro/parsers/date_time_property_parser.rb +10 -9
- data/lib/micro_micro/parsers/embedded_markup_property_parser.rb +4 -3
- data/lib/micro_micro/parsers/implied_name_property_parser.rb +15 -17
- data/lib/micro_micro/parsers/implied_photo_property_parser.rb +21 -45
- data/lib/micro_micro/parsers/implied_url_property_parser.rb +12 -31
- data/lib/micro_micro/parsers/plain_text_property_parser.rb +4 -2
- data/lib/micro_micro/parsers/url_property_parser.rb +22 -14
- data/lib/micro_micro/parsers/value_class_pattern_parser.rb +29 -44
- data/lib/micro_micro/property.rb +68 -56
- data/lib/micro_micro/relationship.rb +15 -13
- data/lib/micro_micro/version.rb +3 -1
- data/lib/micromicro.rb +31 -26
- data/micromicro.gemspec +14 -9
- metadata +23 -32
- data/.editorconfig +0 -14
- data/.gitignore +0 -34
- data/.gitmodules +0 -3
- data/.reek.yml +0 -8
- data/.rspec +0 -2
- data/.rubocop +0 -3
- data/.rubocop.yml +0 -25
- data/.ruby-version +0 -1
- data/.simplecov +0 -13
- data/.travis.yml +0 -19
- data/Gemfile +0 -14
- data/Rakefile +0 -18
@@ -1,50 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MicroMicro
|
2
4
|
module Parsers
|
3
|
-
class ImpliedUrlPropertyParser <
|
5
|
+
class ImpliedUrlPropertyParser < BaseImpliedPropertyParser
|
6
|
+
CSS_SELECTORS_ARRAY = ['> a[href]:only-of-type', '> area[href]:only-of-type'].freeze
|
7
|
+
|
4
8
|
HTML_ELEMENTS_MAP = {
|
5
9
|
'a' => 'href',
|
6
10
|
'area' => 'href'
|
7
11
|
}.freeze
|
8
12
|
|
9
|
-
# @see
|
13
|
+
# @see https://microformats.org/wiki/microformats2-parsing#parsing_for_implied_properties
|
10
14
|
#
|
11
15
|
# @return [String, nil]
|
12
16
|
def value
|
13
|
-
@value ||=
|
17
|
+
@value ||= attribute_value
|
14
18
|
end
|
15
19
|
|
16
20
|
private
|
17
21
|
|
18
|
-
# @return [Array
|
19
|
-
def
|
20
|
-
|
21
|
-
HTML_ELEMENTS_MAP.map do |element, attribute|
|
22
|
-
node if node.matches?("#{element}[#{attribute}]")
|
23
|
-
end.compact
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# @return [Nokogiri::XML::Element, nil]
|
28
|
-
def value_node
|
29
|
-
@value_node ||= begin
|
30
|
-
return attribute_values.first if attribute_values.any?
|
31
|
-
|
32
|
-
HTML_ELEMENTS_MAP.each do |element, attribute|
|
33
|
-
child_node = node.at_css("> #{element}[#{attribute}]:only-of-type")
|
34
|
-
|
35
|
-
return child_node if child_node && !Item.item_node?(child_node) && element == child_node.name && child_node[attribute]
|
36
|
-
end
|
37
|
-
|
38
|
-
if node.element_children.one? && !Item.item_node?(node.first_element_child)
|
39
|
-
HTML_ELEMENTS_MAP.each do |element, attribute|
|
40
|
-
child_node = node.first_element_child.at_css("> #{element}[#{attribute}]:only-of-type")
|
22
|
+
# @return [Array]
|
23
|
+
def child_nodes
|
24
|
+
nodes = [node.at_css(*CSS_SELECTORS_ARRAY)]
|
41
25
|
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
26
|
+
nodes << node.first_element_child.at_css(*CSS_SELECTORS_ARRAY) if node.element_children.one?
|
45
27
|
|
46
|
-
|
47
|
-
end
|
28
|
+
nodes.compact.reject { |child_node| Helpers.item_node?(child_node) }
|
48
29
|
end
|
49
30
|
end
|
50
31
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MicroMicro
|
2
4
|
module Parsers
|
3
5
|
class PlainTextPropertyParser < BasePropertyParser
|
@@ -7,7 +9,7 @@ module MicroMicro
|
|
7
9
|
'alt' => %w[area img]
|
8
10
|
}.freeze
|
9
11
|
|
10
|
-
# @see
|
12
|
+
# @see https://microformats.org/wiki/microformats2-parsing#parsing_a_p-_property
|
11
13
|
#
|
12
14
|
# @return [String]
|
13
15
|
def value
|
@@ -18,7 +20,7 @@ module MicroMicro
|
|
18
20
|
|
19
21
|
# @return [String, nil]
|
20
22
|
def attribute_value
|
21
|
-
|
23
|
+
Helpers.attribute_value_from(node, HTML_ATTRIBUTES_MAP)
|
22
24
|
end
|
23
25
|
|
24
26
|
# @return [String, nil]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MicroMicro
|
2
4
|
module Parsers
|
3
5
|
class UrlPropertyParser < BasePropertyParser
|
@@ -13,41 +15,47 @@ module MicroMicro
|
|
13
15
|
'value' => %w[data input]
|
14
16
|
}.freeze
|
15
17
|
|
16
|
-
# @see
|
17
|
-
# @see
|
18
|
+
# @see https://microformats.org/wiki/microformats2-parsing#parsing_a_u-_property
|
19
|
+
# @see https://microformats.org/wiki/microformats2-parsing#parse_an_img_element_for_src_and_alt
|
18
20
|
#
|
19
21
|
# @return [String, Hash{Symbol => String}]
|
20
22
|
def value
|
21
|
-
@value ||=
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
@value ||=
|
24
|
+
if node.matches?('img[alt]')
|
25
|
+
{
|
26
|
+
value: resolved_value,
|
27
|
+
alt: node['alt'].strip
|
28
|
+
}
|
29
|
+
else
|
30
|
+
resolved_value
|
31
|
+
end
|
29
32
|
end
|
30
33
|
|
31
34
|
private
|
32
35
|
|
33
36
|
# @return [String, nil]
|
34
37
|
def attribute_value
|
35
|
-
|
38
|
+
Helpers.attribute_value_from(node, HTML_ATTRIBUTES_MAP)
|
36
39
|
end
|
37
40
|
|
38
41
|
# @return [String, nil]
|
39
42
|
def extended_attribute_value
|
40
|
-
|
43
|
+
Helpers.attribute_value_from(node, EXTENDED_HTML_ATTRIBUTES_MAP)
|
41
44
|
end
|
42
45
|
|
43
46
|
# @return [String]
|
44
47
|
def resolved_value
|
45
|
-
@resolved_value ||=
|
48
|
+
@resolved_value ||= node.document.resolve_relative_url(unresolved_value.strip)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [String]
|
52
|
+
def text_content
|
53
|
+
Helpers.text_content_from(node)
|
46
54
|
end
|
47
55
|
|
48
56
|
# @return [String]
|
49
57
|
def unresolved_value
|
50
|
-
attribute_value || value_class_pattern_value || extended_attribute_value ||
|
58
|
+
attribute_value || value_class_pattern_value || extended_attribute_value || text_content
|
51
59
|
end
|
52
60
|
|
53
61
|
# @return [String, nil]
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MicroMicro
|
2
4
|
module Parsers
|
3
5
|
class ValueClassPatternParser
|
4
|
-
# @see
|
5
|
-
# @see
|
6
|
+
# @see https://microformats.org/wiki/value-class-pattern#Basic_Parsing
|
7
|
+
# @see https://microformats.org/wiki/value-class-pattern#Date_and_time_values
|
6
8
|
HTML_ATTRIBUTES_MAP = {
|
7
9
|
'alt' => %w[area img],
|
8
10
|
'value' => %w[data],
|
@@ -10,72 +12,55 @@ module MicroMicro
|
|
10
12
|
'datetime' => %w[del ins time]
|
11
13
|
}.freeze
|
12
14
|
|
13
|
-
# @param context [Nokogiri::XML::Element]
|
14
|
-
# @param separator [String]
|
15
|
-
def initialize(node, separator = '')
|
16
|
-
@node = node
|
17
|
-
@separator = separator
|
18
|
-
end
|
19
|
-
|
20
|
-
# @return [String, nil]
|
21
|
-
def value
|
22
|
-
@value ||= values.join(separator).strip if values.any?
|
23
|
-
end
|
24
|
-
|
25
|
-
# @return [Array<String>]
|
26
|
-
def values
|
27
|
-
@values ||= value_nodes.map { |value_node| self.class.value_from(value_node) }.select(&:present?)
|
28
|
-
end
|
29
|
-
|
30
15
|
# @param context [Nokogiri::XML::NodeSet, Nokogiri::XML::Element]
|
31
16
|
# @param node_set [Nokogiri::XML::NodeSet]
|
32
17
|
# @return [Nokogiri::XML::NodeSet]
|
33
|
-
def self.
|
34
|
-
context.each { |node|
|
18
|
+
def self.node_set_from(context, node_set = Nokogiri::XML::NodeSet.new(context.document, []))
|
19
|
+
context.each { |node| node_set_from(node, node_set) } if context.is_a?(Nokogiri::XML::NodeSet)
|
35
20
|
|
36
|
-
if context.is_a?(Nokogiri::XML::Element) && !
|
37
|
-
if value_class_node?(context) || value_title_node?(context)
|
21
|
+
if context.is_a?(Nokogiri::XML::Element) && !Helpers.ignore_node?(context)
|
22
|
+
if Helpers.value_class_node?(context) || Helpers.value_title_node?(context)
|
38
23
|
node_set << context
|
39
24
|
else
|
40
|
-
|
25
|
+
node_set_from(context.element_children, node_set)
|
41
26
|
end
|
42
27
|
end
|
43
28
|
|
44
29
|
node_set
|
45
30
|
end
|
46
31
|
|
47
|
-
# @param node [Nokogiri::XML::Element]
|
48
|
-
# @return [Boolean]
|
49
|
-
def self.value_class_node?(node)
|
50
|
-
node.classes.include?('value')
|
51
|
-
end
|
52
|
-
|
53
32
|
# @param node [Nokogiri::XML::Element]
|
54
33
|
# @return [String, nil]
|
55
34
|
def self.value_from(node)
|
56
|
-
return node['title'] if value_title_node?(node)
|
35
|
+
return node['title'] if Helpers.value_title_node?(node)
|
57
36
|
|
58
|
-
|
59
|
-
|
60
|
-
end
|
37
|
+
Helpers.attribute_value_from(node, HTML_ATTRIBUTES_MAP) || node.text
|
38
|
+
end
|
61
39
|
|
62
|
-
|
40
|
+
# @param context [Nokogiri::XML::Element]
|
41
|
+
# @param separator [String]
|
42
|
+
def initialize(node, separator = '')
|
43
|
+
@node = node
|
44
|
+
@separator = separator
|
63
45
|
end
|
64
46
|
|
65
|
-
# @
|
66
|
-
|
67
|
-
|
68
|
-
|
47
|
+
# @return [String, nil]
|
48
|
+
def value
|
49
|
+
@value ||= values.join(separator).strip if values.any?
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [Array<String>]
|
53
|
+
def values
|
54
|
+
@values ||=
|
55
|
+
self.class
|
56
|
+
.node_set_from(node)
|
57
|
+
.map { |value_node| self.class.value_from(value_node) }
|
58
|
+
.select(&:present?)
|
69
59
|
end
|
70
60
|
|
71
61
|
private
|
72
62
|
|
73
63
|
attr_reader :node, :separator
|
74
|
-
|
75
|
-
# @return [Nokogiri::XML::NodeSet]
|
76
|
-
def value_nodes
|
77
|
-
@value_nodes ||= self.class.nodes_from(node)
|
78
|
-
end
|
79
64
|
end
|
80
65
|
end
|
81
66
|
end
|
data/lib/micro_micro/property.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MicroMicro
|
2
4
|
class Property
|
5
|
+
include Collectible
|
6
|
+
|
3
7
|
PROPERTY_PARSERS_MAP = {
|
4
8
|
'dt' => Parsers::DateTimePropertyParser,
|
5
9
|
'e' => Parsers::EmbeddedMarkupPropertyParser,
|
@@ -7,17 +11,46 @@ module MicroMicro
|
|
7
11
|
'u' => Parsers::UrlPropertyParser
|
8
12
|
}.freeze
|
9
13
|
|
10
|
-
include Collectible
|
11
|
-
|
12
14
|
attr_reader :name, :node, :prefix
|
13
15
|
|
16
|
+
# @param context [Nokogiri::XML::NodeSet, Nokogiri::XML::Element]
|
17
|
+
# @return [Array<MicroMicro::Property>]
|
18
|
+
def self.from_context(context)
|
19
|
+
node_set_from(context).flat_map do |node|
|
20
|
+
Helpers.property_class_names_from(node).map { |token| new(node, token) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param context [Nokogiri::XML::NodeSet, Nokogiri::XML::Element]
|
25
|
+
# @param node_set [Nokogiri::XML::NodeSet]
|
26
|
+
# @return [Nokogiri::XML::NodeSet]
|
27
|
+
def self.node_set_from(context, node_set = Nokogiri::XML::NodeSet.new(context.document, []))
|
28
|
+
context.each { |node| node_set_from(node, node_set) } if context.is_a?(Nokogiri::XML::NodeSet)
|
29
|
+
|
30
|
+
if context.is_a?(Nokogiri::XML::Element) && !Helpers.ignore_node?(context)
|
31
|
+
node_set << context if Helpers.property_node?(context)
|
32
|
+
|
33
|
+
node_set_from(context.element_children, node_set) unless Helpers.item_node?(context)
|
34
|
+
end
|
35
|
+
|
36
|
+
node_set
|
37
|
+
end
|
38
|
+
|
14
39
|
# @param node [Nokogiri::XML::Element]
|
15
|
-
# @param
|
16
|
-
|
17
|
-
def initialize(node, name:, prefix:)
|
40
|
+
# @param token [String]
|
41
|
+
def initialize(node, token)
|
18
42
|
@node = node
|
19
|
-
@name =
|
20
|
-
|
43
|
+
@prefix, @name = token.split(/-/, 2)
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Boolean]
|
47
|
+
def date_time_property?
|
48
|
+
prefix == 'dt'
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean]
|
52
|
+
def embedded_markup_property?
|
53
|
+
prefix == 'e'
|
21
54
|
end
|
22
55
|
|
23
56
|
# @return [Boolean]
|
@@ -25,10 +58,15 @@ module MicroMicro
|
|
25
58
|
false
|
26
59
|
end
|
27
60
|
|
61
|
+
# :nocov:
|
28
62
|
# @return [String]
|
29
63
|
def inspect
|
30
|
-
|
64
|
+
"#<#{self.class}:#{format('%#0x', object_id)} " \
|
65
|
+
"name: #{name.inspect}, " \
|
66
|
+
"prefix: #{prefix.inspect}, " \
|
67
|
+
"value: #{value.inspect}>"
|
31
68
|
end
|
69
|
+
# :nocov:
|
32
70
|
|
33
71
|
# @return [MicroMicro::Item, nil]
|
34
72
|
def item
|
@@ -37,67 +75,41 @@ module MicroMicro
|
|
37
75
|
|
38
76
|
# @return [Boolean]
|
39
77
|
def item_node?
|
40
|
-
@item_node ||=
|
78
|
+
@item_node ||= Helpers.item_node?(node)
|
41
79
|
end
|
42
80
|
|
43
|
-
# @return [
|
44
|
-
def
|
45
|
-
|
46
|
-
return parser.value unless item_node?
|
47
|
-
|
48
|
-
hash = item.to_h
|
49
|
-
|
50
|
-
return hash.merge(parser.value) if prefix == 'e'
|
51
|
-
|
52
|
-
p_property = item.properties.find { |property| property.name == 'name' } if prefix == 'p'
|
53
|
-
u_property = item.properties.find { |property| property.name == 'url' } if prefix == 'u'
|
54
|
-
|
55
|
-
hash.merge(value: (p_property || u_property || parser).value)
|
56
|
-
end
|
81
|
+
# @return [Boolean]
|
82
|
+
def plain_text_property?
|
83
|
+
prefix == 'p'
|
57
84
|
end
|
58
85
|
|
59
86
|
# @return [Boolean]
|
60
|
-
def
|
61
|
-
|
87
|
+
def url_property?
|
88
|
+
prefix == 'u'
|
62
89
|
end
|
63
90
|
|
64
|
-
# @
|
65
|
-
#
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
if context.is_a?(Nokogiri::XML::Element) && !Document.ignore_node?(context)
|
71
|
-
node_set << context if property_node?(context)
|
91
|
+
# @return [String, Hash]
|
92
|
+
# rubocop:disable Metrics
|
93
|
+
def value
|
94
|
+
@value ||=
|
95
|
+
if item_node?
|
96
|
+
hash = item.to_h
|
72
97
|
|
73
|
-
|
74
|
-
end
|
98
|
+
return hash.merge(parser.value) if embedded_markup_property?
|
75
99
|
|
76
|
-
|
77
|
-
|
100
|
+
p_property = item.properties.find { |property| property.name == 'name' } if plain_text_property?
|
101
|
+
u_property = item.properties.find { |property| property.name == 'url' } if url_property?
|
78
102
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
types_from(node).map { |prefix, name| new(node, name: name, prefix: prefix) }
|
84
|
-
end.flatten
|
103
|
+
hash.merge(value: (p_property || u_property || parser).value)
|
104
|
+
else
|
105
|
+
parser.value
|
106
|
+
end
|
85
107
|
end
|
108
|
+
# rubocop:enable Metrics
|
86
109
|
|
87
|
-
# @param node [Nokogiri::XML::Element]
|
88
110
|
# @return [Boolean]
|
89
|
-
def
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
# @param node [Nokogiri::XML::Element]
|
94
|
-
# @return [Array<Array(String, String)>]
|
95
|
-
#
|
96
|
-
# @example
|
97
|
-
# node = Nokogiri::HTML('<a href="https://sixtwothree.org" class="p-name u-url">Jason Garber</a>').at_css('a')
|
98
|
-
# MicroMicro::Property.types_from(node) #=> [['p', 'name'], ['u', 'url']]
|
99
|
-
def self.types_from(node)
|
100
|
-
node.classes.select { |token| token.match?(/^(?:dt|e|p|u)(?:-[0-9a-z]+)?(?:-[a-z]+)+$/) }.map { |token| token.split(/-/, 2) }.uniq
|
111
|
+
def value?
|
112
|
+
value.present?
|
101
113
|
end
|
102
114
|
|
103
115
|
private
|
@@ -1,7 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MicroMicro
|
2
4
|
class Relationship
|
3
5
|
include Collectible
|
4
6
|
|
7
|
+
# @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
|
8
|
+
# @return [Array<MicroMicro::Relationship>]
|
9
|
+
def self.relationships_from(context)
|
10
|
+
context.css('[href][rel]:not([rel=""])')
|
11
|
+
.reject { |node| Helpers.ignore_nodes?(node.ancestors) }
|
12
|
+
.map { |node| new(node) }
|
13
|
+
end
|
14
|
+
|
5
15
|
# @param node [Nokogiri::XML::Element]
|
6
16
|
def initialize(node)
|
7
17
|
@node = node
|
@@ -17,10 +27,14 @@ module MicroMicro
|
|
17
27
|
@hreflang ||= node['hreflang']&.strip
|
18
28
|
end
|
19
29
|
|
30
|
+
# :nocov:
|
20
31
|
# @return [String]
|
21
32
|
def inspect
|
22
|
-
|
33
|
+
"#<#{self.class}:#{format('%#0x', object_id)} " \
|
34
|
+
"href: #{href.inspect}, " \
|
35
|
+
"rels: #{rels.inspect}>"
|
23
36
|
end
|
37
|
+
# :nocov:
|
24
38
|
|
25
39
|
# @return [String, nil]
|
26
40
|
def media
|
@@ -60,18 +74,6 @@ module MicroMicro
|
|
60
74
|
@type ||= node['type']&.strip
|
61
75
|
end
|
62
76
|
|
63
|
-
# @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
|
64
|
-
# @return [Nokogiri::XML::NodeSet]
|
65
|
-
def self.nodes_from(context)
|
66
|
-
context.css('[href][rel]:not([rel=""])').reject { |node| (node.ancestors.map(&:name) & Document.ignored_node_names).any? }
|
67
|
-
end
|
68
|
-
|
69
|
-
# @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
|
70
|
-
# @return [Array<MicroMicro::Relationship>]
|
71
|
-
def self.relationships_from(context)
|
72
|
-
nodes_from(context).map { |node| new(node) }
|
73
|
-
end
|
74
|
-
|
75
77
|
private
|
76
78
|
|
77
79
|
attr_reader :node
|
data/lib/micro_micro/version.rb
CHANGED
data/lib/micromicro.rb
CHANGED
@@ -1,38 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'forwardable'
|
2
4
|
|
3
|
-
require 'absolutely'
|
4
5
|
require 'active_support/core_ext/array/grouping'
|
5
6
|
require 'active_support/core_ext/hash/deep_transform_values'
|
6
7
|
require 'active_support/core_ext/hash/keys'
|
7
8
|
require 'active_support/core_ext/hash/slice'
|
8
9
|
require 'active_support/core_ext/object/blank'
|
9
10
|
require 'nokogiri'
|
11
|
+
require 'nokogiri/html-ext'
|
12
|
+
|
13
|
+
require_relative 'micro_micro/version'
|
14
|
+
require_relative 'micro_micro/collectible'
|
15
|
+
require_relative 'micro_micro/helpers'
|
16
|
+
|
17
|
+
require_relative 'micro_micro/parsers/date_time_parser'
|
18
|
+
require_relative 'micro_micro/parsers/value_class_pattern_parser'
|
19
|
+
|
20
|
+
require_relative 'micro_micro/parsers/base_property_parser'
|
21
|
+
require_relative 'micro_micro/parsers/date_time_property_parser'
|
22
|
+
require_relative 'micro_micro/parsers/embedded_markup_property_parser'
|
23
|
+
require_relative 'micro_micro/parsers/plain_text_property_parser'
|
24
|
+
require_relative 'micro_micro/parsers/url_property_parser'
|
25
|
+
|
26
|
+
require_relative 'micro_micro/parsers/base_implied_property_parser'
|
27
|
+
require_relative 'micro_micro/parsers/implied_name_property_parser'
|
28
|
+
require_relative 'micro_micro/parsers/implied_photo_property_parser'
|
29
|
+
require_relative 'micro_micro/parsers/implied_url_property_parser'
|
30
|
+
|
31
|
+
require_relative 'micro_micro/document'
|
32
|
+
require_relative 'micro_micro/item'
|
33
|
+
require_relative 'micro_micro/property'
|
34
|
+
require_relative 'micro_micro/implied_property'
|
35
|
+
require_relative 'micro_micro/relationship'
|
10
36
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
require 'micro_micro/parsers/value_class_pattern_parser'
|
16
|
-
|
17
|
-
require 'micro_micro/parsers/base_property_parser'
|
18
|
-
require 'micro_micro/parsers/date_time_property_parser'
|
19
|
-
require 'micro_micro/parsers/embedded_markup_property_parser'
|
20
|
-
require 'micro_micro/parsers/implied_name_property_parser'
|
21
|
-
require 'micro_micro/parsers/implied_photo_property_parser'
|
22
|
-
require 'micro_micro/parsers/implied_url_property_parser'
|
23
|
-
require 'micro_micro/parsers/plain_text_property_parser'
|
24
|
-
require 'micro_micro/parsers/url_property_parser'
|
25
|
-
|
26
|
-
require 'micro_micro/document'
|
27
|
-
require 'micro_micro/item'
|
28
|
-
require 'micro_micro/property'
|
29
|
-
require 'micro_micro/implied_property'
|
30
|
-
require 'micro_micro/relationship'
|
31
|
-
|
32
|
-
require 'micro_micro/collections/base_collection'
|
33
|
-
require 'micro_micro/collections/items_collection'
|
34
|
-
require 'micro_micro/collections/properties_collection'
|
35
|
-
require 'micro_micro/collections/relationships_collection'
|
37
|
+
require_relative 'micro_micro/collections/base_collection'
|
38
|
+
require_relative 'micro_micro/collections/items_collection'
|
39
|
+
require_relative 'micro_micro/collections/properties_collection'
|
40
|
+
require_relative 'micro_micro/collections/relationships_collection'
|
36
41
|
|
37
42
|
module MicroMicro
|
38
43
|
# Parse a string of HTML for microformats2-encoded data.
|
data/micromicro.gemspec
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'lib/micro_micro/version'
|
2
4
|
|
3
5
|
Gem::Specification.new do |spec|
|
4
|
-
spec.required_ruby_version =
|
6
|
+
spec.required_ruby_version = '>= 2.7', '< 4'
|
5
7
|
|
6
8
|
spec.name = 'micromicro'
|
7
9
|
spec.version = MicroMicro::VERSION
|
@@ -13,16 +15,19 @@ Gem::Specification.new do |spec|
|
|
13
15
|
spec.homepage = 'https://github.com/jgarber623/micromicro'
|
14
16
|
spec.license = 'MIT'
|
15
17
|
|
16
|
-
spec.files = Dir.
|
17
|
-
|
18
|
-
|
18
|
+
spec.files = Dir['lib/**/*'].reject { |f| File.directory?(f) }
|
19
|
+
spec.files += %w[LICENSE CHANGELOG.md CONTRIBUTING.md README.md]
|
20
|
+
spec.files += %w[micromicro.gemspec]
|
19
21
|
|
20
22
|
spec.require_paths = ['lib']
|
21
23
|
|
22
|
-
spec.metadata
|
23
|
-
|
24
|
+
spec.metadata = {
|
25
|
+
'bug_tracker_uri' => "#{spec.homepage}/issues",
|
26
|
+
'changelog_uri' => "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md",
|
27
|
+
'rubygems_mfa_required' => 'true'
|
28
|
+
}
|
24
29
|
|
25
|
-
spec.add_runtime_dependency '
|
26
|
-
spec.add_runtime_dependency '
|
27
|
-
spec.add_runtime_dependency 'nokogiri', '~>
|
30
|
+
spec.add_runtime_dependency 'activesupport', '~> 7.0'
|
31
|
+
spec.add_runtime_dependency 'nokogiri', '>= 1.13'
|
32
|
+
spec.add_runtime_dependency 'nokogiri-html-ext', '~> 0.2.2'
|
28
33
|
end
|