html-proofer 3.17.2 → 3.18.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee53fc4edb91d7319f27f79abf9c31a10761b19fdbabf25904048fd4a1f3f2b5
4
- data.tar.gz: a779feb72397f9f7b3498702ba6097437ca4162fe95e9c618df2c32df317196f
3
+ metadata.gz: 852efb42767ef8589aa2f469f06c807ab287d78da04043e5a57e4d4a7f8bf6dd
4
+ data.tar.gz: 065406c8f1a7978d025224dc4ef53137e698eaeec8f097c1375620c8d6e0c5ba
5
5
  SHA512:
6
- metadata.gz: 1caec4616e73928e36e32cedc4529b0ad4628d5ff22b0b060f14d967f9e778fbad9cfdc1b3cc22aa302ea9e7509eb3d7bbaffeacc7f95541cede0bb1c875a3fa
7
- data.tar.gz: e33a43f7e5fcbe892acf02c89950715d5b34e2d11430507ab83574126e9568a32a57a238727fa047153d7f4824baba9d62dbf2839655fd49c28ac50bb1469eea
6
+ metadata.gz: c5aabdd3e5087dd1282b4428b7105e62216b22510c1a73a9f80f1e6b2ba18906217c7aaa974b245644de2b325bef8fd3e05c61c528302fb59ce5a353da0c1d04
7
+ data.tar.gz: 7155e2eed2e31173ad7e8efe4d7ce31b2cf18fa403b560f03428e3ef8ff8f9c60654f9e1ee6a4470ff65f609fdaeeb107e0236c85610212e90b7a9535a650522
@@ -1,3 +1,4 @@
1
+ # rubocop:disable Naming/FileName
1
2
  # frozen_string_literal: true
2
3
 
3
4
  def require_all(path)
@@ -52,3 +53,4 @@ module HTMLProofer
52
53
  HTMLProofer::Runner.new(links, options)
53
54
  end
54
55
  end
56
+ # rubocop:enable Naming/FileName
@@ -26,8 +26,8 @@ module HTMLProofer
26
26
  raise NotImplementedError, 'HTMLProofer::Check subclasses must implement #run'
27
27
  end
28
28
 
29
- def add_issue(desc, line: nil, status: -1, content: nil)
30
- @issues << Issue.new(@path, desc, line: line, status: status, content: content)
29
+ def add_issue(desc, line: nil, path: nil, status: -1, content: nil)
30
+ @issues << Issue.new(path || @path, desc, line: line, status: status, content: content)
31
31
  false
32
32
  end
33
33
 
@@ -7,7 +7,7 @@ class FaviconCheck < ::HTMLProofer::Check
7
7
  favicon = create_element(node)
8
8
  next if favicon.ignore?
9
9
 
10
- found = true if favicon.rel.split(' ').last.eql? 'icon'
10
+ found = true if favicon.rel.split.last.eql? 'icon'
11
11
  break if found
12
12
  end
13
13
 
@@ -45,7 +45,7 @@ class LinkCheck < ::HTMLProofer::Check
45
45
  # intentionally here because we still want valid? & missing_href? to execute
46
46
  next if @link.non_http_remote?
47
47
 
48
- if !@link.internal? && @link.remote?
48
+ if !@link.href&.start_with?('#') && !@link.internal? && @link.remote?
49
49
  check_sri(line, content) if @link.check_sri? && node.name == 'link'
50
50
  # we need to skip these for now; although the domain main be valid,
51
51
  # curl/Typheous inaccurately return 404s for some links. cc https://git.io/vyCFx
@@ -54,7 +54,7 @@ class LinkCheck < ::HTMLProofer::Check
54
54
  add_to_external_urls(@link.href || @link.src)
55
55
  next
56
56
  elsif @link.internal?
57
- if @link.exists?
57
+ if @link.exists? || @link.hash
58
58
  add_to_internal_urls(@link.href, InternalLink.new(@link, @path, line, content))
59
59
  else
60
60
  add_issue("internally linking to #{@link.href}, which does not exist", line: line, content: content)
@@ -65,17 +65,17 @@ class LinkCheck < ::HTMLProofer::Check
65
65
  external_urls
66
66
  end
67
67
 
68
- def check_internal_link(link, line, content)
68
+ def check_internal_link(link, path, line, content)
69
69
  # does the local directory have a trailing slash?
70
70
  if link.unslashed_directory?(link.absolute_path)
71
- add_issue("internally linking to a directory #{link.absolute_path} without trailing slash", line: line, content: content)
71
+ add_issue("internally linking to a directory #{link.absolute_path} without trailing slash", path: path, line: line, content: content)
72
72
  return false
73
73
  end
74
74
 
75
- # verify the target hash
76
- return handle_hash(link, line, content) if link.hash
75
+ return true unless link.hash
77
76
 
78
- true
77
+ # verify the target hash
78
+ handle_hash(link, path, line, content)
79
79
  end
80
80
 
81
81
  def check_schemes(link, line, content)
@@ -103,9 +103,9 @@ class LinkCheck < ::HTMLProofer::Check
103
103
  add_issue("#{link.href} contains no phone number", line: line, content: content) if link.path.empty?
104
104
  end
105
105
 
106
- def handle_hash(link, line, content)
106
+ def handle_hash(link, path, line, content)
107
107
  if link.internal? && !hash_exists?(link.html, link.hash) # rubocop:disable Style/GuardClause
108
- return add_issue("linking to internal hash ##{link.hash} that does not exist", line: line, content: content)
108
+ return add_issue("linking to internal hash ##{link.hash} that does not exist", path: path, line: line, content: content)
109
109
  elsif link.external?
110
110
  return external_link_check(link, line, content)
111
111
  end
@@ -60,7 +60,7 @@ module HTMLProofer
60
60
  body = []
61
61
  result.last.each { |e| body << e }
62
62
 
63
- body = body.join('')
63
+ body = body.join
64
64
  begin
65
65
  html = body.lstrip
66
66
  rescue StandardError
@@ -147,18 +147,22 @@ module HTMLProofer
147
147
  urls_to_check = load_internal_cache
148
148
 
149
149
  urls_to_check.each_pair do |url, internal_urls|
150
- result = @internal_link_checks.check_internal_link(internal_urls.first.link, internal_urls.first.line, internal_urls.first.content)
150
+ # pulled from cache
151
+ internal_urls = @internal_urls[url] unless internal_urls.first.is_a?(LinkCheck::InternalLink)
152
+
153
+ result = @internal_link_checks.check_internal_link(internal_urls.first.link, internal_urls.first.path, internal_urls.first.line, internal_urls.first.content)
151
154
  code = result ? 200 : 404
152
155
  @cache.add(url, @internal_urls_to_paths[url].sort, code, '') # TODO: blank msg for now
153
156
  end
154
157
  @cache.write
155
158
  else
156
159
  @internal_urls.values.flatten.each do |internal_url|
157
- @internal_link_checks.check_internal_link(internal_url.link, internal_url.line, internal_url.content)
160
+ result = @internal_link_checks.check_internal_link(internal_url.link, internal_url.path, internal_url.line, internal_url.content)
161
+ next if result
162
+
163
+ @failures.concat(@internal_link_checks.issues) unless @internal_link_checks.issues.length.zero?
158
164
  end
159
165
  end
160
-
161
- @failures.concat(@internal_link_checks.issues) unless @internal_urls.length.zero?
162
166
  end
163
167
 
164
168
  def files
@@ -211,7 +215,8 @@ module HTMLProofer
211
215
  sorted_failures.sort_and_report
212
216
  count = @failures.length
213
217
  failure_text = pluralize(count, 'failure', 'failures')
214
- raise @logger.colorize :fatal, "HTML-Proofer found #{failure_text}!"
218
+ @logger.log :fatal, "\nHTML-Proofer found #{failure_text}!"
219
+ exit 1
215
220
  end
216
221
 
217
222
  # Set before_request callback.
@@ -120,7 +120,7 @@ module HTMLProofer
120
120
  def clean_url(href)
121
121
  # catch any obvious issues, like strings in port numbers
122
122
  parsed = Addressable::URI.parse(href)
123
- if href =~ /^([!#{$&}-;=?-\[\]_a-z~]|%[0-9a-fA-F]{2})+$/
123
+ if href =~ /^([!#{Regexp.last_match(0)}-;=?-\[\]_a-z~]|%[0-9a-fA-F]{2})+$/
124
124
  href
125
125
  else
126
126
  parsed.normalize
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTMLProofer
4
- VERSION = '3.17.2'
4
+ VERSION = '3.18.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-proofer
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.17.2
4
+ version: 3.18.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-23 00:00:00.000000000 Z
11
+ date: 2020-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: codecov
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: pry-byebug
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -308,7 +294,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
308
294
  - !ruby/object:Gem::Version
309
295
  version: '0'
310
296
  requirements: []
311
- rubygems_version: 3.1.2
297
+ rubygems_version: 3.1.4
312
298
  signing_key:
313
299
  specification_version: 4
314
300
  summary: A set of tests to validate your HTML output. These tests check if your image