html-proofer 3.15.1 → 3.15.2

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: 9517668b83d7e09665e775b58869aad3688ffa0edf579cb3d9e9c519ca88ceb2
4
- data.tar.gz: c63e8d6bab0e5513f95b1315cee1d0f55a6326815a70105a115d8629d97dc0a8
3
+ metadata.gz: d96b191b03d99b1d4fac61814a324dc0e46d69073318591fce74077dd484b512
4
+ data.tar.gz: 35bb1cd3d4ab1666c699b144afca8c20860db957156610a78d83f1f25154fde2
5
5
  SHA512:
6
- metadata.gz: efeffe5729c11c5bf129bf37c46388f4942158c0079fe36458d25719bb3264ef8421b54c1cafd458f41497756306de1fe0b663e903a6fec9480243f37aea3edf
7
- data.tar.gz: 69cd979675e246ba566393bae545e58205e6241d46031a69665c96d3ce84b8cce77acf622e544f238079b249a430935485a7cfd29d615c312c587e879233ba1f
6
+ metadata.gz: c1e3e8e502e52aff8e11aa917232cf288be5afcfea255b5b5bdfef61ef327e8d2899a4c394ba529fc13f6e246fa1523650d3689205f68c9f4cfd005077c4f2a4
7
+ data.tar.gz: d33bacd4efe1d0f6fee8eeb4d3491738b7d82a840e43fac77374a019319dc099e75d7e4d6440e3ed0dcba6b2c42d78178dd18351289fb2f8f4a9d32cad185353
@@ -41,6 +41,8 @@ Mercenary.program(:htmlproofer) do |p|
41
41
  p.option 'report_missing_names', '--report-missing-names', 'When `check_html` is enabled, HTML markup that are missing entity names are reported as errors (default: `false`)'
42
42
  p.option 'report_script_embeds', '--report-script-embeds', 'When `check_html` is enabled, `script` tags containing markup are reported as errors (default: `false`)'
43
43
  p.option 'report_missing_doctype', '--report-missing-doctype', 'When `check_html` is enabled, HTML markup with missing or out-of-order `DOCTYPE` are reported as errors (default: `false`)'
44
+ p.option 'report_eof_tags', '--report-eof-tags', 'When `check_html` is enabled, HTML markup with tags that are malformed are reported as errors (default: `false`)'
45
+ p.option 'report_mismatched_tags', '--report-mismatched-tags', 'When `check_html` is enabled, HTML markup with mismatched tags are reported as errors (default: `false`)'
44
46
  p.option 'log_level', '--log-level <level>', String, 'Sets the logging level, as determined by Yell. One of `:debug`, `:info`, `:warn`, `:error`, or `:fatal`. (default: `:info`)'
45
47
  p.option 'only_4xx', '--only-4xx', 'Only reports errors for links that fall within the 4xx status code range'
46
48
  p.option 'storage_dir', '--storage-dir PATH', String, 'Directory where to store the cache log (default: "tmp/.htmlproofer")'
@@ -82,6 +84,8 @@ Mercenary.program(:htmlproofer) do |p|
82
84
  options[:validation][:report_missing_names] = opts['report_missing_names'] unless opts['report_missing_names'].nil?
83
85
  options[:validation][:report_invalid_tags] = opts['report_invalid_tags'] unless opts['report_invalid_tags'].nil?
84
86
  options[:validation][:report_missing_doctype] = opts['report_missing_doctype'] unless opts['report_missing_doctype'].nil?
87
+ options[:validation][:report_eof_tags] = opts['report_eof_tags'] unless opts['report_eof_tags'].nil?
88
+ options[:validation][:report_mismatched_tags] = opts['report_mismatched_tags'] unless opts['report_mismatched_tags'].nil?
85
89
 
86
90
  options[:typhoeus] = HTMLProofer::Configuration.parse_json_option('typhoeus_config', opts['typhoeus_config']) unless opts['typhoeus_config'].nil?
87
91
 
@@ -5,10 +5,11 @@ module HTMLProofer
5
5
  class Check
6
6
  attr_reader :node, :html, :element, :src, :path, :options, :issues, :external_urls
7
7
 
8
- def initialize(src, path, html, options)
8
+ def initialize(src, path, html, logger, options)
9
9
  @src = src
10
10
  @path = path
11
11
  @html = remove_ignored(html)
12
+ @logger = logger
12
13
  @options = options
13
14
  @issues = []
14
15
  @external_urls = {}
@@ -16,7 +17,7 @@ module HTMLProofer
16
17
 
17
18
  def create_element(node)
18
19
  @node = node
19
- Element.new(node, self)
20
+ Element.new(node, self, @logger)
20
21
  end
21
22
 
22
23
  def run
@@ -6,7 +6,9 @@ class HtmlCheck < ::HTMLProofer::Check
6
6
  INVALID_TAG_MSG = /Tag ([\w\-:]+) invalid/.freeze
7
7
  INVALID_PREFIX = /Namespace prefix/.freeze
8
8
  PARSE_ENTITY_REF = /htmlParseEntityRef: no name/.freeze
9
- DOCTYPE_MSG = /The doctype must be the first token in the document/.freeze
9
+ DOCTYPE_MSG = /Expected a doctype token/.freeze
10
+ EOF_IN_TAG = /End of input in tag/.freeze
11
+ MISMATCHED_TAGS = /That tag isn't allowed here/.freeze
10
12
 
11
13
  def run
12
14
  @html.errors.each do |error|
@@ -24,6 +26,10 @@ class HtmlCheck < ::HTMLProofer::Check
24
26
  options[:validation][:report_missing_names]
25
27
  when DOCTYPE_MSG
26
28
  options[:validation][:report_missing_doctype]
29
+ when EOF_IN_TAG
30
+ options[:validation][:report_eof_tags]
31
+ when MISMATCHED_TAGS
32
+ options[:validation][:report_mismatched_tags]
27
33
  else
28
34
  true
29
35
  end
@@ -3,8 +3,8 @@
3
3
  class OpenGraphElement < ::HTMLProofer::Element
4
4
  attr_reader :src
5
5
 
6
- def initialize(obj, check)
7
- super(obj, check)
6
+ def initialize(obj, check, logger)
7
+ super(obj, check, logger)
8
8
  # Fake up src from the content attribute
9
9
  instance_variable_set('@src', @content)
10
10
 
@@ -23,7 +23,7 @@ class OpenGraphCheck < ::HTMLProofer::Check
23
23
 
24
24
  def run
25
25
  @html.css('meta[property="og:url"], meta[property="og:image"]').each do |m|
26
- @opengraph = OpenGraphElement.new(m, self)
26
+ @opengraph = OpenGraphElement.new(m, self, @logger)
27
27
 
28
28
  next if @opengraph.ignore?
29
29
 
@@ -52,7 +52,9 @@ module HTMLProofer
52
52
  report_script_embeds: false,
53
53
  report_missing_names: false,
54
54
  report_invalid_tags: false,
55
- report_missing_doctype: false
55
+ report_missing_doctype: false,
56
+ report_eof_tags: false,
57
+ report_mismatched_tags: false
56
58
  }.freeze
57
59
 
58
60
  CACHE_DEFAULTS = {}.freeze
@@ -10,12 +10,18 @@ module HTMLProofer
10
10
 
11
11
  attr_reader :id, :name, :alt, :href, :link, :src, :line, :data_proofer_ignore
12
12
 
13
- def initialize(obj, check)
13
+ def initialize(obj, check, logger)
14
+ @logger = logger
14
15
  # Construct readable ivars for every element
15
- obj.attributes.each_pair do |attribute, value|
16
- name = attribute.tr('-:.', '_').to_s.to_sym
17
- (class << self; self; end).send(:attr_reader, name)
18
- instance_variable_set("@#{name}", value.value)
16
+ begin
17
+ obj.attributes.each_pair do |attribute, value|
18
+ name = attribute.tr('-:.;', '_').to_s.to_sym
19
+ (class << self; self; end).send(:attr_reader, name)
20
+ instance_variable_set("@#{name}", value.value)
21
+ end
22
+ rescue NameError => e
23
+ @logger.log :error, "Attribute set `#{obj}` contains an error!"
24
+ raise e
19
25
  end
20
26
 
21
27
  @aria_hidden = defined?(@aria_hidden) && @aria_hidden == 'true' ? true : false
@@ -21,7 +21,8 @@ module HTMLProofer
21
21
  allow_hash_href: true,
22
22
  check_external_hash: true,
23
23
  check_html: true,
24
- url_ignore: [/.*/] # Don't try to check local files exist
24
+ url_ignore: [/.*/], # Don't try to check if local files exist
25
+ validation: { report_eof_tags: true }
25
26
  }
26
27
  end
27
28
 
@@ -100,7 +100,7 @@ module HTMLProofer
100
100
  @src.each do |src|
101
101
  checks.each do |klass|
102
102
  @logger.log :debug, "Checking #{klass.to_s.downcase} on #{path} ..."
103
- check = Object.const_get(klass).new(src, path, html, @options)
103
+ check = Object.const_get(klass).new(src, path, html, @logger, @options)
104
104
  check.run
105
105
  external_urls = check.external_urls
106
106
  external_urls = Hash[check.external_urls.map { |url, file| [swap(url, @options[:url_swap]), file] }] if @options[:url_swap]
@@ -147,6 +147,8 @@ module HTMLProofer
147
147
  def checks
148
148
  return @checks if defined?(@checks) && !@checks.nil?
149
149
 
150
+ return (@checks = ['LinkCheck']) if @type == :links
151
+
150
152
  @checks = HTMLProofer::Check.subchecks.map(&:name)
151
153
  @checks.delete('FaviconCheck') unless @options[:check_favicon]
152
154
  @checks.delete('HtmlCheck') unless @options[:check_html]
@@ -15,7 +15,7 @@ module HTMLProofer
15
15
  path
16
16
  end
17
17
 
18
- Nokogiri::HTML5(content)
18
+ Nokogiri::HTML5(content, max_errors: -1)
19
19
  end
20
20
 
21
21
  def swap(href, replacement)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTMLProofer
4
- VERSION = '3.15.1'
4
+ VERSION = '3.15.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.15.1
4
+ version: 3.15.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-01-20 00:00:00.000000000 Z
11
+ date: 2020-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -308,7 +308,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
308
308
  - !ruby/object:Gem::Version
309
309
  version: '0'
310
310
  requirements: []
311
- rubygems_version: 3.0.6
311
+ rubygems_version: 3.1.2
312
312
  signing_key:
313
313
  specification_version: 4
314
314
  summary: A set of tests to validate your HTML output. These tests check if your image