Class: HTML::Proofer::Checkable
- Inherits:
-
Object
- Object
- HTML::Proofer::Checkable
show all
- Includes:
- Utils
- Defined in:
- lib/html/proofer/checkable.rb
Overview
Represents the superclass from which all checks derive.
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Utils
create_nokogiri, swap
Constructor Details
#initialize(obj, check) ⇒ Checkable
Returns a new instance of Checkable.
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/html/proofer/checkable.rb', line 11
def initialize(obj, check)
obj.attributes.each_pair do |attribute, value|
instance_variable_set("@#{attribute.tr('-:', '_')}".to_sym, value.value)
end
@text = obj.content
@check = check
@checked_paths = {}
@type = self.class.name
@line = obj.line
if @href && @check.options[:href_swap]
@href = swap(@href, @check.options[:href_swap])
end
@href.insert 0, 'http:' if @href =~ %r{^//}
@src.insert 0, 'http:' if @src =~ %r{^//}
end
|
Instance Attribute Details
#line ⇒ Object
Returns the value of attribute line.
9
10
11
|
# File 'lib/html/proofer/checkable.rb', line 9
def line
@line
end
|
Instance Method Details
#absolute_path ⇒ Object
131
132
133
134
|
# File 'lib/html/proofer/checkable.rb', line 131
def absolute_path
path = file_path || @check.path
File.expand_path path, Dir.pwd
end
|
#exists? ⇒ Boolean
checks if a file exists relative to the current pwd
126
127
128
129
|
# File 'lib/html/proofer/checkable.rb', line 126
def exists?
return @checked_paths[absolute_path] if @checked_paths.key? absolute_path
@checked_paths[absolute_path] = File.exist? absolute_path
end
|
#external? ⇒ Boolean
path is external to the file
93
94
95
|
# File 'lib/html/proofer/checkable.rb', line 93
def external?
!internal?
end
|
#file_path ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/html/proofer/checkable.rb', line 102
def file_path
return if path.nil?
if path =~ /^\// base = File.directory?(@check.src) ? @check.src : File.dirname(@check.src)
elsif File.exist?(File.expand_path path, @check.src) base = File.dirname @check.path
elsif File.exist?(File.join(File.dirname(@check.path), path)) base = File.dirname @check.path
else base = @check.path
end
file = File.join base, path
if File.directory?(file) && !unslashed_directory?(file)
file = File.join file, @check.options[:directory_index_file]
end
file
end
|
#follow_location? ⇒ Boolean
152
153
154
|
# File 'lib/html/proofer/checkable.rb', line 152
def follow_location?
@check.typhoeus_opts && @check.typhoeus_opts[:followlocation]
end
|
#hash ⇒ Object
49
50
51
|
# File 'lib/html/proofer/checkable.rb', line 49
def hash
parts.fragment unless parts.nil?
end
|
#ignore? ⇒ Boolean
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/html/proofer/checkable.rb', line 66
def ignore?
return true if @data_proofer_ignore
if %w(ImageCheckable FaviconCheckable).include? @type
return true if url.match(/^data:image/)
end
return true if ignores_pattern_check(@check.url_ignores)
if 'LinkCheckable' === @type
return true if ignores_pattern_check(@check.href_ignores)
end
if 'ImageCheckable' === @type
return true if ignores_pattern_check(@check.alt_ignores)
end
end
|
#ignore_empty_alt? ⇒ Boolean
88
89
90
|
# File 'lib/html/proofer/checkable.rb', line 88
def ignore_empty_alt?
@check.empty_alt_ignore
end
|
#ignores_pattern_check(links) ⇒ Object
136
137
138
139
140
141
142
143
144
145
146
|
# File 'lib/html/proofer/checkable.rb', line 136
def ignores_pattern_check(links)
links.each do |ignore|
if ignore.is_a? String
return true if ignore == url
elsif ignore.is_a? Regexp
return true if ignore =~ url
end
end
false
end
|
#internal? ⇒ Boolean
path is an anchor or a query
98
99
100
|
# File 'lib/html/proofer/checkable.rb', line 98
def internal?
url.start_with? '#', '?'
end
|
#non_http_remote? ⇒ Boolean
62
63
64
|
# File 'lib/html/proofer/checkable.rb', line 62
def non_http_remote?
!scheme.nil? && !remote?
end
|
#parts ⇒ Object
39
40
41
42
43
|
# File 'lib/html/proofer/checkable.rb', line 39
def parts
@parts ||= Addressable::URI.parse url
rescue URI::Error
@parts = nil
end
|
#path ⇒ Object
45
46
47
|
# File 'lib/html/proofer/checkable.rb', line 45
def path
Addressable::URI.unencode parts.path unless parts.nil?
end
|
#remote? ⇒ Boolean
path is to an external server
58
59
60
|
# File 'lib/html/proofer/checkable.rb', line 58
def remote?
%w( http https ).include? scheme
end
|
#scheme ⇒ Object
53
54
55
|
# File 'lib/html/proofer/checkable.rb', line 53
def scheme
parts.scheme unless parts.nil?
end
|
#unslashed_directory?(file) ⇒ Boolean
148
149
150
|
# File 'lib/html/proofer/checkable.rb', line 148
def unslashed_directory?(file)
File.directory?(file) && !file.end_with?(File::SEPARATOR) && !follow_location?
end
|
#url ⇒ Object
31
32
33
|
# File 'lib/html/proofer/checkable.rb', line 31
def url
@src || @srcset || @href || ''
end
|
#valid? ⇒ Boolean
35
36
37
|
# File 'lib/html/proofer/checkable.rb', line 35
def valid?
!parts.nil?
end
|