html-proofer 3.17.1 → 3.18.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8be1f60d1495959b468c2cfad3a4d659a5817b934bb2011906540d296e2a062
4
- data.tar.gz: 39ecb6a6899913c4745289443ff77cf1483d3578689fc616099bb00df90a4f16
3
+ metadata.gz: 60d8c8a9a9d38a05b628f3b6a852e27081ee85b7671a41bf51457f4d5f05440c
4
+ data.tar.gz: 8fb0e24b312fdae8eb37c98de0d6498035fd20e46dd71456842916d59daf642b
5
5
  SHA512:
6
- metadata.gz: ce1749adb1022b2a3245396c28b990d4de6bfe368fb5944cddf81b48822f54dff8c744b847e65bcd4cb040f2e7f63a1cbdcccebda943380ab767ecbd96161c8a
7
- data.tar.gz: 0ffc3e5095dbf40272113991b521a0909408a40715efb2119bfd8f4a310b62b6884fe2566beb198e873f781d6d0ebefed06a966a91a4772309c53835c66ce483
6
+ metadata.gz: 93dc24aec3ae4e94a4352751a41237aedf147493364cb8b40de7c25d8b9e2780969f8159d95f176fef539fe0560b3c28ae229432efdccf5dfeb878d7b765841f
7
+ data.tar.gz: caefd93da740afefb6f78c1c1e767bfaddeba2f1b7de248ea426790283a1d97785f75b33123c89d488ba36cdd3d850185400c011830a9f4e5eecd45b52ba6a2a
@@ -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
@@ -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
@@ -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
- @check.options[:root_dir] || File.dirname(@check.src)
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
@@ -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,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
- 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
+ @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
- raise @logger.colorize :fatal, "HTML-Proofer found #{failure_text}!"
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 =~ /^([!#{$&}-;=?-\[\]_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.1'
4
+ VERSION = '3.18.1'
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.1
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-22 00:00:00.000000000 Z
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.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