File: open_graph.rb

package info (click to toggle)
ruby-html-proofer 5.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 22,524 kB
  • sloc: ruby: 4,389; sh: 8; makefile: 4; javascript: 1; php: 1
file content (46 lines) | stat: -rw-r--r-- 1,485 bytes parent folder | download
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