Class: Uniword::Accessibility::AccessibilityReport
- Inherits:
-
Object
- Object
- Uniword::Accessibility::AccessibilityReport
- Defined in:
- lib/uniword/accessibility/accessibility_report.rb
Overview
Accessibility Report - aggregated accessibility check results
Responsibility: Aggregate violations and generate reports Single Responsibility: Report generation and export only
Instance Attribute Summary collapse
-
#profile_level ⇒ Object
readonly
Returns the value of attribute profile_level.
-
#profile_name ⇒ Object
readonly
Returns the value of attribute profile_name.
-
#violations ⇒ Object
readonly
Returns the value of attribute violations.
Instance Method Summary collapse
-
#add_violation(violation) ⇒ void
Add a violation to the report.
-
#compliant? ⇒ Boolean
Check if document is compliant (no errors).
-
#errors ⇒ Array<AccessibilityViolation>
Get all error-level violations.
-
#export_html(file_path) ⇒ void
Export report to HTML file.
-
#infos ⇒ Array<AccessibilityViolation>
Get all info-level violations.
-
#initialize(profile_name:, profile_level:) ⇒ AccessibilityReport
constructor
Initialize a new accessibility report.
-
#summary ⇒ String
Generate a text summary of the report.
-
#to_json(*_args) ⇒ String
Export report to JSON format.
-
#warnings ⇒ Array<AccessibilityViolation>
Get all warning-level violations.
Constructor Details
#initialize(profile_name:, profile_level:) ⇒ AccessibilityReport
Initialize a new accessibility report
28 29 30 31 32 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 28 def initialize(profile_name:, profile_level:) @profile_name = profile_name @profile_level = profile_level @violations = [] end |
Instance Attribute Details
#profile_level ⇒ Object (readonly)
Returns the value of attribute profile_level.
22 23 24 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 22 def profile_level @profile_level end |
#profile_name ⇒ Object (readonly)
Returns the value of attribute profile_name.
22 23 24 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 22 def profile_name @profile_name end |
#violations ⇒ Object (readonly)
Returns the value of attribute violations.
22 23 24 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 22 def violations @violations end |
Instance Method Details
#add_violation(violation) ⇒ void
This method returns an undefined value.
Add a violation to the report
38 39 40 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 38 def add_violation(violation) @violations << violation end |
#compliant? ⇒ Boolean
Check if document is compliant (no errors)
45 46 47 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 45 def compliant? errors.empty? end |
#errors ⇒ Array<AccessibilityViolation>
Get all error-level violations
52 53 54 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 52 def errors @violations.select(&:error?) end |
#export_html(file_path) ⇒ void
This method returns an undefined value.
Export report to HTML file
120 121 122 123 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 120 def export_html(file_path) html = generate_html File.write(file_path, html) end |
#infos ⇒ Array<AccessibilityViolation>
Get all info-level violations
66 67 68 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 66 def infos @violations.select(&:info?) end |
#summary ⇒ String
Generate a text summary of the report
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 73 def summary return "✅ Document is accessible (#{@profile_name} #{@profile_level})" if compliant? lines = [] lines << "❌ Document has accessibility issues (#{@profile_name} #{@profile_level}):" lines << " Errors: #{errors.count} (must fix)" lines << " Warnings: #{warnings.count} (should fix)" lines << " Info: #{infos.count} (recommended)" lines << "" # Group by rule by_rule = @violations.group_by(&:rule_id) by_rule.each do |rule_id, rule_violations| lines << "#{rule_id} (#{rule_violations.count} issues):" rule_violations.first(3).each do |v| lines << " - #{v.}" end lines << " ... and #{rule_violations.count - 3} more" if rule_violations.count > 3 end lines.join("\n") end |
#to_json(*_args) ⇒ String
Export report to JSON format
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 99 def to_json(*_args) JSON.pretty_generate( profile: { name: @profile_name, level: @profile_level, }, compliant: compliant?, summary: { total: @violations.count, errors: errors.count, warnings: warnings.count, infos: infos.count, }, violations: @violations.map(&:to_h), ) end |
#warnings ⇒ Array<AccessibilityViolation>
Get all warning-level violations
59 60 61 |
# File 'lib/uniword/accessibility/accessibility_report.rb', line 59 def warnings @violations.select(&:warning?) end |