File: configuration.rb

package info (click to toggle)
ruby-html-proofer 3.19.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,040 kB
  • sloc: ruby: 3,203; sh: 9; makefile: 4; javascript: 1; php: 1
file content (88 lines) | stat: -rw-r--r-- 2,479 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# frozen_string_literal: true

module HTMLProofer
  module Configuration
    require_relative 'version'

    PROOFER_DEFAULTS = {
      allow_missing_href: false,
      allow_hash_href: false,
      alt_ignore: [],
      assume_extension: false,
      check_external_hash: false,
      check_favicon: false,
      check_html: false,
      check_img_http: false,
      check_opengraph: false,
      checks_to_ignore: [],
      check_sri: false,
      directory_index_file: 'index.html',
      disable_external: false,
      empty_alt_ignore: false,
      enforce_https: false,
      error_sort: :path,
      extension: '.html',
      external_only: false,
      file_ignore: [],
      http_status_ignore: [],
      internal_domains: [],
      log_level: :info,
      ignore_empty_mailto: false,
      only_4xx: false,
      url_ignore: [],
      url_swap: {}
    }.freeze

    TYPHOEUS_DEFAULTS = {
      followlocation: true,
      headers: {
        'User-Agent' => "Mozilla/5.0 (compatible; HTML Proofer/#{HTMLProofer::VERSION}; +https://github.com/gjtorikian/html-proofer)",
        'Accept' => 'application/xml,application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5'
      },
      connecttimeout: 10,
      timeout: 30
    }.freeze

    HYDRA_DEFAULTS = {
      max_concurrency: 50
    }.freeze

    PARALLEL_DEFAULTS = {}.freeze

    VALIDATION_DEFAULTS = {
      report_script_embeds: false,
      report_missing_names: false,
      report_invalid_tags: false,
      report_missing_doctype: false,
      report_eof_tags: false,
      report_mismatched_tags: false
    }.freeze

    CACHE_DEFAULTS = {}.freeze

    def self.to_regex?(item)
      if item.start_with?('/') && item.end_with?('/')
        Regexp.new item[1...-1]
      else
        item
      end
    end

    def self.parse_json_option(option_name, config, symbolize_names: true)
      raise ArgumentError, 'Must provide an option name in string format.' unless option_name.is_a?(String)
      raise ArgumentError, 'Must provide an option name in string format.' if option_name.strip.empty?

      return {} if config.nil?

      raise ArgumentError, 'Must provide a JSON configuration in string format.' unless config.is_a?(String)

      return {} if config.strip.empty?

      begin
        JSON.parse(config, { symbolize_names: symbolize_names })
      rescue StandardError
        raise ArgumentError, "Option '#{option_name} did not contain valid JSON."
      end
    end
  end
end