Class: HTML::Proofer::CheckRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/html/proofer/check_runner.rb,
lib/html/proofer/check_runner/issue.rb

Overview

Mostly handles issue management and collecting of external URLs.

Direct Known Subclasses

FaviconCheck, HtmlCheck, ImageCheck, LinkCheck, ScriptCheck

Defined Under Namespace

Classes: Issue, SortedIssues

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(src, path, html, options, typhoeus_opts, hydra_opts, parallel_opts, validation_opts) ⇒ CheckRunner

Returns a new instance of CheckRunner.


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/html/proofer/check_runner.rb', line 12

def initialize(src, path, html, options, typhoeus_opts, hydra_opts, parallel_opts, validation_opts)
  @src    = src
  @path   = path
  @html   = remove_ignored(html)
  @options = options
  @typhoeus_opts = typhoeus_opts
  @hydra_opts = hydra_opts
  @parallel_opts = parallel_opts
  @validation_opts = validation_opts
  @issues = []
  @href_ignores = @options[:href_ignore]
  @url_ignores = @options[:url_ignore]
  @alt_ignores = @options[:alt_ignore]
  @empty_alt_ignore = @options[:empty_alt_ignore]
  @external_urls = {}
  @external_domain_paths_with_queries = {}
end

Instance Attribute Details

#alt_ignoresObject (readonly)

Returns the value of attribute alt_ignores


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def alt_ignores
  @alt_ignores
end

#empty_alt_ignoreObject (readonly)

Returns the value of attribute empty_alt_ignore


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def empty_alt_ignore
  @empty_alt_ignore
end

#external_urlsObject (readonly)

Returns the value of attribute external_urls


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def external_urls
  @external_urls
end

#href_ignoresObject (readonly)

Returns the value of attribute href_ignores


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def href_ignores
  @href_ignores
end

#hydra_optsObject (readonly)

Returns the value of attribute hydra_opts


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def hydra_opts
  @hydra_opts
end

#issuesObject (readonly)

Returns the value of attribute issues


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def issues
  @issues
end

#optionsObject (readonly)

Returns the value of attribute options


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def options
  @options
end

#parallel_optsObject (readonly)

Returns the value of attribute parallel_opts


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def parallel_opts
  @parallel_opts
end

#pathObject (readonly)

Returns the value of attribute path


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def path
  @path
end

#srcObject (readonly)

Returns the value of attribute src


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def src
  @src
end

#typhoeus_optsObject (readonly)

Returns the value of attribute typhoeus_opts


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def typhoeus_opts
  @typhoeus_opts
end

#url_ignoresObject (readonly)

Returns the value of attribute url_ignores


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def url_ignores
  @url_ignores
end

#validation_optsObject (readonly)

Returns the value of attribute validation_opts


8
9
10
# File 'lib/html/proofer/check_runner.rb', line 8

def validation_opts
  @validation_opts
end

Class Method Details

.checksObject


77
78
79
80
81
82
83
84
85
86
# File 'lib/html/proofer/check_runner.rb', line 77

def self.checks
  classes = []

  ObjectSpace.each_object(Class) do |c|
    next unless c.superclass == self
    classes << c
  end

  classes
end

Instance Method Details

#add_issue(desc, line_number = nil, status = -1)) ⇒ Object


34
35
36
# File 'lib/html/proofer/check_runner.rb', line 34

def add_issue(desc, line_number = nil, status = -1)
  @issues << Issue.new(@path, desc, line_number, status)
end

#add_path_for_url(url) ⇒ Object


49
50
51
52
53
54
55
# File 'lib/html/proofer/check_runner.rb', line 49

def add_path_for_url(url)
  if @external_urls[url]
    @external_urls[url] << @path
  else
    @external_urls[url] = [@path]
  end
end

#add_to_external_urls(url, line) ⇒ Object


38
39
40
41
42
43
44
45
46
47
# File 'lib/html/proofer/check_runner.rb', line 38

def add_to_external_urls(url, line)
  return if @external_urls[url]
  uri = Addressable::URI.parse(url)

  if uri.query.nil?
    add_path_for_url(url)
  else
    new_url_query_values?(uri, url)
  end
end

#extract_domain_path(uri) ⇒ Object


73
74
75
# File 'lib/html/proofer/check_runner.rb', line 73

def extract_domain_path(uri)
  uri.host + uri.path
end

#new_url_query_values?(uri, url) ⇒ Boolean

Returns:

  • (Boolean)

57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/html/proofer/check_runner.rb', line 57

def new_url_query_values?(uri, url)
  queries = uri.query_values.keys.join('-')
  domain_path = extract_domain_path(uri)
  if @external_domain_paths_with_queries[domain_path].nil?
    add_path_for_url(url)
    # remember queries we've seen, ignore future ones
    @external_domain_paths_with_queries[domain_path] = [queries]
  else
    # add queries we haven't seen
    unless @external_domain_paths_with_queries[domain_path].include?(queries)
      add_path_for_url(url)
      @external_domain_paths_with_queries[domain_path] << queries
    end
  end
end

#runObject


30
31
32
# File 'lib/html/proofer/check_runner.rb', line 30

def run
  fail NotImplementedError, 'HTML::Proofer::CheckRunner subclasses must implement #run'
end