Class: ValidateWebsite::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/validate_website/option_parser.rb

Overview

Internal class for parse command line args

Constant Summary collapse

VALID_TYPES =
%i[crawl static].freeze
DEFAULT_OPTIONS =
{
  site: 'http://localhost/',
  pattern: '**/*.html',
  exclude: nil,
  user_agent: nil,
  markup: true,
  css_syntax: false,
  # crawler: log not found url (404 status code)
  # static: log not found url (not on filesystem, `pwd` considered
  # as root " / ")
  not_found: false,
  file: nil,
  # regex to ignore certain validation errors
  ignore: nil,
  color: true,
  html5_validator: 'tidy',
  # internal verbose for ValidateWebsite
  verbose: false
}.freeze

Class Method Summary collapse

Class Method Details

.boolean_options(opt) ⇒ Object


74
75
76
77
78
79
80
81
# File 'lib/validate_website/option_parser.rb', line 74

def self.boolean_options(opt)
  opt.bool('-n', '--not-found',
           "Log not found url (default: #{DEFAULT_OPTIONS[:not_found]})",
           default: DEFAULT_OPTIONS[:not_found])
  opt.bool('--color',
           "Show colored output (default: #{DEFAULT_OPTIONS[:color]})",
           default: DEFAULT_OPTIONS[:color])
end

.command_line_parse_crawl(_args) ⇒ Hash

Parse command line for validate-website bin

Returns:

  • (Hash)

103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/validate_website/option_parser.rb', line 103

def self.command_line_parse_crawl(_args)
  default_args do |opt|
    opt.string('-s', '--site',
               "Website to crawl (default: #{DEFAULT_OPTIONS[:site]})",
               default: DEFAULT_OPTIONS[:site])
    opt.string('-u', '--user-agent',
               'Change user agent',
               default: DEFAULT_OPTIONS[:user_agent])
    opt.regexp('-e', '--exclude', 'Url to exclude (ex: "redirect|news")')
    opt.string('-c', '--cookies', 'Set defaults cookies')
  end
end

.command_line_parse_static(_args) ⇒ Hash

Parse command line for validate-website-static bin

Returns:

  • (Hash)

119
120
121
122
123
124
125
126
127
128
129
# File 'lib/validate_website/option_parser.rb', line 119

def self.command_line_parse_static(_args)
  default_args do |opt|
    opt.string('-s', '--site',
               "Website to crawl (default: #{DEFAULT_OPTIONS[:site]})",
               default: DEFAULT_OPTIONS[:site])
    opt.string('-p', '--pattern',
               "Filename pattern (default: #{DEFAULT_OPTIONS[:pattern]})",
               default: DEFAULT_OPTIONS[:pattern])
    opt.regexp('-e', '--exclude', 'Url to exclude (ex: "redirect|news")')
  end
end

.default_argsObject


44
45
46
47
48
49
50
51
52
53
# File 'lib/validate_website/option_parser.rb', line 44

def self.default_args
  Slop.parse do |opt|
    yield opt if block_given?
    markup_syntax(opt)
    boolean_options(opt)
    ignore_html5_options(opt)
    verbose_option(opt)
    version_help(opt)
  end
end

.ignore_html5_options(opt) ⇒ Object


55
56
57
58
59
60
61
62
63
# File 'lib/validate_website/option_parser.rb', line 55

def self.ignore_html5_options(opt)
  opt.regexp('-i', '--ignore',
             'Validation errors to ignore (ex: "valign|autocorrect")')
  opt.string('-x', '--html5-validator',
             'Change default html5 validator engine (tidy/nu/nokogumbo)',
             default: DEFAULT_OPTIONS[:html5_validator])
  opt.string('-5', '--html5-validator-service-url',
             'Change default html5 validator service URL for "nu" engine')
end

.markup_syntax(opt) ⇒ Object


65
66
67
68
69
70
71
72
# File 'lib/validate_website/option_parser.rb', line 65

def self.markup_syntax(opt)
  opt.bool('-m', '--markup',
           "Markup validation (default: #{DEFAULT_OPTIONS[:markup]})",
           default: DEFAULT_OPTIONS[:markup])
  opt.bool('--css-syntax',
           "Css validation (default: #{DEFAULT_OPTIONS[:css_syntax]})",
           default: DEFAULT_OPTIONS[:css_syntax])
end

.parse(options, type) ⇒ Object

Generic parse method for crawl or static options

Raises:

  • (ArgumentError)

32
33
34
35
36
37
38
39
40
41
42
# File 'lib/validate_website/option_parser.rb', line 32

def self.parse(options, type)
  raise ArgumentError unless VALID_TYPES.include?(type)

  # We are in command line (ARGV)
  if options.is_a?(Array)
    send("command_line_parse_#{type}", options)
  else
    # for testing or Ruby usage with a Hash
    DEFAULT_OPTIONS.merge(options)
  end
end

.verbose_option(opt) ⇒ Object


83
84
85
86
87
# File 'lib/validate_website/option_parser.rb', line 83

def self.verbose_option(opt)
  opt.bool('-v', '--verbose',
           "Show validator errors (default: #{DEFAULT_OPTIONS[:verbose]})",
           default: DEFAULT_OPTIONS[:verbose])
end

.version_help(opt) ⇒ Object


89
90
91
92
93
94
95
96
97
98
# File 'lib/validate_website/option_parser.rb', line 89

def self.version_help(opt)
  opt.on('--version', 'Display version.') do
    puts ValidateWebsite::VERSION
    exit
  end
  opt.on('-h', '--help', 'Display this help message.') do
    puts opt
    exit
  end
end