1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
# frozen_string_literal: true
module HTMLProofer
class Check
class OpenGraph < HTMLProofer::Check
def run
@html.css('meta[property="og:url"], meta[property="og:image"]').each do |node|
@open_graph = create_element(node)
next if @open_graph.ignore?
# does the open_graph exist?
if missing_content?
add_failure("open graph has no content attribute", element: @open_graph)
elsif empty_content?
add_failure("open graph content attribute is empty", element: @open_graph)
elsif !@open_graph.url.valid?
add_failure("#{@open_graph.src} is an invalid URL", element: @open_graph)
elsif @open_graph.url.protocol_relative?
add_failure(
"open graph link #{@open_graph.url} is a protocol-relative URL, use explicit https:// instead",
element: @open_graph,
)
elsif @open_graph.url.remote?
add_to_external_urls(@open_graph.url, @open_graph)
else
add_failure(
"internal open graph #{@open_graph.url.raw_attribute} does not exist",
element: @open_graph,
) unless @open_graph.url.exists?
end
end
external_urls
end
private def missing_content?
@open_graph.node["content"].nil?
end
private def empty_content?
@open_graph.node["content"].empty?
end
end
end
end
|