Class: SvgConform::Validation::StructuralInvalidityTracker
- Inherits:
-
Object
- Object
- SvgConform::Validation::StructuralInvalidityTracker
- Defined in:
- lib/svg_conform/validation/structural_invalidity_tracker.rb
Overview
Tracks structurally invalid nodes during validation Separated from ValidationContext for better separation of concerns
Instance Method Summary collapse
-
#clear ⇒ Object
Clear all tracked invalid nodes.
-
#count ⇒ Object
Get the count of structurally invalid nodes.
-
#initialize(node_id_generator:) ⇒ StructuralInvalidityTracker
constructor
A new instance of StructuralInvalidityTracker.
-
#mark_descendants_invalid(node) ⇒ Object
Mark all descendants of a node as structurally invalid.
-
#mark_node_structurally_invalid(node) ⇒ Object
Mark a node as structurally invalid (e.g., invalid parent-child relationship) Other requirements should skip attribute validation on these nodes Also marks all descendants as invalid since they'll be removed with the parent.
-
#node_structurally_invalid?(node) ⇒ Boolean
Check if a node is structurally invalid.
Constructor Details
#initialize(node_id_generator:) ⇒ StructuralInvalidityTracker
Returns a new instance of StructuralInvalidityTracker.
10 11 12 13 |
# File 'lib/svg_conform/validation/structural_invalidity_tracker.rb', line 10 def initialize(node_id_generator:) @structurally_invalid_node_ids = Set.new @node_id_generator = node_id_generator end |
Instance Method Details
#clear ⇒ Object
Clear all tracked invalid nodes
53 54 55 |
# File 'lib/svg_conform/validation/structural_invalidity_tracker.rb', line 53 def clear @structurally_invalid_node_ids.clear end |
#count ⇒ Object
Get the count of structurally invalid nodes
58 59 60 |
# File 'lib/svg_conform/validation/structural_invalidity_tracker.rb', line 58 def count @structurally_invalid_node_ids.size end |
#mark_descendants_invalid(node) ⇒ Object
Mark all descendants of a node as structurally invalid
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/svg_conform/validation/structural_invalidity_tracker.rb', line 29 def mark_descendants_invalid(node) # In SAX mode, ElementProxy doesn't have children yet # Children will be validated individually and will check parent validity return unless node.respond_to?(:children) && node.children node.children.each do |child| child_id = @node_id_generator.call(child) next if child_id.nil? # Skip if can't generate ID @structurally_invalid_node_ids.add(child_id) # Recursively mark descendants mark_descendants_invalid(child) end end |
#mark_node_structurally_invalid(node) ⇒ Object
Mark a node as structurally invalid (e.g., invalid parent-child relationship) Other requirements should skip attribute validation on these nodes Also marks all descendants as invalid since they'll be removed with the parent
18 19 20 21 22 23 24 25 26 |
# File 'lib/svg_conform/validation/structural_invalidity_tracker.rb', line 18 def mark_node_structurally_invalid(node) node_id = @node_id_generator.call(node) return if node_id.nil? # Safety check @structurally_invalid_node_ids.add(node_id) # Mark all descendants as invalid too mark_descendants_invalid(node) end |
#node_structurally_invalid?(node) ⇒ Boolean
Check if a node is structurally invalid
45 46 47 48 49 50 |
# File 'lib/svg_conform/validation/structural_invalidity_tracker.rb', line 45 def node_structurally_invalid?(node) node_id = @node_id_generator.call(node) return false if node_id.nil? # Safety check @structurally_invalid_node_ids.include?(node_id) end |