Class: SvgConform::Requirements::ForbiddenContentRequirement

Inherits:
BaseRequirement
  • Object
show all
Defined in:
lib/svg_conform/requirements/forbidden_content_requirement.rb

Instance Method Summary collapse

Methods inherited from BaseRequirement

#collect_sax_data, #element?, #get_attribute, #get_attributes, #has_attribute?, #needs_deferred_validation?, #remove_attribute, #set_attribute, #should_check_node?, #text?, #to_s, #validate_sax_complete

Instance Method Details

#check(node, context) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/svg_conform/requirements/forbidden_content_requirement.rb', line 29

def check(node, context)
  return unless element?(node)

  # Check if this is a forbidden element
  if forbidden_elements.include?(node.name)
    context.add_error(
      requirement_id: id,
      message: "Forbidden element '#{node.name}' is not allowed",
      node: node,
      severity: :error,
    )
  end

  # Check for forbidden attributes
  if node.respond_to?(:attributes) && node.attributes
    node.attributes.each do |attr|
      attr_name = attr.respond_to?(:name) ? attr.name : attr.to_s

      if forbidden_attributes.include?(attr_name)
        context.add_error(
          requirement_id: id,
          message: "Forbidden attribute '#{attr_name}' is not allowed",
          node: node,
          severity: :error,
        )
      end
    end
  end
end

#validate_document(document, context) ⇒ Object



23
24
25
26
27
# File 'lib/svg_conform/requirements/forbidden_content_requirement.rb', line 23

def validate_document(document, context)
  document.traverse do |node|
    check(node, context) if should_check_node?(node)
  end
end

#validate_sax_element(element, context) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/svg_conform/requirements/forbidden_content_requirement.rb', line 59

def validate_sax_element(element, context)
  # Check if this is a forbidden element
  if forbidden_elements.include?(element.name)
    context.add_error(
      requirement_id: id,
      message: "Forbidden element '#{element.name}' is not allowed",
      node: element,
      severity: :error,
    )
  end

  # Check for forbidden attributes
  element.attributes.each do |attr|
    attr_name = attr.name

    if forbidden_attributes.include?(attr_name)
      context.add_error(
        requirement_id: id,
        message: "Forbidden attribute '#{attr_name}' is not allowed",
        node: element,
        severity: :error,
      )
    end
  end
end