Class: SvgConform::Requirements::BaseRequirement

Inherits:
Lutaml::Model::Serializable
  • Object
show all
Defined in:
lib/svg_conform/requirements/base_requirement.rb

Overview

Base class for all validation requirements

Instance Method Summary collapse

Instance Method Details

#check(node, context) ⇒ Object

Main validation method - must be implemented by subclasses

Raises:

  • (NotImplementedError)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


74
75
76
# File 'lib/svg_conform/requirements/base_requirement.rb', line 74

def text?(node)
  node.respond_to?(:text?) && node.text?
end

#to_sObject



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