Class: SvgConform::Requirements::BaseRequirement
- Inherits:
-
Lutaml::Model::Serializable
- Object
- Lutaml::Model::Serializable
- SvgConform::Requirements::BaseRequirement
- Defined in:
- lib/svg_conform/requirements/base_requirement.rb
Overview
Base class for all validation requirements
Direct Known Subclasses
AllowedElementsRequirement, ColorRestrictionsRequirement, FontFamilyRequirement, ForbiddenContentRequirement, IdCollectionRequirement, IdReferenceRequirement, InvalidIdReferencesRequirement, LinkValidationRequirement, NamespaceAttributesRequirement, NamespaceRequirement, NoExternalCssRequirement, NoExternalFontsRequirement, NoExternalImagesRequirement, StylePromotionRequirement, StyleRequirement, ViewboxRequiredRequirement
Instance Method Summary collapse
-
#check(node, context) ⇒ Object
Main validation method - must be implemented by subclasses.
-
#collect_sax_data(element, context) ⇒ Object
Called for each element to collect data for deferred validation Override in subclasses that need to collect data.
-
#element?(node) ⇒ Boolean
Helper method to check if a node is an element.
-
#get_attribute(node, name) ⇒ Object
Helper method to get attribute value.
-
#get_attributes(node) ⇒ Object
Helper method to get all attributes.
-
#has_attribute?(node, name) ⇒ Boolean
Helper method to check if attribute exists.
-
#needs_deferred_validation? ⇒ Boolean
Indicates if requirement needs deferred validation Override to return true for requirements that need forward references.
-
#remove_attribute(node, name) ⇒ Object
Helper method to remove attribute.
-
#set_attribute(node, name, value) ⇒ Object
Helper method to set attribute value.
-
#should_check_node?(node, context = nil) ⇒ Boolean
Determine if this requirement should check a specific node.
-
#text?(node) ⇒ Boolean
Helper method to check if a node is text.
- #to_s ⇒ Object
-
#validate_document(document, context) ⇒ Object
Validate the entire document (called once per requirement).
-
#validate_sax_complete(context) ⇒ Object
Called at end of document for deferred validation Override in subclasses that need full document data.
-
#validate_sax_element(element, context) ⇒ Object
Called for each element during SAX parsing Override in subclasses for immediate validation.
Instance Method Details
#check(node, context) ⇒ Object
Main validation method - must be implemented by subclasses
20 21 22 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 20 def check(node, context) raise NotImplementedError, "Subclasses must implement #check" end |
#collect_sax_data(element, context) ⇒ Object
Called for each element to collect data for deferred validation Override in subclasses that need to collect data
42 43 44 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 42 def collect_sax_data(element, context) # Default: no data collection end |
#element?(node) ⇒ Boolean
Helper method to check if a node is an element
69 70 71 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 69 def element?(node) node.respond_to?(:name) && !node.name.nil? end |
#get_attribute(node, name) ⇒ Object
Helper method to get attribute value
79 80 81 82 83 84 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 79 def get_attribute(node, name) return nil unless node.respond_to?(:attribute) attr = node.attribute(name) attr&.value end |
#get_attributes(node) ⇒ Object
Helper method to get all attributes
110 111 112 113 114 115 116 117 118 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 110 def get_attributes(node) return {} unless node.respond_to?(:attributes) attrs = node.attributes || [] # Convert array of Moxml::Attribute objects to hash attrs.each_with_object({}) do |attr, hash| hash[attr.name] = attr.value end end |
#has_attribute?(node, name) ⇒ Boolean
Helper method to check if attribute exists
103 104 105 106 107 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 103 def has_attribute?(node, name) return false unless node.respond_to?(:attribute) !node.attribute(name).nil? end |
#needs_deferred_validation? ⇒ Boolean
Indicates if requirement needs deferred validation Override to return true for requirements that need forward references
54 55 56 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 54 def needs_deferred_validation? false end |
#remove_attribute(node, name) ⇒ Object
Helper method to remove attribute
95 96 97 98 99 100 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 95 def remove_attribute(node, name) return false unless node.respond_to?(:remove_attribute) node.remove_attribute(name) true end |
#set_attribute(node, name, value) ⇒ Object
Helper method to set attribute value
87 88 89 90 91 92 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 87 def set_attribute(node, name, value) return false unless node.respond_to?(:set_attribute) node.set_attribute(name, value) true end |
#should_check_node?(node, context = nil) ⇒ Boolean
Determine if this requirement should check a specific node
59 60 61 62 63 64 65 66 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 59 def should_check_node?(node, context = nil) return false unless node.respond_to?(:name) && node.respond_to?(:attributes) # Skip structurally invalid nodes (and their children are automatically skipped by marking the parent) return false if context&.node_structurally_invalid?(node) true end |
#text?(node) ⇒ Boolean
Helper method to check if a node is text
74 75 76 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 74 def text?(node) node.respond_to?(:text?) && node.text? end |
#to_s ⇒ Object
120 121 122 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 120 def to_s "#{@id}: #{@description}" end |
#validate_document(document, context) ⇒ Object
Validate the entire document (called once per requirement)
25 26 27 28 29 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 25 def validate_document(document, context) document.traverse do |node| check(node, context) if should_check_node?(node, context) end end |
#validate_sax_complete(context) ⇒ Object
Called at end of document for deferred validation Override in subclasses that need full document data
48 49 50 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 48 def validate_sax_complete(context) # Default: no deferred validation end |
#validate_sax_element(element, context) ⇒ Object
Called for each element during SAX parsing Override in subclasses for immediate validation
35 36 37 38 |
# File 'lib/svg_conform/requirements/base_requirement.rb', line 35 def validate_sax_element(element, context) # Default: Empty - subclasses must override for SAX support # Cannot call check() here as it's abstract end |