Class: Uniword::Validation::Rules::NumberingRule

Inherits:
Base
  • Object
show all
Defined in:
lib/uniword/validation/rules/numbering_rule.rb

Overview

Validates numbering definitions are properly referenced.

DOC-010: numId references in document.xml exist in numbering.xml DOC-011: ilvl values within numId range DOC-012: Abstract numbering definitions are referenced

Constant Summary collapse

W_NS =
"http://schemas.openxmlformats.org/wordprocessingml/2006/main"

Instance Method Summary collapse

Methods inherited from Base

#description, #validity_rule

Instance Method Details

#applicable?(context) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/uniword/validation/rules/numbering_rule.rb', line 20

def applicable?(context)
  context.part_exists?("word/document.xml")
end

#categoryObject



17
# File 'lib/uniword/validation/rules/numbering_rule.rb', line 17

def category = :numbering

#check(context) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/uniword/validation/rules/numbering_rule.rb', line 24

def check(context)
  issues = []
  num_ids = context.numbering_ids

  doc = context.document_xml
  return issues unless doc

  # DOC-010: Check numId references
  doc.root.xpath(".//w:numId/@w:val", "w" => W_NS).each do |attr|
    next if num_ids.include?(attr.value)

    issues << issue(
      "numId '#{attr.value}' referenced but not defined in numbering.xml",
      part: "word/document.xml",
      suggestion: "Define numbering with numId '#{attr.value}' " \
                  "in numbering.xml, or fix the reference.",
    )
  end

  # DOC-012: Check unreferenced abstract num definitions
  check_abstract_refs(context, issues)

  issues
end

#codeObject



16
# File 'lib/uniword/validation/rules/numbering_rule.rb', line 16

def code = "DOC-010"

#severityObject



18
# File 'lib/uniword/validation/rules/numbering_rule.rb', line 18

def severity = "error"