Class: Coradoc::Docx::Transform::RuleRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/docx/transform/rule_registry.rb

Overview

Registry for transform rules.

Manages registration and lookup of rules for OOXML element types. Rules are checked in priority order (highest first). Falls back to NullRule which raises ArgumentError.

Follows Open/Closed Principle: new rules are added by registering, not by modifying the registry class.

Instance Method Summary collapse

Constructor Details

#initializeRuleRegistry

Returns a new instance of RuleRegistry.



15
16
17
# File 'lib/coradoc/docx/transform/rule_registry.rb', line 15

def initialize
  @rules = []
end

Instance Method Details

#find_rule(element) ⇒ Rule

Find the first rule that matches the element

Parameters:

  • element (Object)

    OOXML element to find a rule for

Returns:

  • (Rule)

    matching rule

Raises:

  • (ArgumentError)

    if no rule matches



39
40
41
42
# File 'lib/coradoc/docx/transform/rule_registry.rb', line 39

def find_rule(element)
  @rules.find { |r| r.matches?(element) } ||
    raise(ArgumentError, "No transform rule registered for #{element.class}")
end

#matches?(element) ⇒ Boolean

Check if any rule matches the element

Parameters:

  • element (Object)

    element to check

Returns:

  • (Boolean)


48
49
50
# File 'lib/coradoc/docx/transform/rule_registry.rb', line 48

def matches?(element)
  @rules.any? { |r| r.matches?(element) }
end

#register(rule) ⇒ self

Register a rule instance

Parameters:

  • rule (Rule)

    the rule to register

Returns:

  • (self)


23
24
25
26
27
28
29
30
31
32
# File 'lib/coradoc/docx/transform/rule_registry.rb', line 23

def register(rule)
  unless rule.is_a?(Rule)
    raise ArgumentError,
          "Expected Rule, got #{rule.class}"
  end

  @rules << rule
  @rules.sort_by! { |r| -r.priority }
  self
end

#sizeInteger

Number of registered rules

Returns:

  • (Integer)


54
55
56
# File 'lib/coradoc/docx/transform/rule_registry.rb', line 54

def size
  @rules.size
end