html-proofer 3.17.1 → 3.18.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/lib/html-proofer.rb +2 -0
- data/lib/html-proofer/check.rb +2 -2
- data/lib/html-proofer/check/favicon.rb +1 -1
- data/lib/html-proofer/check/links.rb +6 -6
- data/lib/html-proofer/element.rb +4 -1
- data/lib/html-proofer/middleware.rb +1 -1
- data/lib/html-proofer/runner.rb +7 -3
- data/lib/html-proofer/url_validator.rb +1 -1
- data/lib/html-proofer/version.rb +1 -1
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60d8c8a9a9d38a05b628f3b6a852e27081ee85b7671a41bf51457f4d5f05440c
|
4
|
+
data.tar.gz: 8fb0e24b312fdae8eb37c98de0d6498035fd20e46dd71456842916d59daf642b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93dc24aec3ae4e94a4352751a41237aedf147493364cb8b40de7c25d8b9e2780969f8159d95f176fef539fe0560b3c28ae229432efdccf5dfeb878d7b765841f
|
7
|
+
data.tar.gz: caefd93da740afefb6f78c1c1e767bfaddeba2f1b7de248ea426790283a1d97785f75b33123c89d488ba36cdd3d850185400c011830a9f4e5eecd45b52ba6a2a
|
data/lib/html-proofer.rb
CHANGED
data/lib/html-proofer/check.rb
CHANGED
@@ -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
|
|
@@ -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
|
@@ -65,15 +65,15 @@ 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
75
|
# verify the target hash
|
76
|
-
return handle_hash(link, line, content) if link.hash
|
76
|
+
return handle_hash(link, path, line, content) if link.hash
|
77
77
|
|
78
78
|
true
|
79
79
|
end
|
@@ -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
|
data/lib/html-proofer/element.rb
CHANGED
@@ -181,7 +181,8 @@ module HTMLProofer
|
|
181
181
|
path_dot_ext = path + @check.options[:extension] if @check.options[:assume_extension]
|
182
182
|
|
183
183
|
base = if absolute_path?(path) # path relative to root
|
184
|
-
|
184
|
+
# either overwrite with root_dir; or, if source is directory, use that; or, just get the current file's dirname
|
185
|
+
@check.options[:root_dir] || (File.directory?(@check.src) ? @check.src : File.dirname(@check.src))
|
185
186
|
elsif File.exist?(File.expand_path(path, @check.src)) || File.exist?(File.expand_path(path_dot_ext, @check.src)) # relative links, path is a file
|
186
187
|
File.dirname(@check.path)
|
187
188
|
elsif File.exist?(File.join(File.dirname(@check.path), path)) || File.exist?(File.join(File.dirname(@check.path), path_dot_ext)) # rubocop:disable Lint/DuplicateBranch; relative links in nested dir, path is a file
|
@@ -189,7 +190,9 @@ module HTMLProofer
|
|
189
190
|
else # relative link, path is a directory
|
190
191
|
@check.path
|
191
192
|
end
|
193
|
+
|
192
194
|
file = File.join(base, path)
|
195
|
+
|
193
196
|
if @check.options[:assume_extension] && File.file?("#{file}#{@check.options[:extension]}")
|
194
197
|
file = "#{file}#{@check.options[:extension]}"
|
195
198
|
elsif File.directory?(file) && !unslashed_directory?(file) # implicit index support
|
data/lib/html-proofer/runner.rb
CHANGED
@@ -147,14 +147,17 @@ module HTMLProofer
|
|
147
147
|
urls_to_check = load_internal_cache
|
148
148
|
|
149
149
|
urls_to_check.each_pair do |url, internal_urls|
|
150
|
-
|
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
|
+
@internal_link_checks.check_internal_link(internal_url.link, internal_url.path, internal_url.line, internal_url.content)
|
158
161
|
end
|
159
162
|
end
|
160
163
|
|
@@ -211,7 +214,8 @@ module HTMLProofer
|
|
211
214
|
sorted_failures.sort_and_report
|
212
215
|
count = @failures.length
|
213
216
|
failure_text = pluralize(count, 'failure', 'failures')
|
214
|
-
|
217
|
+
@logger.log :fatal, "\nHTML-Proofer found #{failure_text}!"
|
218
|
+
exit 1
|
215
219
|
end
|
216
220
|
|
217
221
|
# 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 =~ /^([!#{
|
123
|
+
if href =~ /^([!#{Regexp.last_match(0)}-;=?-\[\]_a-z~]|%[0-9a-fA-F]{2})+$/
|
124
124
|
href
|
125
125
|
else
|
126
126
|
parsed.normalize
|
data/lib/html-proofer/version.rb
CHANGED
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.
|
4
|
+
version: 3.18.1
|
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
|
+
date: 2020-12-16 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.
|
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
|