Class: SvgConform::RemediationEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/svg_conform/remediation_engine.rb

Overview

Engine for applying remediations to SVG documents based on validation failures

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#profileObject (readonly)

Returns the value of attribute profile.



6
7
8
# File 'lib/svg_conform/remediation_engine.rb', line 6

def profile
  @profile
end

#resultsObject (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_resultsObject

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

Returns:

  • (Boolean)


43
44
45
# File 'lib/svg_conform/remediation_engine.rb', line 43

def has_remediations?
  @profile.remediation_count.positive?
end

#successful_resultsObject

Get successful remediation results



59
60
61
# File 'lib/svg_conform/remediation_engine.rb', line 59

def successful_results
  @results.select(&:success?)
end

#summaryObject

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_changesObject

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