class HTMLProofer::Configuration
Constants
- CACHE_DEFAULTS
- DEFAULT_TESTS
- HYDRA_DEFAULTS
- PROOFER_DEFAULTS
- TYPHOEUS_DEFAULTS
Public Class Methods
generate_defaults(opts)
click to toggle source
# File lib/html_proofer/configuration.rb, line 49 def generate_defaults(opts) options = PROOFER_DEFAULTS.merge(opts) options[:typhoeus] = HTMLProofer::Configuration::TYPHOEUS_DEFAULTS.merge(opts[:typhoeus] || {}) options[:hydra] = HTMLProofer::Configuration::HYDRA_DEFAULTS.merge(opts[:hydra] || {}) options[:cache] = HTMLProofer::Configuration::CACHE_DEFAULTS.merge(opts[:cache] || {}) options.delete(:src) options end
new()
click to toggle source
# File lib/html_proofer/configuration.rb, line 63 def initialize @options = {} end
Public Instance Methods
parse_cli_options(args)
click to toggle source
# File lib/html_proofer/configuration.rb, line 67 def parse_cli_options(args) define_options.parse!(args) input = ARGV.empty? ? "." : ARGV.join(",") [@options, input] end
parse_json_option(option_name, config, symbolize_names: true)
click to toggle source
# File lib/html_proofer/configuration.rb, line 263 def 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
Private Instance Methods
define_options()
click to toggle source
# File lib/html_proofer/configuration.rb, line 75 def define_options OptionParser.new do |opts| opts.banner = "Usage: htmlproofer [options] PATH/LINK" section(opts, "Input Options") do set_option(opts, "--as-links") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--assume-extension EXT") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--directory-index-file FILENAME") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--extensions [EXT1,EXT2,...]") do |long_opt_symbol, list| @options[long_opt_symbol] = list.nil? ? [] : list.split(",") end end section(opts, "Check Configuration") do set_option(opts, "--[no-]allow-hash-href") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--[no-]allow-missing-href") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--checks [CHECK1,CHECK2,...]") do |long_opt_symbol, list| @options[long_opt_symbol] = list.nil? ? [] : list.split(",") end set_option(opts, "--[no-]check-external-hash") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--[no-]check-internal-hash") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--[no-]check-sri") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--[no-]disable-external") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--[no-]enforce-https") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--root-dir <DIR>") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end end section(opts, "Ignore Configuration") do set_option(opts, "--ignore-files [FILE1,FILE2,...]") do |long_opt_symbol, list| @options[long_opt_symbol] = if list.nil? [] else list.split(",").map.each do |l| if l.start_with?("/") && l.end_with?("/") Regexp.new(l[1...-1]) else l end end end end set_option(opts, "--[no-]ignore-empty-alt") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--[no-]ignore-empty-mailto") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--[no-]ignore-missing-alt") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end set_option(opts, "--ignore-status-codes [500,401,420,...]") do |long_opt_symbol, list| @options[long_opt_symbol] = list.nil? ? [] : list.split(",").map(&:to_i) end set_option(opts, "--ignore-urls [URL1, URL2,...]") do |long_opt_symbol, list| @options[long_opt_symbol] = if list.nil? [] else list.split(",").each_with_object([]) do |url, arr| arr << to_regex?(url) end end end set_option(opts, "--only-status-codes [404,451,...]") do |long_opt_symbol, list| @options[long_opt_symbol] = list.nil? ? [] : list.split(",") end set_option(opts, "--only-4xx") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg end end section(opts, "Transforms Configuration") do set_option(opts, "--swap-attributes <CONFIG>") do |long_opt_symbol, arg| @options[long_opt_symbol] = parse_json_option("swap_attributes", arg, symbolize_names: false) end set_option(opts, "--swap-urls [re:string,re:string,...]") do |long_opt_symbol, arg| @options[long_opt_symbol] = str_to_regexp_map(arg) end end section(opts, "Dependencies Configuration") do set_option(opts, "--typhoeus <CONFIG>") do |long_opt_symbol, arg| @options[long_opt_symbol] = parse_json_option("typhoeus", arg, symbolize_names: false) end set_option(opts, "--hydra <CONFIG>") do |long_opt_symbol, arg| @options[long_opt_symbol] = parse_json_option("hydra", arg, symbolize_names: true) end set_option(opts, "--cache <CONFIG>") do |long_opt_symbol, arg| @options[long_opt_symbol] = parse_json_option("cache", arg, symbolize_names: true) end end section(opts, "Reporting Configuration") do set_option(opts, "--log-level <LEVEL>") do |long_opt_symbol, arg| @options[long_opt_symbol] = arg.to_sym end end section(opts, "General Configuration") do set_option(opts, "--version") do puts HTMLProofer::VERSION exit(0) end end end end
parse_long_opt(long_opt)
click to toggle source
Converts the option into a symbol, e.g. ‘–allow-hash-href’ => :allow_hash_href.
# File lib/html_proofer/configuration.rb, line 259 def parse_long_opt(long_opt) long_opt[2..].sub("[no-]", "").sub(/ .*/, "").tr("-", "_").gsub(/[\[\]]/, "").to_sym end
section(opts, heading) { || ... }
click to toggle source
# File lib/html_proofer/configuration.rb, line 242 def section(opts, heading, &_block) opts.separator("\n#{heading}:\n") yield end
set_option(opts, long_arg) { |long_opt_symbol, arg| ... }
click to toggle source
# File lib/html_proofer/configuration.rb, line 247 def set_option(opts, long_arg, &block) long_opt_symbol = parse_long_opt(long_arg) args = [] args += Array(ConfigurationHelp::TEXT[long_opt_symbol]) opts.on(long_arg, *args) do |arg| yield long_opt_symbol, arg end end
str_to_regexp_map(arg)
click to toggle source
# File lib/html_proofer/configuration.rb, line 232 def str_to_regexp_map(arg) arg.split(",").each_with_object({}) do |s, hsh| split = s.split(/(?<!\\):/, 2) re = split[0].gsub("\\:", ":") string = split[1].gsub("\\:", ":") hsh[Regexp.new(re)] = string end end
to_regex?(item)
click to toggle source
# File lib/html_proofer/configuration.rb, line 224 def to_regex?(item) if item.start_with?("/") && item.end_with?("/") Regexp.new(item[1...-1]) else item end end