Class: SiteInspector::Endpoint::Accessibility

Inherits:
Check
  • Object
show all
Defined in:
lib/site-inspector/checks/accessibility.rb

Defined Under Namespace

Classes: Pa11yError

Constant Summary collapse

STANDARDS =
{
  wcag2a: 'WCAG2A', # Default standard
  wcag2aa: 'WCAG2AA',
  wcag2aaa: 'WCAG2AAA',
  section508: 'Section508'
}.freeze
DEFAULT_LEVEL =
:error
REQUIRED_PA11Y_VERSION =
'~> 5.0'

Instance Attribute Summary

Attributes inherited from Check

#endpoint

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Check

enabled=, #host, #initialize, #inspect, #name, name, #request, #response

Constructor Details

This class inherits a constructor from SiteInspector::Endpoint::Check

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_sym, *arguments, &block) ⇒ Object



92
93
94
95
96
97
98
# File 'lib/site-inspector/checks/accessibility.rb', line 92

def method_missing(method_sym, *arguments, &block)
  if standard?(method_sym)
    run_pa11y(method_sym)
  else
    super
  end
end

Class Method Details

.enabled?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/site-inspector/checks/accessibility.rb', line 36

def enabled?
  @@enabled && pa11y?
end

.pa11yObject



40
41
42
43
44
45
46
# File 'lib/site-inspector/checks/accessibility.rb', line 40

def pa11y
  @pa11y ||= begin
    node_bin = File.expand_path('../../../node_modules/pa11y/bin', File.dirname(__FILE__))
    path = ['*', node_bin].join(File::PATH_SEPARATOR)
    Cliver::Dependency.new('pa11y.js', REQUIRED_PA11Y_VERSION, path: path)
  end
end

.pa11y?Boolean

Returns:

  • (Boolean)


30
31
32
33
34
# File 'lib/site-inspector/checks/accessibility.rb', line 30

def pa11y?
  return @pa11y_detected if defined? @pa11y_detected

  @pa11y_detected = !!pa11y.detect
end

.pa11y_versionObject



23
24
25
26
27
28
# File 'lib/site-inspector/checks/accessibility.rb', line 23

def pa11y_version
  @pa11y_version ||= begin
    output, status = run_command('--version')
    output.strip if status.exitstatus.zero?
  end
end

.run_command(args) ⇒ Object



48
49
50
# File 'lib/site-inspector/checks/accessibility.rb', line 48

def run_command(args)
  Open3.capture2e(pa11y.detect, *args)
end

Instance Method Details

#checkObject Also known as: to_h



85
86
87
88
89
# File 'lib/site-inspector/checks/accessibility.rb', line 85

def check
  @check ||= run_pa11y(standard)
rescue Pa11yError
  nil
end

#errorsObject



81
82
83
# File 'lib/site-inspector/checks/accessibility.rb', line 81

def errors
  check[:results].count { |r| r['type'] == 'error' } if check
end

#levelObject



53
54
55
# File 'lib/site-inspector/checks/accessibility.rb', line 53

def level
  @level ||= DEFAULT_LEVEL
end

#level=(level) ⇒ Object

Raises:

  • (ArgumentError)


57
58
59
60
61
# File 'lib/site-inspector/checks/accessibility.rb', line 57

def level=(level)
  raise ArgumentError, "Invalid level '#{level}'" unless %i[error warning notice].include?(level)

  @level = level
end

#respond_to_missing?(method_sym, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


100
101
102
103
104
105
106
# File 'lib/site-inspector/checks/accessibility.rb', line 100

def respond_to_missing?(method_sym, include_private = false)
  if standard?(method_sym)
    true
  else
    super
  end
end

#standardObject



67
68
69
# File 'lib/site-inspector/checks/accessibility.rb', line 67

def standard
  @standard ||= STANDARDS.keys.first
end

#standard=(standard) ⇒ Object

Raises:

  • (ArgumentError)


71
72
73
74
75
# File 'lib/site-inspector/checks/accessibility.rb', line 71

def standard=(standard)
  raise ArgumentError, "Unknown standard '#{standard}'" unless standard?(standard)

  @standard = standard
end

#standard?(standard) ⇒ Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/site-inspector/checks/accessibility.rb', line 63

def standard?(standard)
  STANDARDS.key?(standard)
end

#valid?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/site-inspector/checks/accessibility.rb', line 77

def valid?
  check[:valid] if check
end