rails_accessibility_testing 1.5.3 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ARCHITECTURE.md +376 -1
- data/CHANGELOG.md +63 -1
- data/GUIDES/getting_started.md +40 -5
- data/GUIDES/system_specs_for_accessibility.md +12 -4
- data/README.md +52 -8
- data/docs_site/Gemfile.lock +89 -0
- data/docs_site/_config.yml +9 -0
- data/docs_site/_includes/header.html +1 -0
- data/docs_site/_layouts/default.html +754 -15
- data/docs_site/architecture.md +533 -0
- data/docs_site/index.md +2 -1
- data/exe/a11y_live_scanner +10 -39
- data/exe/a11y_static_scanner +333 -0
- data/lib/generators/rails_a11y/install/install_generator.rb +19 -30
- data/lib/generators/rails_a11y/install/templates/accessibility.yml.erb +39 -0
- data/lib/generators/rails_a11y/install/templates/all_pages_accessibility_spec.rb.erb +132 -45
- data/lib/rails_accessibility_testing/accessibility_helper.rb +131 -126
- data/lib/rails_accessibility_testing/checks/base_check.rb +14 -5
- data/lib/rails_accessibility_testing/checks/form_errors_check.rb +1 -1
- data/lib/rails_accessibility_testing/checks/form_labels_check.rb +6 -4
- data/lib/rails_accessibility_testing/checks/heading_check.rb +7 -15
- data/lib/rails_accessibility_testing/checks/image_alt_text_check.rb +1 -1
- data/lib/rails_accessibility_testing/checks/interactive_elements_check.rb +12 -8
- data/lib/rails_accessibility_testing/config/yaml_loader.rb +20 -0
- data/lib/rails_accessibility_testing/erb_extractor.rb +141 -0
- data/lib/rails_accessibility_testing/error_message_builder.rb +11 -6
- data/lib/rails_accessibility_testing/file_change_tracker.rb +95 -0
- data/lib/rails_accessibility_testing/line_number_finder.rb +61 -0
- data/lib/rails_accessibility_testing/rspec_integration.rb +74 -33
- data/lib/rails_accessibility_testing/shared_examples.rb +2 -0
- data/lib/rails_accessibility_testing/static_file_scanner.rb +80 -0
- data/lib/rails_accessibility_testing/static_page_adapter.rb +116 -0
- data/lib/rails_accessibility_testing/static_scanning.rb +61 -0
- data/lib/rails_accessibility_testing/version.rb +3 -1
- data/lib/rails_accessibility_testing/violation_converter.rb +80 -0
- data/lib/rails_accessibility_testing.rb +9 -1
- metadata +26 -2
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Static scanning module - provides file-based accessibility scanning
|
|
4
|
+
# This module aggregates all static scanning components for easy access
|
|
5
|
+
#
|
|
6
|
+
# @api public
|
|
7
|
+
module RailsAccessibilityTesting
|
|
8
|
+
# Static scanning components
|
|
9
|
+
# All components work together to scan view files without browser rendering
|
|
10
|
+
#
|
|
11
|
+
# Components:
|
|
12
|
+
# - StaticFileScanner: Main scanner that orchestrates the scanning process
|
|
13
|
+
# - ErbExtractor: Converts ERB templates to HTML for analysis
|
|
14
|
+
# - StaticPageAdapter: Makes Nokogiri documents look like Capybara pages
|
|
15
|
+
# - LineNumberFinder: Finds line numbers for reported issues
|
|
16
|
+
# - ViolationConverter: Converts violations to error/warning format
|
|
17
|
+
#
|
|
18
|
+
# All 11 accessibility checks are automatically used via RuleEngine:
|
|
19
|
+
# 1. FormLabelsCheck
|
|
20
|
+
# 2. ImageAltTextCheck
|
|
21
|
+
# 3. InteractiveElementsCheck
|
|
22
|
+
# 4. HeadingCheck
|
|
23
|
+
# 5. KeyboardAccessibilityCheck
|
|
24
|
+
# 6. AriaLandmarksCheck
|
|
25
|
+
# 7. FormErrorsCheck
|
|
26
|
+
# 8. TableStructureCheck
|
|
27
|
+
# 9. DuplicateIdsCheck
|
|
28
|
+
# 10. SkipLinksCheck
|
|
29
|
+
# 11. ColorContrastCheck
|
|
30
|
+
#
|
|
31
|
+
# @example Scanning a view file
|
|
32
|
+
# scanner = StaticFileScanner.new('app/views/pages/home.html.erb')
|
|
33
|
+
# result = scanner.scan
|
|
34
|
+
# # => { errors: [...], warnings: [...] }
|
|
35
|
+
#
|
|
36
|
+
module StaticScanning
|
|
37
|
+
# Convenience method to scan a single file
|
|
38
|
+
# @param file_path [String] Path to view file
|
|
39
|
+
# @return [Hash] Hash with :errors and :warnings arrays
|
|
40
|
+
def self.scan_file(file_path)
|
|
41
|
+
StaticFileScanner.new(file_path).scan
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Convenience method to scan multiple files
|
|
45
|
+
# @param file_paths [Array<String>] Array of file paths
|
|
46
|
+
# @return [Hash] Hash with :errors and :warnings arrays (aggregated)
|
|
47
|
+
def self.scan_files(file_paths)
|
|
48
|
+
all_errors = []
|
|
49
|
+
all_warnings = []
|
|
50
|
+
|
|
51
|
+
file_paths.each do |file_path|
|
|
52
|
+
result = scan_file(file_path)
|
|
53
|
+
all_errors.concat(result[:errors] || [])
|
|
54
|
+
all_warnings.concat(result[:warnings] || [])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
{ errors: all_errors, warnings: all_warnings }
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAccessibilityTesting
|
|
4
|
+
# Converts Violation objects to error/warning hash format
|
|
5
|
+
# Used by static file scanner to format results
|
|
6
|
+
#
|
|
7
|
+
# @api private
|
|
8
|
+
class ViolationConverter
|
|
9
|
+
# Convert violations to errors/warnings format
|
|
10
|
+
# @param violations [Array<Engine::Violation>] Array of violations
|
|
11
|
+
# @param view_file [String] Path to the view file
|
|
12
|
+
# @param line_number_finder [LineNumberFinder] Finder for line numbers
|
|
13
|
+
# @param config [Hash] Optional configuration hash (for ignore_warnings flag)
|
|
14
|
+
# @return [Hash] Hash with :errors and :warnings arrays
|
|
15
|
+
def self.convert(violations, view_file:, line_number_finder:, config: {})
|
|
16
|
+
new(violations, view_file: view_file, line_number_finder: line_number_finder, config: config).convert
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def initialize(violations, view_file:, line_number_finder:, config: {})
|
|
20
|
+
@violations = violations
|
|
21
|
+
@view_file = view_file
|
|
22
|
+
@line_number_finder = line_number_finder
|
|
23
|
+
@config = config
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def convert
|
|
27
|
+
errors = []
|
|
28
|
+
warnings = []
|
|
29
|
+
|
|
30
|
+
@violations.each do |violation|
|
|
31
|
+
# Skip warnings if ignore_warnings is enabled
|
|
32
|
+
if warning?(violation) && ignore_warnings?
|
|
33
|
+
next
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
element_context = violation.element_context || {}
|
|
37
|
+
line_num = @line_number_finder.find_line_number(element_context)
|
|
38
|
+
|
|
39
|
+
error_data = {
|
|
40
|
+
type: violation.message,
|
|
41
|
+
element: element_context,
|
|
42
|
+
file: @view_file,
|
|
43
|
+
line: line_num,
|
|
44
|
+
wcag: violation.wcag_reference
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if warning?(violation)
|
|
48
|
+
warnings << error_data
|
|
49
|
+
else
|
|
50
|
+
errors << error_data
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
{ errors: errors, warnings: warnings }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
# Check if warnings should be ignored
|
|
60
|
+
def ignore_warnings?
|
|
61
|
+
summary_config = @config['summary'] || {}
|
|
62
|
+
summary_config.fetch('ignore_warnings', false)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Determine if a violation should be a warning instead of an error
|
|
66
|
+
def warning?(violation)
|
|
67
|
+
message = violation.message
|
|
68
|
+
rule_name = violation.rule_name
|
|
69
|
+
|
|
70
|
+
# Skip links are warnings (best practice, not required)
|
|
71
|
+
return true if message.include?('skip link') || message.include?('Skip link')
|
|
72
|
+
|
|
73
|
+
# ARIA landmarks are warnings (best practice, not always required)
|
|
74
|
+
return true if rule_name == 'aria_landmarks'
|
|
75
|
+
|
|
76
|
+
false
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Automatically configures accessibility testing for Rails system specs with
|
|
6
6
|
# comprehensive checks and detailed error messages.
|
|
7
7
|
#
|
|
8
|
-
# @version 1.5.
|
|
8
|
+
# @version 1.5.5
|
|
9
9
|
# @author Regan Maharjan
|
|
10
10
|
#
|
|
11
11
|
# @example Basic usage
|
|
@@ -45,8 +45,16 @@ end
|
|
|
45
45
|
# Load core components
|
|
46
46
|
require_relative 'rails_accessibility_testing/configuration'
|
|
47
47
|
require_relative 'rails_accessibility_testing/change_detector'
|
|
48
|
+
require_relative 'rails_accessibility_testing/file_change_tracker'
|
|
48
49
|
require_relative 'rails_accessibility_testing/error_message_builder'
|
|
49
50
|
require_relative 'rails_accessibility_testing/accessibility_helper'
|
|
51
|
+
# Static scanning components (modular and reusable)
|
|
52
|
+
require_relative 'rails_accessibility_testing/static_page_adapter'
|
|
53
|
+
require_relative 'rails_accessibility_testing/erb_extractor'
|
|
54
|
+
require_relative 'rails_accessibility_testing/line_number_finder'
|
|
55
|
+
require_relative 'rails_accessibility_testing/violation_converter'
|
|
56
|
+
require_relative 'rails_accessibility_testing/static_file_scanner'
|
|
57
|
+
require_relative 'rails_accessibility_testing/static_scanning'
|
|
50
58
|
# Only load RSpec-specific components when RSpec is available
|
|
51
59
|
if defined?(RSpec)
|
|
52
60
|
require_relative 'rails_accessibility_testing/shared_examples'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails_accessibility_testing
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.5.
|
|
4
|
+
version: 1.5.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Regan Maharjan
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '4.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: nokogiri
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.10'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '1.10'
|
|
27
41
|
- !ruby/object:Gem::Dependency
|
|
28
42
|
name: bundler
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -75,7 +89,7 @@ email:
|
|
|
75
89
|
executables:
|
|
76
90
|
- rails_a11y
|
|
77
91
|
- rails_server_safe
|
|
78
|
-
-
|
|
92
|
+
- a11y_static_scanner
|
|
79
93
|
extensions: []
|
|
80
94
|
extra_rdoc_files: []
|
|
81
95
|
files:
|
|
@@ -92,10 +106,12 @@ files:
|
|
|
92
106
|
- README.md
|
|
93
107
|
- docs_site/404.html
|
|
94
108
|
- docs_site/Gemfile
|
|
109
|
+
- docs_site/Gemfile.lock
|
|
95
110
|
- docs_site/Makefile
|
|
96
111
|
- docs_site/_config.yml
|
|
97
112
|
- docs_site/_includes/header.html
|
|
98
113
|
- docs_site/_layouts/default.html
|
|
114
|
+
- docs_site/architecture.md
|
|
99
115
|
- docs_site/assets/main.scss
|
|
100
116
|
- docs_site/ci_integration.md
|
|
101
117
|
- docs_site/configuration.md
|
|
@@ -103,6 +119,7 @@ files:
|
|
|
103
119
|
- docs_site/getting_started.md
|
|
104
120
|
- docs_site/index.md
|
|
105
121
|
- exe/a11y_live_scanner
|
|
122
|
+
- exe/a11y_static_scanner
|
|
106
123
|
- exe/rails_a11y
|
|
107
124
|
- exe/rails_server_safe
|
|
108
125
|
- lib/generators/rails_a11y/install/install_generator.rb
|
|
@@ -130,13 +147,20 @@ files:
|
|
|
130
147
|
- lib/rails_accessibility_testing/engine/rule_engine.rb
|
|
131
148
|
- lib/rails_accessibility_testing/engine/violation.rb
|
|
132
149
|
- lib/rails_accessibility_testing/engine/violation_collector.rb
|
|
150
|
+
- lib/rails_accessibility_testing/erb_extractor.rb
|
|
133
151
|
- lib/rails_accessibility_testing/error_message_builder.rb
|
|
152
|
+
- lib/rails_accessibility_testing/file_change_tracker.rb
|
|
134
153
|
- lib/rails_accessibility_testing/integration/minitest_integration.rb
|
|
154
|
+
- lib/rails_accessibility_testing/line_number_finder.rb
|
|
135
155
|
- lib/rails_accessibility_testing/middleware/page_visit_logger.rb
|
|
136
156
|
- lib/rails_accessibility_testing/railtie.rb
|
|
137
157
|
- lib/rails_accessibility_testing/rspec_integration.rb
|
|
138
158
|
- lib/rails_accessibility_testing/shared_examples.rb
|
|
159
|
+
- lib/rails_accessibility_testing/static_file_scanner.rb
|
|
160
|
+
- lib/rails_accessibility_testing/static_page_adapter.rb
|
|
161
|
+
- lib/rails_accessibility_testing/static_scanning.rb
|
|
139
162
|
- lib/rails_accessibility_testing/version.rb
|
|
163
|
+
- lib/rails_accessibility_testing/violation_converter.rb
|
|
140
164
|
- lib/tasks/accessibility.rake
|
|
141
165
|
homepage: https://rayraycodes.github.io/rails-accessibility-testing/
|
|
142
166
|
licenses:
|