micromicro 1.1.0 → 3.0.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 +43 -1
- data/CONTRIBUTING.md +3 -3
- data/README.md +9 -102
- data/lib/micro_micro/collectible.rb +2 -0
- data/lib/micro_micro/collections/base_collection.rb +8 -1
- data/lib/micro_micro/collections/items_collection.rb +84 -1
- data/lib/micro_micro/collections/properties_collection.rb +111 -0
- data/lib/micro_micro/collections/relationships_collection.rb +85 -6
- data/lib/micro_micro/document.rb +21 -103
- data/lib/micro_micro/helpers.rb +94 -0
- data/lib/micro_micro/implied_property.rb +15 -0
- data/lib/micro_micro/item.rb +93 -79
- data/lib/micro_micro/parsers/base_implied_property_parser.rb +29 -0
- data/lib/micro_micro/parsers/base_property_parser.rb +6 -12
- data/lib/micro_micro/parsers/date_time_parser.rb +61 -25
- data/lib/micro_micro/parsers/date_time_property_parser.rb +10 -6
- data/lib/micro_micro/parsers/embedded_markup_property_parser.rb +4 -2
- data/lib/micro_micro/parsers/implied_name_property_parser.rb +15 -16
- data/lib/micro_micro/parsers/implied_photo_property_parser.rb +21 -43
- data/lib/micro_micro/parsers/implied_url_property_parser.rb +12 -30
- data/lib/micro_micro/parsers/plain_text_property_parser.rb +4 -1
- data/lib/micro_micro/parsers/url_property_parser.rb +22 -12
- data/lib/micro_micro/parsers/value_class_pattern_parser.rb +29 -42
- data/lib/micro_micro/property.rb +126 -56
- data/lib/micro_micro/relationship.rb +38 -13
- data/lib/micro_micro/version.rb +3 -1
- data/lib/micromicro.rb +32 -26
- data/micromicro.gemspec +11 -6
- metadata +22 -19
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,97 +11,163 @@ module MicroMicro
|
|
7
11
|
'u' => Parsers::UrlPropertyParser
|
8
12
|
}.freeze
|
9
13
|
|
10
|
-
|
14
|
+
private_constant :PROPERTY_PARSERS_MAP
|
15
|
+
|
16
|
+
class PropertyNodeSearch
|
17
|
+
attr_reader :node_set
|
18
|
+
|
19
|
+
def initialize(document)
|
20
|
+
@node_set = Nokogiri::XML::NodeSet.new(document, [])
|
21
|
+
end
|
22
|
+
|
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)
|
11
28
|
|
12
|
-
|
29
|
+
search(context.element_children) unless Helpers.item_node?(context)
|
30
|
+
end
|
31
|
+
|
32
|
+
node_set
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private_constant :PropertyNodeSearch
|
37
|
+
|
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
|
13
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
|
64
|
+
end
|
65
|
+
|
66
|
+
# Parse a node for property data.
|
67
|
+
#
|
14
68
|
# @param node [Nokogiri::XML::Element]
|
15
|
-
# @param
|
16
|
-
#
|
17
|
-
def initialize(node,
|
69
|
+
# @param token [String] A hyphen-separated token representing a microformats2
|
70
|
+
# property value (e.g. +p-name+, +u-url+).
|
71
|
+
def initialize(node, token)
|
18
72
|
@node = node
|
19
|
-
@name =
|
20
|
-
@prefix = prefix
|
73
|
+
@prefix, @name = token.split(/-/, 2)
|
21
74
|
end
|
22
75
|
|
76
|
+
# Is this {MicroMicro::Property} a datetime property?
|
77
|
+
#
|
78
|
+
# @return [Boolean]
|
79
|
+
def date_time_property?
|
80
|
+
prefix == 'dt'
|
81
|
+
end
|
82
|
+
|
83
|
+
# Is this {MicroMicro::Property} an embedded markup property?
|
84
|
+
#
|
85
|
+
# @return [Boolean]
|
86
|
+
def embedded_markup_property?
|
87
|
+
prefix == 'e'
|
88
|
+
end
|
89
|
+
|
90
|
+
# Always return +false+ when asked if this {MicroMicro::Property} is an
|
91
|
+
# implied property.
|
92
|
+
#
|
93
|
+
# @see MicroMicro::ImpliedProperty#implied?
|
94
|
+
#
|
23
95
|
# @return [Boolean]
|
24
96
|
def implied?
|
25
97
|
false
|
26
98
|
end
|
27
99
|
|
28
100
|
# @return [String]
|
101
|
+
#
|
102
|
+
# :nocov:
|
29
103
|
def inspect
|
30
|
-
|
104
|
+
"#<#{self.class}:#{format('%#0x', object_id)} " \
|
105
|
+
"name: #{name.inspect}, " \
|
106
|
+
"prefix: #{prefix.inspect}, " \
|
107
|
+
"value: #{value.inspect}>"
|
31
108
|
end
|
109
|
+
# :nocov:
|
32
110
|
|
111
|
+
# Parse this {MicroMicro::Property}'s node as a {MicroMicro::Item}, if
|
112
|
+
# applicable.
|
113
|
+
#
|
33
114
|
# @return [MicroMicro::Item, nil]
|
34
115
|
def item
|
35
116
|
@item ||= Item.new(node) if item_node?
|
36
117
|
end
|
37
118
|
|
119
|
+
# Should this {MicroMicro::Property}'s node be parsed as a
|
120
|
+
# {MicroMicro::Item}?
|
121
|
+
#
|
122
|
+
# @see MicroMicro::Helpers.item_node?
|
123
|
+
#
|
38
124
|
# @return [Boolean]
|
39
125
|
def item_node?
|
40
|
-
@item_node ||=
|
126
|
+
@item_node ||= Helpers.item_node?(node)
|
41
127
|
end
|
42
128
|
|
43
|
-
#
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
129
|
+
# Is this {MicroMicro::Property} a plain text property?
|
130
|
+
#
|
131
|
+
# @return [Boolean]
|
132
|
+
def plain_text_property?
|
133
|
+
prefix == 'p'
|
57
134
|
end
|
58
135
|
|
136
|
+
# Is this {MicroMicro::Property} a url property?
|
137
|
+
#
|
59
138
|
# @return [Boolean]
|
60
|
-
def
|
61
|
-
|
139
|
+
def url_property?
|
140
|
+
prefix == 'u'
|
62
141
|
end
|
63
142
|
|
64
|
-
#
|
65
|
-
#
|
66
|
-
# @return [
|
67
|
-
|
68
|
-
|
143
|
+
# Return this {MicroMicro::Property}'s parsed value.
|
144
|
+
#
|
145
|
+
# @return [String, Hash]
|
146
|
+
#
|
147
|
+
# rubocop:disable Metrics
|
148
|
+
def value
|
149
|
+
@value ||=
|
150
|
+
if item_node?
|
151
|
+
hash = item.to_h
|
69
152
|
|
70
|
-
|
71
|
-
node_set << context if property_node?(context)
|
153
|
+
return hash.merge(parser.value) if embedded_markup_property?
|
72
154
|
|
73
|
-
|
74
|
-
|
155
|
+
p_property = item.properties.find { |property| property.name == 'name' } if plain_text_property?
|
156
|
+
u_property = item.properties.find { |property| property.name == 'url' } if url_property?
|
75
157
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
# @return [Array<MicroMicro::Property>]
|
81
|
-
def self.properties_from(context)
|
82
|
-
nodes_from(context).map do |node|
|
83
|
-
types_from(node).map { |prefix, name| new(node, name: name, prefix: prefix) }
|
84
|
-
end.flatten
|
158
|
+
hash.merge(value: (p_property || u_property || parser).value)
|
159
|
+
else
|
160
|
+
parser.value
|
161
|
+
end
|
85
162
|
end
|
163
|
+
# rubocop:enable Metrics
|
86
164
|
|
87
|
-
#
|
88
|
-
#
|
89
|
-
def self.property_node?(node)
|
90
|
-
types_from(node).any?
|
91
|
-
end
|
92
|
-
|
93
|
-
# @param node [Nokogiri::XML::Element]
|
94
|
-
# @return [Array<Array(String, String)>]
|
165
|
+
# Returns +true+ if this {MicroMicro::Property}'s +value+ is anything other
|
166
|
+
# than blank or +nil+.
|
95
167
|
#
|
96
|
-
# @
|
97
|
-
|
98
|
-
|
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
|
168
|
+
# @return [Boolean]
|
169
|
+
def value?
|
170
|
+
value.present?
|
101
171
|
end
|
102
172
|
|
103
173
|
private
|
@@ -1,32 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MicroMicro
|
2
4
|
class Relationship
|
3
5
|
include Collectible
|
4
6
|
|
7
|
+
# Extract {MicroMicro::Relationship}s from a context.
|
8
|
+
#
|
9
|
+
# @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
|
10
|
+
# @return [Array<MicroMicro::Relationship>]
|
11
|
+
def self.from_context(context)
|
12
|
+
context.css('[href][rel]:not([rel=""])')
|
13
|
+
.reject { |node| Helpers.ignore_nodes?(node.ancestors) }
|
14
|
+
.map { |node| new(node) }
|
15
|
+
end
|
16
|
+
|
17
|
+
# Parse a node for relationship data.
|
18
|
+
#
|
5
19
|
# @param node [Nokogiri::XML::Element]
|
20
|
+
# @return [MicroMicro::Relationship]
|
6
21
|
def initialize(node)
|
7
22
|
@node = node
|
8
23
|
end
|
9
24
|
|
25
|
+
# The value of the node's +href+ attribute.
|
26
|
+
#
|
10
27
|
# @return [String]
|
11
28
|
def href
|
12
29
|
@href ||= node['href']
|
13
30
|
end
|
14
31
|
|
32
|
+
# The value of the node's +hreflang+ attribute, if present.
|
33
|
+
#
|
15
34
|
# @return [String, nil]
|
16
35
|
def hreflang
|
17
36
|
@hreflang ||= node['hreflang']&.strip
|
18
37
|
end
|
19
38
|
|
20
39
|
# @return [String]
|
40
|
+
#
|
41
|
+
# :nocov:
|
21
42
|
def inspect
|
22
|
-
|
43
|
+
"#<#{self.class}:#{format('%#0x', object_id)} " \
|
44
|
+
"href: #{href.inspect}, " \
|
45
|
+
"rels: #{rels.inspect}>"
|
23
46
|
end
|
47
|
+
# :nocov:
|
24
48
|
|
49
|
+
# The value of the node's +media+ attribute, if present.
|
50
|
+
#
|
25
51
|
# @return [String, nil]
|
26
52
|
def media
|
27
53
|
@media ||= node['media']&.strip
|
28
54
|
end
|
29
55
|
|
56
|
+
# Return the parsed {MicroMicro::Relationship} as a Hash.
|
57
|
+
#
|
30
58
|
# @return [Hash{Symbol => String}]
|
31
59
|
def to_h
|
32
60
|
{
|
@@ -40,40 +68,37 @@ module MicroMicro
|
|
40
68
|
}.select { |_, value| value.present? }
|
41
69
|
end
|
42
70
|
|
71
|
+
# An Array of unique values from node's +rel+ attribute.
|
72
|
+
#
|
43
73
|
# @return [Array<String>]
|
44
74
|
def rels
|
45
75
|
@rels ||= node['rel'].split.uniq.sort
|
46
76
|
end
|
47
77
|
|
78
|
+
# The node's text content.
|
79
|
+
#
|
48
80
|
# @return [String]
|
49
81
|
def text
|
50
82
|
@text ||= node.text
|
51
83
|
end
|
52
84
|
|
85
|
+
# The value of the node's +title+ attribute, if present.
|
86
|
+
#
|
53
87
|
# @return [String, nil]
|
54
88
|
def title
|
55
89
|
@title ||= node['title']&.strip
|
56
90
|
end
|
57
91
|
|
92
|
+
# The value of the node's +type+ attribute, if present.
|
93
|
+
#
|
58
94
|
# @return [String, nil]
|
59
95
|
def type
|
60
96
|
@type ||= node['type']&.strip
|
61
97
|
end
|
62
98
|
|
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
99
|
private
|
76
100
|
|
101
|
+
# @return [Nokogiri::XML::Element]
|
77
102
|
attr_reader :node
|
78
103
|
end
|
79
104
|
end
|
data/lib/micro_micro/version.rb
CHANGED
data/lib/micromicro.rb
CHANGED
@@ -1,48 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'forwardable'
|
2
4
|
|
3
|
-
require 'addressable/uri'
|
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'
|
10
16
|
|
11
|
-
|
12
|
-
|
17
|
+
require_relative 'micro_micro/parsers/date_time_parser'
|
18
|
+
require_relative 'micro_micro/parsers/value_class_pattern_parser'
|
13
19
|
|
14
|
-
|
15
|
-
|
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'
|
16
25
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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'
|
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'
|
25
30
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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'
|
31
36
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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.
|
39
|
-
# Convenience method for MicroMicro::Document.new.
|
40
44
|
#
|
45
|
+
# Convenience method for {MicroMicro::Document#initialize}.
|
46
|
+
#
|
47
|
+
# @example
|
41
48
|
# MicroMicro.parse('<a href="/" class="h-card" rel="me">Jason Garber</a>', 'https://sixtwothree.org')
|
42
49
|
#
|
43
|
-
# @param
|
44
|
-
# @
|
45
|
-
# @return [MicroMicro::Document]
|
50
|
+
# @param (see MicroMicro::Document#initialize)
|
51
|
+
# @return (see MicroMicro::Document#initialize)
|
46
52
|
def self.parse(markup, base_url)
|
47
53
|
Document.new(markup, base_url)
|
48
54
|
end
|
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
|
@@ -19,10 +21,13 @@ Gem::Specification.new do |spec|
|
|
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
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: micromicro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Garber
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '7.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '7.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.13'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.13'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: nokogiri
|
42
|
+
name: nokogiri-html-ext
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.2.2
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.2.2
|
55
55
|
description: Extract microformats2-encoded data from HTML documents.
|
56
56
|
email:
|
57
57
|
- jason@sixtwothree.org
|
@@ -69,8 +69,10 @@ files:
|
|
69
69
|
- lib/micro_micro/collections/properties_collection.rb
|
70
70
|
- lib/micro_micro/collections/relationships_collection.rb
|
71
71
|
- lib/micro_micro/document.rb
|
72
|
+
- lib/micro_micro/helpers.rb
|
72
73
|
- lib/micro_micro/implied_property.rb
|
73
74
|
- lib/micro_micro/item.rb
|
75
|
+
- lib/micro_micro/parsers/base_implied_property_parser.rb
|
74
76
|
- lib/micro_micro/parsers/base_property_parser.rb
|
75
77
|
- lib/micro_micro/parsers/date_time_parser.rb
|
76
78
|
- lib/micro_micro/parsers/date_time_property_parser.rb
|
@@ -91,8 +93,9 @@ licenses:
|
|
91
93
|
- MIT
|
92
94
|
metadata:
|
93
95
|
bug_tracker_uri: https://github.com/jgarber623/micromicro/issues
|
94
|
-
changelog_uri: https://github.com/jgarber623/micromicro/blob/
|
95
|
-
|
96
|
+
changelog_uri: https://github.com/jgarber623/micromicro/blob/v3.0.0/CHANGELOG.md
|
97
|
+
rubygems_mfa_required: 'true'
|
98
|
+
post_install_message:
|
96
99
|
rdoc_options: []
|
97
100
|
require_paths:
|
98
101
|
- lib
|
@@ -100,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
103
|
requirements:
|
101
104
|
- - ">="
|
102
105
|
- !ruby/object:Gem::Version
|
103
|
-
version: '2.
|
106
|
+
version: '2.7'
|
104
107
|
- - "<"
|
105
108
|
- !ruby/object:Gem::Version
|
106
109
|
version: '4'
|
@@ -110,8 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
113
|
- !ruby/object:Gem::Version
|
111
114
|
version: '0'
|
112
115
|
requirements: []
|
113
|
-
rubygems_version: 3.
|
114
|
-
signing_key:
|
116
|
+
rubygems_version: 3.3.16
|
117
|
+
signing_key:
|
115
118
|
specification_version: 4
|
116
119
|
summary: Extract microformats2-encoded data from HTML documents.
|
117
120
|
test_files: []
|