Class: SvgConform::RemediationEngine
- Inherits:
-
Object
- Object
- SvgConform::RemediationEngine
- Defined in:
- lib/svg_conform/remediation_engine.rb
Overview
Engine for applying remediations to SVG documents based on validation failures
Instance Attribute Summary collapse
-
#profile ⇒ Object
readonly
Returns the value of attribute profile.
-
#results ⇒ Object
readonly
Returns the value of attribute results.
Instance Method Summary collapse
-
#applicable_remediations(failed_requirements) ⇒ Object
Get remediations that would apply to given failed requirements.
-
#apply_remediations(document, validation_result) ⇒ Object
Apply remediations for failed requirements.
-
#failed_results ⇒ Object
Get failed remediation results.
-
#has_remediations? ⇒ Boolean
Check if any remediations are available for the profile.
-
#initialize(profile) ⇒ RemediationEngine
constructor
A new instance of RemediationEngine.
-
#successful_results ⇒ Object
Get successful remediation results.
-
#summary ⇒ Object
Get summary of remediation results.
-
#total_changes ⇒ Object
Get total number of changes made.
Constructor Details
#initialize(profile) ⇒ RemediationEngine
Returns a new instance of RemediationEngine.
8 9 10 11 |
# File 'lib/svg_conform/remediation_engine.rb', line 8 def initialize(profile) @profile = profile @results = [] end |
Instance Attribute Details
#profile ⇒ Object (readonly)
Returns the value of attribute profile.
6 7 8 |
# File 'lib/svg_conform/remediation_engine.rb', line 6 def profile @profile end |
#results ⇒ Object (readonly)
Returns the value of attribute results.
6 7 8 |
# File 'lib/svg_conform/remediation_engine.rb', line 6 def results @results end |
Instance Method Details
#applicable_remediations(failed_requirements) ⇒ Object
Get remediations that would apply to given failed requirements
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/svg_conform/remediation_engine.rb', line 30 def applicable_remediations(failed_requirements) failed_requirement_ids = failed_requirements.map do |req| req.requirement_id || req.rule&.id end @profile.remediations.select do |remediation| remediation.targets.any? do |req_id| failed_requirement_ids.include?(req_id) end end end |
#apply_remediations(document, validation_result) ⇒ Object
Apply remediations for failed requirements
14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/svg_conform/remediation_engine.rb', line 14 def apply_remediations(document, validation_result) @results.clear # Group failed requirements by their remediations remediation_groups = group_requirements_by_remediations(validation_result.failed_requirements) # Apply each remediation only once, even if it targets multiple failed requirements remediation_groups.each do |remediation, failed_requirements| result = remediation.execute(document, failed_requirements) @results << result end @results end |
#failed_results ⇒ Object
Get failed remediation results
64 65 66 |
# File 'lib/svg_conform/remediation_engine.rb', line 64 def failed_results @results.select(&:failure?) end |
#has_remediations? ⇒ Boolean
Check if any remediations are available for the profile
43 44 45 |
# File 'lib/svg_conform/remediation_engine.rb', line 43 def has_remediations? @profile.remediation_count.positive? end |
#successful_results ⇒ Object
Get successful remediation results
59 60 61 |
# File 'lib/svg_conform/remediation_engine.rb', line 59 def successful_results @results.select(&:success?) end |
#summary ⇒ Object
Get summary of remediation results
48 49 50 51 52 53 54 55 56 |
# File 'lib/svg_conform/remediation_engine.rb', line 48 def summary return "No remediations applied" if @results.empty? successful = @results.count(&:success?) failed = @results.count(&:failure?) total_changes = @results.sum(&:changes_count) "Applied #{successful} remediations successfully, #{failed} failed. Total changes: #{total_changes}" end |
#total_changes ⇒ Object
Get total number of changes made
69 70 71 |
# File 'lib/svg_conform/remediation_engine.rb', line 69 def total_changes @results.sum(&:changes_count) end |