Class: HTMLProofer::Attribute::Url
Constant Summary
collapse
- REMOTE_SCHEMES =
["http", "https"].freeze
Instance Attribute Summary collapse
#raw_attribute
Instance Method Summary
collapse
Methods included from Utils
#blank?, #create_nokogiri, #pluralize
Constructor Details
#initialize(runner, link_attribute, base_url: nil, source: nil, filename: nil, extract_size: false) ⇒ Url
Returns a new instance of Url.
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/html_proofer/attribute/url.rb', line 10
def initialize(runner, link_attribute, base_url: nil, source: nil, filename: nil, extract_size: false)
super
@source = source
@filename = filename
if @raw_attribute.nil?
@url = nil
else
@url = @raw_attribute.delete("\u200b").strip
@url, @size = @url.split(/\s+/) if
@url = Addressable::URI.join(base_url, @url).to_s unless blank?(base_url)
@url = "" if @url.nil?
swap_urls!
clean_url!
end
end
|
Instance Attribute Details
#filename ⇒ Object
Returns the value of attribute filename.
6
7
8
|
# File 'lib/html_proofer/attribute/url.rb', line 6
def filename
@filename
end
|
#size ⇒ Object
Returns the value of attribute size.
6
7
8
|
# File 'lib/html_proofer/attribute/url.rb', line 6
def size
@size
end
|
#source ⇒ Object
Returns the value of attribute source.
6
7
8
|
# File 'lib/html_proofer/attribute/url.rb', line 6
def source
@source
end
|
#url ⇒ Object
Returns the value of attribute url.
6
7
8
|
# File 'lib/html_proofer/attribute/url.rb', line 6
def url
@url
end
|
Instance Method Details
#absolute_path ⇒ Object
151
152
153
154
155
|
# File 'lib/html_proofer/attribute/url.rb', line 151
def absolute_path
path = full_path || @filename
File.expand_path(path, Dir.pwd)
end
|
#absolute_path?(path) ⇒ Boolean
181
182
183
|
# File 'lib/html_proofer/attribute/url.rb', line 181
def absolute_path?(path)
path.start_with?("/")
end
|
#base64? ⇒ Boolean
147
148
149
|
# File 'lib/html_proofer/attribute/url.rb', line 147
def base64?
/^data:image/.match?(@raw_attribute)
end
|
#domain_path ⇒ Object
110
111
112
|
# File 'lib/html_proofer/attribute/url.rb', line 110
def domain_path
(host || "") + path
end
|
#exists? ⇒ Boolean
checks if a file exists relative to the current pwd
119
120
121
122
123
|
# File 'lib/html_proofer/attribute/url.rb', line 119
def exists?
return true if base64?
!resolved_path.nil?
end
|
#external? ⇒ Boolean
path is external to the file
186
187
188
|
# File 'lib/html_proofer/attribute/url.rb', line 186
def external?
!internal?
end
|
#follow_location? ⇒ Boolean
177
178
179
|
# File 'lib/html_proofer/attribute/url.rb', line 177
def follow_location?
@runner.options[:typhoeus] && @runner.options[:typhoeus][:followlocation]
end
|
#full_path ⇒ Object
157
158
159
160
161
162
163
164
165
166
167
168
169
|
# File 'lib/html_proofer/attribute/url.rb', line 157
def full_path
return if path.nil? || path.empty?
base = if absolute_path?(path) @runner.options[:root_dir] || (File.directory?(@source) ? @source : File.dirname(@source))
else
File.dirname(@filename)
end
File.join(base, path)
end
|
#has_hash? ⇒ Boolean
212
213
214
|
# File 'lib/html_proofer/attribute/url.rb', line 212
def has_hash?
url.include?("#")
end
|
#hash ⇒ Object
77
78
79
|
# File 'lib/html_proofer/attribute/url.rb', line 77
def hash
parts&.fragment
end
|
#hash? ⇒ Boolean
Does the URL have a hash?
82
83
84
|
# File 'lib/html_proofer/attribute/url.rb', line 82
def hash?
!blank?(hash)
end
|
#hash_link? ⇒ Boolean
208
209
210
|
# File 'lib/html_proofer/attribute/url.rb', line 208
def hash_link?
url.start_with?("#")
end
|
#host ⇒ Object
106
107
108
|
# File 'lib/html_proofer/attribute/url.rb', line 106
def host
parts&.host
end
|
#http? ⇒ Boolean
94
95
96
|
# File 'lib/html_proofer/attribute/url.rb', line 94
def http?
scheme == "http"
end
|
#https? ⇒ Boolean
98
99
100
|
# File 'lib/html_proofer/attribute/url.rb', line 98
def https?
scheme == "https"
end
|
#ignore? ⇒ Boolean
53
54
55
56
57
|
# File 'lib/html_proofer/attribute/url.rb', line 53
def ignore?
return true if /^javascript:/.match?(@url)
true if ignores_pattern?(@runner.options[:ignore_urls])
end
|
#internal? ⇒ Boolean
190
191
192
|
# File 'lib/html_proofer/attribute/url.rb', line 190
def internal?
relative_link? || internal_absolute_link? || hash_link?
end
|
#internal_absolute_link? ⇒ Boolean
194
195
196
|
# File 'lib/html_proofer/attribute/url.rb', line 194
def internal_absolute_link?
url.start_with?("/")
end
|
#known_extension? ⇒ Boolean
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/html_proofer/attribute/url.rb', line 37
def known_extension?
return true if hash_link?
return true if path.end_with?("/")
ext = File.extname(path)
return @runner.options[:extensions].include?(@runner.options[:assume_extension]) if blank?(ext)
@runner.options[:extensions].include?(ext)
end
|
#link_points_to_same_page? ⇒ Boolean
204
205
206
|
# File 'lib/html_proofer/attribute/url.rb', line 204
def link_points_to_same_page?
hash_link || param_link
end
|
#non_http_remote? ⇒ Boolean
102
103
104
|
# File 'lib/html_proofer/attribute/url.rb', line 102
def non_http_remote?
!scheme.nil? && !remote?
end
|
#param_link? ⇒ Boolean
216
217
218
|
# File 'lib/html_proofer/attribute/url.rb', line 216
def param_link?
url.start_with?("?")
end
|
#parts ⇒ Object
67
68
69
70
71
|
# File 'lib/html_proofer/attribute/url.rb', line 67
def parts
@parts ||= Addressable::URI.parse(@url)
rescue URI::Error, Addressable::URI::InvalidURIError
@parts = nil
end
|
#path ⇒ Object
73
74
75
|
# File 'lib/html_proofer/attribute/url.rb', line 73
def path
Addressable::URI.unencode(parts.path) unless parts.nil?
end
|
#path? ⇒ Boolean
63
64
65
|
# File 'lib/html_proofer/attribute/url.rb', line 63
def path?
!parts.host.nil? && !parts.path.nil?
end
|
#protocol_relative? ⇒ Boolean
29
30
31
|
# File 'lib/html_proofer/attribute/url.rb', line 29
def protocol_relative?
url.start_with?("//")
end
|
#query_values ⇒ Object
114
115
116
|
# File 'lib/html_proofer/attribute/url.rb', line 114
def query_values
parts&.query_values
end
|
#relative_link? ⇒ Boolean
198
199
200
201
202
|
# File 'lib/html_proofer/attribute/url.rb', line 198
def relative_link?
return false if remote?
hash_link? || param_link? || url.start_with?(".") || url =~ /^\S/
end
|
#remote? ⇒ Boolean
90
91
92
|
# File 'lib/html_proofer/attribute/url.rb', line 90
def remote?
REMOTE_SCHEMES.include?(scheme)
end
|
#resolved_path ⇒ Object
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/html_proofer/attribute/url.rb', line 125
def resolved_path
path_to_resolve = absolute_path
return @runner.resolved_paths[path_to_resolve] if @runner.resolved_paths.key?(path_to_resolve)
path_with_extension = "#{path_to_resolve}#{@runner.options[:assume_extension]}"
resolved = if @runner.options[:assume_extension] && File.file?(path_with_extension)
path_with_extension elsif File.directory?(path_to_resolve) && !unslashed_directory?(path_to_resolve)
path_with_index = File.join(path_to_resolve, @runner.options[:directory_index_file])
path_with_index if File.file?(path_with_index)
elsif File.exist?(path_to_resolve)
path_to_resolve
end
@runner.resolved_paths[path_to_resolve] = resolved
resolved
end
|
#scheme ⇒ Object
86
87
88
|
# File 'lib/html_proofer/attribute/url.rb', line 86
def scheme
parts&.scheme
end
|
#to_s ⇒ Object
33
34
35
|
# File 'lib/html_proofer/attribute/url.rb', line 33
def to_s
@url
end
|
#unknown_extension? ⇒ Boolean
49
50
51
|
# File 'lib/html_proofer/attribute/url.rb', line 49
def unknown_extension?
!known_extension?
end
|
#unslashed_directory?(file) ⇒ Boolean
171
172
173
174
175
|
# File 'lib/html_proofer/attribute/url.rb', line 171
def unslashed_directory?(file)
return false unless File.directory?(file)
!file.end_with?(File::SEPARATOR) && !follow_location?
end
|
#valid? ⇒ Boolean
59
60
61
|
# File 'lib/html_proofer/attribute/url.rb', line 59
def valid?
!parts.nil?
end
|
#without_hash ⇒ Object
220
221
222
|
# File 'lib/html_proofer/attribute/url.rb', line 220
def without_hash
@url.to_s.sub(/##{hash}/, "")
end
|