class HTMLProofer::Attribute::Url
Constants
- REMOTE_SCHEMES
Attributes
filename[R]
size[R]
source[R]
url[R]
Public Class Methods
new(runner, link_attribute, base_url: nil, source: nil, filename: nil, extract_size: false)
click to toggle source
Calls superclass method
HTMLProofer::Attribute::new
# 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 extract_size @url = Addressable::URI.join(base_url, @url).to_s unless blank?(base_url) @url = "" if @url.nil? swap_urls! clean_url! end end
Public Instance Methods
absolute_path()
click to toggle source
# 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)
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 181 def absolute_path?(path) path.start_with?("/") end
base64?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 147 def base64? /^data:image/.match?(@raw_attribute) end
domain_path()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 110 def domain_path (host || "") + path end
exists?()
click to toggle source
checks if a file exists relative to the current pwd
# File lib/html_proofer/attribute/url.rb, line 119 def exists? return true if base64? !resolved_path.nil? end
external?()
click to toggle source
path is external to the file
# File lib/html_proofer/attribute/url.rb, line 186 def external? !internal? end
follow_location?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 177 def follow_location? @runner.options[:typhoeus] && @runner.options[:typhoeus][:followlocation] end
full_path()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 157 def full_path return if path.nil? || path.empty? base = if absolute_path?(path) # path relative to root # either overwrite with root_dir; or, if source is directory, use that; or, just get the source file's dirname @runner.options[:root_dir] || (File.directory?(@source) ? @source : File.dirname(@source)) else # path relative to the file where the link is defined File.dirname(@filename) end File.join(base, path) end
has_hash?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 212 def has_hash? url.include?("#") end
hash()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 77 def hash parts&.fragment end
hash?()
click to toggle source
Does the URL have a hash?
# File lib/html_proofer/attribute/url.rb, line 82 def hash? !blank?(hash) end
hash_link?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 208 def hash_link? url.start_with?("#") end
host()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 106 def host parts&.host end
http?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 94 def http? scheme == "http" end
https?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 98 def https? scheme == "https" end
ignore?()
click to toggle source
# 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?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 190 def internal? relative_link? || internal_absolute_link? || hash_link? end
internal_absolute_link?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 194 def internal_absolute_link? url.start_with?("/") end
known_extension?()
click to toggle source
# 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) # no extension means we use the assumed one return @runner.options[:extensions].include?(@runner.options[:assume_extension]) if blank?(ext) @runner.options[:extensions].include?(ext) end
link_points_to_same_page?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 204 def link_points_to_same_page? hash_link || param_link end
non_http_remote?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 102 def non_http_remote? !scheme.nil? && !remote? end
param_link?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 216 def param_link? url.start_with?("?") end
parts()
click to toggle source
# 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()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 73 def path Addressable::URI.unencode(parts.path) unless parts.nil? end
path?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 63 def path? !parts.host.nil? && !parts.path.nil? end
protocol_relative?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 29 def protocol_relative? url.start_with?("//") end
query_values()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 114 def query_values parts&.query_values end
relative_link?()
click to toggle source
# 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?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 90 def remote? REMOTE_SCHEMES.include?(scheme) end
resolved_path()
click to toggle source
# 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) # extensionless URLs path_with_extension = "#{path_to_resolve}#{@runner.options[:assume_extension]}" resolved = if @runner.options[:assume_extension] && File.file?(path_with_extension) path_with_extension # existence checked implicitly by File.file? # implicit index support 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) # explicit file or directory elsif File.exist?(path_to_resolve) path_to_resolve end @runner.resolved_paths[path_to_resolve] = resolved resolved end
scheme()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 86 def scheme parts&.scheme end
to_s()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 33 def to_s @url end
unknown_extension?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 49 def unknown_extension? !known_extension? end
unslashed_directory?(file)
click to toggle source
# 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?()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 59 def valid? !parts.nil? end
without_hash()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 220 def without_hash @url.to_s.sub(/##{hash}/, "") end
Private Instance Methods
clean_url!()
click to toggle source
catch any obvious issues
# File lib/html_proofer/attribute/url.rb, line 225 def clean_url! parsed_url = Addressable::URI.parse(@url) url = if parsed_url.scheme.nil? parsed_url else parsed_url.normalize end.to_s # normalize strips this off, which causes issues with cache @url = if @url.end_with?("/") && !url.end_with?("/") "#{url}/" elsif !@url.end_with?("/") && url.end_with?("/") url.chop else url end rescue Addressable::URI::InvalidURIError # rubocop:disable Lint/SuppressedException; error will be reported at check time end
ignores_pattern?(links_to_ignore)
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 252 def ignores_pattern?(links_to_ignore) return false unless links_to_ignore.is_a?(Array) links_to_ignore.each do |link_to_ignore| case link_to_ignore when String return true if link_to_ignore == @raw_attribute when Regexp return true if link_to_ignore&.match?(@raw_attribute) end end false end
swap_urls!()
click to toggle source
# File lib/html_proofer/attribute/url.rb, line 244 def swap_urls! return @url if blank?(replacements = @runner.options[:swap_urls]) replacements.each do |link, replace| @url = @url.gsub(link, replace) end end