Class: Uniword::Accessibility::AccessibilityReport

Inherits:
Object
  • Object
show all
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

Examples:

Using the report

report = AccessibilityReport.new(
  profile_name: "WCAG 2.1",
  profile_level: "Level AA"
)
report.add_violation(violation1)
report.add_violation(violation2)
puts report.summary
report.export_html('report.html')

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(profile_name:, profile_level:) ⇒ AccessibilityReport

Initialize a new accessibility report

Parameters:

  • profile_name (String)

    Name of the profile used

  • profile_level (String)

    Level of the profile (A, AA, AAA)



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_levelObject (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_nameObject (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

#violationsObject (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

Parameters:



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)

Returns:

  • (Boolean)

    True if no errors exist



45
46
47
# File 'lib/uniword/accessibility/accessibility_report.rb', line 45

def compliant?
  errors.empty?
end

#errorsArray<AccessibilityViolation>

Get all error-level violations

Returns:



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

Parameters:

  • file_path (String)

    Path to save HTML report



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

#infosArray<AccessibilityViolation>

Get all info-level violations

Returns:



66
67
68
# File 'lib/uniword/accessibility/accessibility_report.rb', line 66

def infos
  @violations.select(&:info?)
end

#summaryString

Generate a text summary of the report

Returns:

  • (String)

    Formatted summary text



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.message}"
    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

Returns:

  • (String)

    JSON representation of report



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

#warningsArray<AccessibilityViolation>

Get all warning-level violations

Returns:



59
60
61
# File 'lib/uniword/accessibility/accessibility_report.rb', line 59

def warnings
  @violations.select(&:warning?)
end