micromicro 0.1.0 → 2.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +37 -0
  3. data/CONTRIBUTING.md +2 -2
  4. data/README.md +65 -29
  5. data/lib/micro_micro/collectible.rb +15 -0
  6. data/lib/micro_micro/collections/base_collection.rb +18 -13
  7. data/lib/micro_micro/collections/items_collection.rb +7 -0
  8. data/lib/micro_micro/collections/properties_collection.rb +20 -6
  9. data/lib/micro_micro/collections/relationships_collection.rb +33 -0
  10. data/lib/micro_micro/document.rb +36 -44
  11. data/lib/micro_micro/helpers.rb +82 -0
  12. data/lib/micro_micro/implied_property.rb +2 -0
  13. data/lib/micro_micro/item.rb +78 -52
  14. data/lib/micro_micro/parsers/base_implied_property_parser.rb +29 -0
  15. data/lib/micro_micro/parsers/base_property_parser.rb +9 -14
  16. data/lib/micro_micro/parsers/date_time_parser.rb +60 -31
  17. data/lib/micro_micro/parsers/date_time_property_parser.rb +20 -29
  18. data/lib/micro_micro/parsers/embedded_markup_property_parser.rb +7 -17
  19. data/lib/micro_micro/parsers/implied_name_property_parser.rb +17 -58
  20. data/lib/micro_micro/parsers/implied_photo_property_parser.rb +23 -51
  21. data/lib/micro_micro/parsers/implied_url_property_parser.rb +13 -42
  22. data/lib/micro_micro/parsers/plain_text_property_parser.rb +11 -18
  23. data/lib/micro_micro/parsers/url_property_parser.rb +29 -37
  24. data/lib/micro_micro/parsers/value_class_pattern_parser.rb +29 -55
  25. data/lib/micro_micro/property.rb +73 -68
  26. data/lib/micro_micro/{relation.rb → relationship.rb} +19 -16
  27. data/lib/micro_micro/version.rb +3 -1
  28. data/lib/micromicro.rb +37 -22
  29. data/micromicro.gemspec +14 -9
  30. metadata +23 -31
  31. data/.editorconfig +0 -14
  32. data/.gitignore +0 -34
  33. data/.gitmodules +0 -3
  34. data/.reek.yml +0 -8
  35. data/.rspec +0 -2
  36. data/.rubocop +0 -3
  37. data/.rubocop.yml +0 -25
  38. data/.ruby-version +0 -1
  39. data/.simplecov +0 -11
  40. data/.travis.yml +0 -19
  41. data/Gemfile +0 -14
  42. data/Rakefile +0 -18
  43. data/lib/micro_micro/collections/relations_collection.rb +0 -23
@@ -1,5 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MicroMicro
2
- class Relation
4
+ class Relationship
5
+ include Collectible
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
+
3
15
  # @param node [Nokogiri::XML::Element]
4
16
  def initialize(node)
5
17
  @node = node
@@ -7,7 +19,7 @@ module MicroMicro
7
19
 
8
20
  # @return [String]
9
21
  def href
10
- @href ||= Absolutely.to_abs(base: node.document.url, relative: node['href'].strip)
22
+ @href ||= node['href']
11
23
  end
12
24
 
13
25
  # @return [String, nil]
@@ -15,11 +27,14 @@ module MicroMicro
15
27
  @hreflang ||= node['hreflang']&.strip
16
28
  end
17
29
 
30
+ # :nocov:
18
31
  # @return [String]
19
32
  def inspect
20
- format(%(#<#{self.class.name}:%#0x href: #{href.inspect}, rels: #{rels.inspect}>), object_id)
21
- # format(%(#<#{self.class.name}:%#0x rels: #{rels}>), object_id)
33
+ "#<#{self.class}:#{format('%#0x', object_id)} " \
34
+ "href: #{href.inspect}, " \
35
+ "rels: #{rels.inspect}>"
22
36
  end
37
+ # :nocov:
23
38
 
24
39
  # @return [String, nil]
25
40
  def media
@@ -59,18 +74,6 @@ module MicroMicro
59
74
  @type ||= node['type']&.strip
60
75
  end
61
76
 
62
- # @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
63
- # @return [Nokogiri::XML::NodeSet]
64
- def self.nodes_from(context)
65
- context.css('[href][rel]:not([rel=""])').reject { |node| (node.ancestors.map(&:name) & Document.ignored_node_names).any? }
66
- end
67
-
68
- # @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
69
- # @return [Array<MicroMicro::Relation>]
70
- def self.relations_from(context)
71
- nodes_from(context).map { |node| new(node) }
72
- end
73
-
74
77
  private
75
78
 
76
79
  attr_reader :node
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MicroMicro
2
- VERSION = '0.1.0'.freeze
4
+ VERSION = '2.0.0'
3
5
  end
data/lib/micromicro.rb CHANGED
@@ -1,38 +1,53 @@
1
- require 'absolutely'
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
2
5
  require 'active_support/core_ext/array/grouping'
3
6
  require 'active_support/core_ext/hash/deep_transform_values'
4
7
  require 'active_support/core_ext/hash/keys'
5
8
  require 'active_support/core_ext/hash/slice'
6
- require 'active_support/core_ext/module/delegation'
7
9
  require 'active_support/core_ext/object/blank'
8
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'
9
16
 
10
- require 'micro_micro/version'
17
+ require_relative 'micro_micro/parsers/date_time_parser'
18
+ require_relative 'micro_micro/parsers/value_class_pattern_parser'
11
19
 
12
- require 'micro_micro/parsers/date_time_parser'
13
- require 'micro_micro/parsers/value_class_pattern_parser'
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'
14
25
 
15
- require 'micro_micro/parsers/base_property_parser'
16
- require 'micro_micro/parsers/date_time_property_parser'
17
- require 'micro_micro/parsers/embedded_markup_property_parser'
18
- require 'micro_micro/parsers/implied_name_property_parser'
19
- require 'micro_micro/parsers/implied_photo_property_parser'
20
- require 'micro_micro/parsers/implied_url_property_parser'
21
- require 'micro_micro/parsers/plain_text_property_parser'
22
- 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'
23
30
 
24
- require 'micro_micro/document'
25
- require 'micro_micro/item'
26
- require 'micro_micro/property'
27
- require 'micro_micro/implied_property'
28
- require 'micro_micro/relation'
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'
29
36
 
30
- require 'micro_micro/collections/base_collection'
31
- require 'micro_micro/collections/items_collection'
32
- require 'micro_micro/collections/properties_collection'
33
- require 'micro_micro/collections/relations_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'
34
41
 
35
42
  module MicroMicro
43
+ # Parse a string of HTML for microformats2-encoded data.
44
+ # Convenience method for MicroMicro::Document.new.
45
+ #
46
+ # MicroMicro.parse('<a href="/" class="h-card" rel="me">Jason Garber</a>', 'https://sixtwothree.org')
47
+ #
48
+ # @param markup [String] The HTML to parse for microformats2-encoded data.
49
+ # @param base_url [String] The URL associated with markup. Used for relative URL resolution.
50
+ # @return [MicroMicro::Document]
36
51
  def self.parse(markup, base_url)
37
52
  Document.new(markup, base_url)
38
53
  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 = Gem::Requirement.new('>= 2.5', '< 2.8')
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.chdir(File.expand_path(__dir__)) do
17
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(bin|spec)/}) }
18
- end
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['bug_tracker_uri'] = "#{spec.homepage}/issues"
23
- spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md"
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 'absolutely', '~> 3.1'
26
- spec.add_runtime_dependency 'activesupport', '~> 6.0'
27
- spec.add_runtime_dependency 'nokogiri', '~> 1.10'
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.0'
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: 0.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Garber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-07 00:00:00.000000000 Z
11
+ date: 2022-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: absolutely
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.1'
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: '3.1'
26
+ version: '7.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '6.0'
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: '6.0'
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: '1.10'
47
+ version: 0.2.0
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: '1.10'
54
+ version: 0.2.0
55
55
  description: Extract microformats2-encoded data from HTML documents.
56
56
  email:
57
57
  - jason@sixtwothree.org
@@ -59,29 +59,20 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - ".editorconfig"
63
- - ".gitignore"
64
- - ".gitmodules"
65
- - ".reek.yml"
66
- - ".rspec"
67
- - ".rubocop"
68
- - ".rubocop.yml"
69
- - ".ruby-version"
70
- - ".simplecov"
71
- - ".travis.yml"
72
62
  - CHANGELOG.md
73
63
  - CONTRIBUTING.md
74
- - Gemfile
75
64
  - LICENSE
76
65
  - README.md
77
- - Rakefile
66
+ - lib/micro_micro/collectible.rb
78
67
  - lib/micro_micro/collections/base_collection.rb
79
68
  - lib/micro_micro/collections/items_collection.rb
80
69
  - lib/micro_micro/collections/properties_collection.rb
81
- - lib/micro_micro/collections/relations_collection.rb
70
+ - lib/micro_micro/collections/relationships_collection.rb
82
71
  - lib/micro_micro/document.rb
72
+ - lib/micro_micro/helpers.rb
83
73
  - lib/micro_micro/implied_property.rb
84
74
  - lib/micro_micro/item.rb
75
+ - lib/micro_micro/parsers/base_implied_property_parser.rb
85
76
  - lib/micro_micro/parsers/base_property_parser.rb
86
77
  - lib/micro_micro/parsers/date_time_parser.rb
87
78
  - lib/micro_micro/parsers/date_time_property_parser.rb
@@ -93,7 +84,7 @@ files:
93
84
  - lib/micro_micro/parsers/url_property_parser.rb
94
85
  - lib/micro_micro/parsers/value_class_pattern_parser.rb
95
86
  - lib/micro_micro/property.rb
96
- - lib/micro_micro/relation.rb
87
+ - lib/micro_micro/relationship.rb
97
88
  - lib/micro_micro/version.rb
98
89
  - lib/micromicro.rb
99
90
  - micromicro.gemspec
@@ -102,7 +93,8 @@ licenses:
102
93
  - MIT
103
94
  metadata:
104
95
  bug_tracker_uri: https://github.com/jgarber623/micromicro/issues
105
- changelog_uri: https://github.com/jgarber623/micromicro/blob/v0.1.0/CHANGELOG.md
96
+ changelog_uri: https://github.com/jgarber623/micromicro/blob/v2.0.0/CHANGELOG.md
97
+ rubygems_mfa_required: 'true'
106
98
  post_install_message:
107
99
  rdoc_options: []
108
100
  require_paths:
@@ -111,17 +103,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
103
  requirements:
112
104
  - - ">="
113
105
  - !ruby/object:Gem::Version
114
- version: '2.5'
106
+ version: '2.7'
115
107
  - - "<"
116
108
  - !ruby/object:Gem::Version
117
- version: '2.8'
109
+ version: '4'
118
110
  required_rubygems_version: !ruby/object:Gem::Requirement
119
111
  requirements:
120
112
  - - ">="
121
113
  - !ruby/object:Gem::Version
122
114
  version: '0'
123
115
  requirements: []
124
- rubygems_version: 3.1.2
116
+ rubygems_version: 3.3.16
125
117
  signing_key:
126
118
  specification_version: 4
127
119
  summary: Extract microformats2-encoded data from HTML documents.
data/.editorconfig DELETED
@@ -1,14 +0,0 @@
1
- # EditorConfig is awesome: https://EditorConfig.org
2
- root = true
3
-
4
- [*]
5
- charset = utf-8
6
- end_of_line = lf
7
- insert_final_newline = true
8
- indent_size = 2
9
- indent_style = space
10
- trim_trailing_whitespace = true
11
-
12
- [*.md]
13
- indent_size = 4
14
- indent_style = tab
data/.gitignore DELETED
@@ -1,34 +0,0 @@
1
- *.gem
2
- *.rbc
3
- /.config
4
- /coverage/
5
- /InstalledFiles
6
- /pkg/
7
- /spec/reports/
8
- /spec/examples.txt
9
- /test/tmp/
10
- /test/version_tmp/
11
- /tmp/
12
-
13
- # Used by dotenv library to load environment variables.
14
- # .env
15
-
16
- # Documentation cache and generated files:
17
- /.yardoc/
18
- /_yardoc/
19
- /doc/
20
- /rdoc/
21
-
22
- # Environment normalization:
23
- /.bundle/
24
- /vendor/bundle
25
- /lib/bundler/man/
26
-
27
- # for a library or gem, you might want to ignore these files since the code is
28
- # intended to run in multiple environments; otherwise, check them in:
29
- Gemfile.lock
30
- # .ruby-version
31
- # .ruby-gemset
32
-
33
- # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
- .rvmrc
data/.gitmodules DELETED
@@ -1,3 +0,0 @@
1
- [submodule "microformats_test_suite"]
2
- path = spec/support/fixtures/microformats_test_suite
3
- url = https://github.com/jgarber623/microformats-test-suite
data/.reek.yml DELETED
@@ -1,8 +0,0 @@
1
- detectors:
2
- DuplicateMethodCall:
3
- max_calls: 3
4
- IrresponsibleModule:
5
- enabled: false
6
-
7
- exclude_paths:
8
- - vendor/
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --order random
2
- --require spec_helper
data/.rubocop DELETED
@@ -1,3 +0,0 @@
1
- --display-style-guide
2
- --extra-details
3
- --parallel
data/.rubocop.yml DELETED
@@ -1,25 +0,0 @@
1
- require:
2
- - rubocop-performance
3
- - rubocop-rspec
4
-
5
- AllCops:
6
- NewCops: enable
7
-
8
- Layout/HashAlignment:
9
- EnforcedHashRocketStyle: table
10
-
11
- Layout/LineLength:
12
- Enabled: false
13
-
14
- Metrics/BlockLength:
15
- Exclude:
16
- - spec/**/*.rb
17
-
18
- Style/Documentation:
19
- Enabled: false
20
-
21
- Style/FrozenStringLiteralComment:
22
- Enabled: false
23
-
24
- Style/SymbolArray:
25
- Enabled: false
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.5.8
data/.simplecov DELETED
@@ -1,11 +0,0 @@
1
- require 'simplecov-console'
2
-
3
- formatters = [SimpleCov::Formatter::HTMLFormatter]
4
-
5
- if RSpec.configuration.files_to_run.length > 1
6
- formatters << SimpleCov::Formatter::Console
7
- end
8
-
9
- SimpleCov.start do
10
- formatter SimpleCov::Formatter::MultiFormatter.new(formatters)
11
- end
data/.travis.yml DELETED
@@ -1,19 +0,0 @@
1
- dist: bionic
2
- language: ruby
3
- rvm:
4
- - 2.5
5
- - 2.6
6
- - 2.7
7
- cache:
8
- - bundler
9
- before_script:
10
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
11
- - chmod +x ./cc-test-reporter
12
- - ./cc-test-reporter before-build
13
- after_script:
14
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
15
- notifications:
16
- email: false
17
- slack:
18
- rooms:
19
- secure: JmMccxJmz97LtzKLPd+Hp1MeRUKL8kscN2A2CPyEyRJC7u/U+41SHtXkojR4OpQDoCsP3MexhqoJ/Fu1eLDxZ3e1B7PFrwKCfSQc8YZhLYfE0B9Tfy4M+LBQkgoLwsUHP2Vxyho0iZ1knL+070EJQlEpTox+9N8eTfOX6SOpiNLDHTRd4217yI7faog790OYGKTbOCRj5fo+kPAeN8NrEZavjx6QeWBcJ/wRv6O2V6dhrnqOho2ktSj14/yeNsVoYc4Ondk5Hy/zSCPRjvqFO9wI2mC6l7u9W0ffy09trvkXTTmPQeCbzFKgybHSKpmxCE6frFOSkO+aBVGJ/p4hxej5001nzZrCfZF3MBEKQwAFHBLX6hIIbCOZmR915vl+8NGPkCy4o8W/BlRWKtVWIbDCk8sxf+WbIHLkSsfBBGHmABxQXvDS3ejKh+Rm35ejdrak2jWg/cxYHBbZDHBNPjLHbYzfziMSlNgbQ3V9fVfpNC1AI7jXNSgOsuX6Uv5dvTk40Wa4xEiNOkEtLMn55exnrxoJ+B68aZPvA/71/rvHKPyjgBNxu7Zb+5mrVHja+DNTdotomWdzfmILn2CV1xvfhQAFmph4lagiRHqpLXATJ6N0907tNILJUzbvMPONVbcyQlx1UHnbiezagjQ+dwoOyjof184M8jECba7zXzs=
data/Gemfile DELETED
@@ -1,14 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in micromicro.gemspec
4
- gemspec
5
-
6
- gem 'pry-byebug', '~> 3.9'
7
- gem 'rake', '~> 13.0'
8
- gem 'reek', '~> 6.0'
9
- gem 'rspec', '~> 3.9'
10
- gem 'rubocop', '~> 0.82.0'
11
- gem 'rubocop-performance', '~> 1.5'
12
- gem 'rubocop-rspec', '~> 1.38'
13
- gem 'simplecov', '~> 0.18.5'
14
- gem 'simplecov-console', '~> 0.7.2'
data/Rakefile DELETED
@@ -1,18 +0,0 @@
1
- require 'bundler/gem_tasks'
2
-
3
- require 'reek/rake/task'
4
- require 'rspec/core/rake_task'
5
- require 'rubocop/rake_task'
6
-
7
- Reek::Rake::Task.new do |task|
8
- task.fail_on_error = false
9
- task.source_files = FileList['**/*.rb'].exclude('vendor/**/*.rb')
10
- end
11
-
12
- RSpec::Core::RakeTask.new
13
-
14
- RuboCop::RakeTask.new do |task|
15
- task.fail_on_error = false
16
- end
17
-
18
- task default: [:rubocop, :reek, :spec]
@@ -1,23 +0,0 @@
1
- module MicroMicro
2
- module Collections
3
- class RelationsCollection < BaseCollection
4
- # @see microformats2 Parsing Specification section 1.4
5
- # @see http://microformats.org/wiki/microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats
6
- #
7
- # @return [Hash{Symbole => Hash{Symbol => Array, String}}]
8
- def group_by_url
9
- group_by(&:href).symbolize_keys.transform_values { |relations| relations.first.to_h.slice!(:href) }
10
- end
11
-
12
- # @see microformats2 Parsing Specification section 1.4
13
- # @see http://microformats.org/wiki/microformats2-parsing#parse_a_hyperlink_element_for_rel_microformats
14
- #
15
- # @return [Hash{Symbol => Array<String>}]
16
- def group_by_rel
17
- each_with_object(Hash.new { |hash, key| hash[key] = [] }) do |member, hash|
18
- member.rels.each { |rel| hash[rel] << member.href }
19
- end.symbolize_keys.transform_values(&:uniq)
20
- end
21
- end
22
- end
23
- end