rails_accessibility_testing 1.1.0

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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/ARCHITECTURE.md +307 -0
  3. data/CHANGELOG.md +81 -0
  4. data/CODE_OF_CONDUCT.md +125 -0
  5. data/CONTRIBUTING.md +225 -0
  6. data/GUIDES/continuous_integration.md +326 -0
  7. data/GUIDES/getting_started.md +205 -0
  8. data/GUIDES/working_with_designers_and_content_authors.md +398 -0
  9. data/GUIDES/writing_accessible_views_in_rails.md +412 -0
  10. data/LICENSE +22 -0
  11. data/README.md +350 -0
  12. data/docs_site/404.html +11 -0
  13. data/docs_site/Gemfile +11 -0
  14. data/docs_site/Makefile +14 -0
  15. data/docs_site/_config.yml +41 -0
  16. data/docs_site/_includes/header.html +13 -0
  17. data/docs_site/_layouts/default.html +130 -0
  18. data/docs_site/assets/main.scss +4 -0
  19. data/docs_site/ci_integration.md +76 -0
  20. data/docs_site/configuration.md +114 -0
  21. data/docs_site/contributing.md +69 -0
  22. data/docs_site/getting_started.md +57 -0
  23. data/docs_site/index.md +57 -0
  24. data/exe/rails_a11y +12 -0
  25. data/exe/rails_server_safe +41 -0
  26. data/lib/generators/rails_a11y/install/generator.rb +51 -0
  27. data/lib/rails_accessibility_testing/accessibility_helper.rb +701 -0
  28. data/lib/rails_accessibility_testing/change_detector.rb +114 -0
  29. data/lib/rails_accessibility_testing/checks/aria_landmarks_check.rb +33 -0
  30. data/lib/rails_accessibility_testing/checks/base_check.rb +156 -0
  31. data/lib/rails_accessibility_testing/checks/color_contrast_check.rb +56 -0
  32. data/lib/rails_accessibility_testing/checks/duplicate_ids_check.rb +49 -0
  33. data/lib/rails_accessibility_testing/checks/form_errors_check.rb +40 -0
  34. data/lib/rails_accessibility_testing/checks/form_labels_check.rb +62 -0
  35. data/lib/rails_accessibility_testing/checks/heading_hierarchy_check.rb +53 -0
  36. data/lib/rails_accessibility_testing/checks/image_alt_text_check.rb +52 -0
  37. data/lib/rails_accessibility_testing/checks/interactive_elements_check.rb +66 -0
  38. data/lib/rails_accessibility_testing/checks/keyboard_accessibility_check.rb +36 -0
  39. data/lib/rails_accessibility_testing/checks/skip_links_check.rb +24 -0
  40. data/lib/rails_accessibility_testing/checks/table_structure_check.rb +36 -0
  41. data/lib/rails_accessibility_testing/cli/command.rb +259 -0
  42. data/lib/rails_accessibility_testing/config/yaml_loader.rb +131 -0
  43. data/lib/rails_accessibility_testing/configuration.rb +30 -0
  44. data/lib/rails_accessibility_testing/engine/rule_engine.rb +97 -0
  45. data/lib/rails_accessibility_testing/engine/violation.rb +58 -0
  46. data/lib/rails_accessibility_testing/engine/violation_collector.rb +59 -0
  47. data/lib/rails_accessibility_testing/error_message_builder.rb +354 -0
  48. data/lib/rails_accessibility_testing/integration/minitest_integration.rb +74 -0
  49. data/lib/rails_accessibility_testing/rspec_integration.rb +58 -0
  50. data/lib/rails_accessibility_testing/shared_examples.rb +93 -0
  51. data/lib/rails_accessibility_testing/version.rb +4 -0
  52. data/lib/rails_accessibility_testing.rb +83 -0
  53. data/lib/tasks/accessibility.rake +28 -0
  54. metadata +218 -0
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Rails Accessibility Testing Gem
4
+ #
5
+ # Automatically configures accessibility testing for Rails system specs with
6
+ # comprehensive checks and detailed error messages.
7
+ #
8
+ # @version 1.1.0
9
+ # @author Regan Maharjan
10
+ #
11
+ # @example Basic usage
12
+ # # In spec/rails_helper.rb
13
+ # require 'rails_accessibility_testing'
14
+ #
15
+ # # That's it! Comprehensive accessibility checks run automatically
16
+ # # after each system spec that visits a page
17
+ #
18
+ # @example Manual checks in specs
19
+ # it 'has no accessibility issues' do
20
+ # visit root_path
21
+ # check_comprehensive_accessibility # All 11 checks
22
+ # end
23
+ #
24
+ # @example Skip checks for specific tests
25
+ # it 'does something', skip_a11y: true do
26
+ # # This test won't run accessibility checks
27
+ # end
28
+ #
29
+ # @see RailsAccessibilityTesting::AccessibilityHelper
30
+ # @see RailsAccessibilityTesting::ErrorMessageBuilder
31
+ # @see RailsAccessibilityTesting::RSpecIntegration
32
+
33
+ require 'axe-capybara'
34
+ require 'axe/matchers/be_axe_clean'
35
+
36
+ # Load version
37
+ begin
38
+ require_relative 'rails_accessibility_testing/version'
39
+ rescue LoadError
40
+ module RailsAccessibilityTesting
41
+ VERSION = '1.1.0'
42
+ end
43
+ end
44
+
45
+ # Load core components
46
+ require_relative 'rails_accessibility_testing/configuration'
47
+ require_relative 'rails_accessibility_testing/change_detector'
48
+ require_relative 'rails_accessibility_testing/error_message_builder'
49
+ require_relative 'rails_accessibility_testing/accessibility_helper'
50
+ require_relative 'rails_accessibility_testing/shared_examples'
51
+ require_relative 'rails_accessibility_testing/rspec_integration'
52
+
53
+ # Load engine components
54
+ require_relative 'rails_accessibility_testing/engine/violation'
55
+ require_relative 'rails_accessibility_testing/engine/violation_collector'
56
+ require_relative 'rails_accessibility_testing/engine/rule_engine'
57
+
58
+ # Load check definitions
59
+ require_relative 'rails_accessibility_testing/checks/base_check'
60
+ require_relative 'rails_accessibility_testing/checks/form_labels_check'
61
+ require_relative 'rails_accessibility_testing/checks/image_alt_text_check'
62
+ require_relative 'rails_accessibility_testing/checks/interactive_elements_check'
63
+ require_relative 'rails_accessibility_testing/checks/heading_hierarchy_check'
64
+ require_relative 'rails_accessibility_testing/checks/keyboard_accessibility_check'
65
+ require_relative 'rails_accessibility_testing/checks/aria_landmarks_check'
66
+ require_relative 'rails_accessibility_testing/checks/form_errors_check'
67
+ require_relative 'rails_accessibility_testing/checks/table_structure_check'
68
+ require_relative 'rails_accessibility_testing/checks/duplicate_ids_check'
69
+ require_relative 'rails_accessibility_testing/checks/skip_links_check'
70
+ require_relative 'rails_accessibility_testing/checks/color_contrast_check'
71
+
72
+ # Load configuration
73
+ require_relative 'rails_accessibility_testing/config/yaml_loader'
74
+
75
+ # Load integrations
76
+ require_relative 'rails_accessibility_testing/integration/minitest_integration'
77
+
78
+ # Auto-configure when RSpec is available
79
+ if defined?(RSpec)
80
+ RSpec.configure do |config|
81
+ RailsAccessibilityTesting::RSpecIntegration.configure!(config)
82
+ end
83
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :a11y do
4
+ desc "Run all accessibility tests"
5
+ task :test do
6
+ sh "bundle exec rspec spec/system/ --tag accessibility"
7
+ end
8
+
9
+ desc "Run accessibility tests in watch mode"
10
+ task :watch do
11
+ sh "bundle exec rspec spec/system/ --tag accessibility --watch"
12
+ end
13
+
14
+ desc "Run all system tests (includes accessibility)"
15
+ task :system do
16
+ sh "bundle exec rspec spec/system/"
17
+ end
18
+
19
+ desc "Run accessibility tests for a specific file"
20
+ task :file, [:file] do |t, args|
21
+ file = args[:file] || "spec/system/rte_loaded_spec.rb"
22
+ sh "bundle exec rspec #{file}"
23
+ end
24
+ end
25
+
26
+ desc "Run accessibility tests (alias for a11y:test)"
27
+ task a11y: "a11y:test"
28
+
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_accessibility_testing
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Regan Maharjan
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-11-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: axe-core-capybara
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: capybara
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.9'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.9'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.12'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.12'
97
+ - !ruby/object:Gem::Dependency
98
+ name: capybara
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: selenium-webdriver
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '4.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '4.0'
125
+ description: Comprehensive, opinionated but configurable accessibility testing gem
126
+ for Rails. Integrates seamlessly into your test suite with RSpec and Minitest support.
127
+ Includes CLI tool, Rails generator, YAML configuration, and 11+ WCAG 2.1 AA aligned
128
+ checks with actionable error messages.
129
+ email:
130
+ - imregan@umich.edu
131
+ executables:
132
+ - rails_a11y
133
+ - rails_server_safe
134
+ extensions: []
135
+ extra_rdoc_files: []
136
+ files:
137
+ - ARCHITECTURE.md
138
+ - CHANGELOG.md
139
+ - CODE_OF_CONDUCT.md
140
+ - CONTRIBUTING.md
141
+ - GUIDES/continuous_integration.md
142
+ - GUIDES/getting_started.md
143
+ - GUIDES/working_with_designers_and_content_authors.md
144
+ - GUIDES/writing_accessible_views_in_rails.md
145
+ - LICENSE
146
+ - README.md
147
+ - docs_site/404.html
148
+ - docs_site/Gemfile
149
+ - docs_site/Makefile
150
+ - docs_site/_config.yml
151
+ - docs_site/_includes/header.html
152
+ - docs_site/_layouts/default.html
153
+ - docs_site/assets/main.scss
154
+ - docs_site/ci_integration.md
155
+ - docs_site/configuration.md
156
+ - docs_site/contributing.md
157
+ - docs_site/getting_started.md
158
+ - docs_site/index.md
159
+ - exe/rails_a11y
160
+ - exe/rails_server_safe
161
+ - lib/generators/rails_a11y/install/generator.rb
162
+ - lib/rails_accessibility_testing.rb
163
+ - lib/rails_accessibility_testing/accessibility_helper.rb
164
+ - lib/rails_accessibility_testing/change_detector.rb
165
+ - lib/rails_accessibility_testing/checks/aria_landmarks_check.rb
166
+ - lib/rails_accessibility_testing/checks/base_check.rb
167
+ - lib/rails_accessibility_testing/checks/color_contrast_check.rb
168
+ - lib/rails_accessibility_testing/checks/duplicate_ids_check.rb
169
+ - lib/rails_accessibility_testing/checks/form_errors_check.rb
170
+ - lib/rails_accessibility_testing/checks/form_labels_check.rb
171
+ - lib/rails_accessibility_testing/checks/heading_hierarchy_check.rb
172
+ - lib/rails_accessibility_testing/checks/image_alt_text_check.rb
173
+ - lib/rails_accessibility_testing/checks/interactive_elements_check.rb
174
+ - lib/rails_accessibility_testing/checks/keyboard_accessibility_check.rb
175
+ - lib/rails_accessibility_testing/checks/skip_links_check.rb
176
+ - lib/rails_accessibility_testing/checks/table_structure_check.rb
177
+ - lib/rails_accessibility_testing/cli/command.rb
178
+ - lib/rails_accessibility_testing/config/yaml_loader.rb
179
+ - lib/rails_accessibility_testing/configuration.rb
180
+ - lib/rails_accessibility_testing/engine/rule_engine.rb
181
+ - lib/rails_accessibility_testing/engine/violation.rb
182
+ - lib/rails_accessibility_testing/engine/violation_collector.rb
183
+ - lib/rails_accessibility_testing/error_message_builder.rb
184
+ - lib/rails_accessibility_testing/integration/minitest_integration.rb
185
+ - lib/rails_accessibility_testing/rspec_integration.rb
186
+ - lib/rails_accessibility_testing/shared_examples.rb
187
+ - lib/rails_accessibility_testing/version.rb
188
+ - lib/tasks/accessibility.rake
189
+ homepage: https://github.com/rayraycodes/rails_accessibility_testing
190
+ licenses:
191
+ - MIT
192
+ metadata:
193
+ homepage_uri: https://github.com/rayraycodes/rails_accessibility_testing
194
+ source_code_uri: https://github.com/rayraycodes/rails_accessibility_testing
195
+ changelog_uri: https://github.com/rayraycodes/rails_accessibility_testing/blob/main/CHANGELOG.md
196
+ documentation_uri: https://rayraycodes.github.io/rails-accessibility-testing/
197
+ rubygems_mfa_required: 'true'
198
+ post_install_message:
199
+ rdoc_options: []
200
+ require_paths:
201
+ - lib
202
+ required_ruby_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ required_rubygems_version: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ requirements: []
213
+ rubygems_version: 3.0.3.1
214
+ signing_key:
215
+ specification_version: 4
216
+ summary: The RSpec + RuboCop of accessibility for Rails. Catch WCAG violations before
217
+ they reach production.
218
+ test_files: []