Module: Uniword::Validation::Rules::Registry

Defined in:
lib/uniword/validation/rules/registry.rb

Overview

Registry for validation rules. Supports registration and lookup.

Rules are registered globally and discovered by category or code. Users can add custom rules by subclassing Base and calling register.

Examples:

Register a rule

Rules.register(MyCustomRule)

Get all rules

Rules.all  # => [#<StyleReferencesRule>, #<FootnotesRule>, ...]

Get rules by category

Rules.for_category(:footnotes)  # => [#<FootnotesRule>]

Class Method Summary collapse

Class Method Details

.allArray<Base>

Get all registered rule instances.

Returns:



35
36
37
# File 'lib/uniword/validation/rules/registry.rb', line 35

def self.all
  @rules.map(&:new)
end

.find(code) ⇒ Base?

Find a rule by its code.

Parameters:

  • code (String)

    Rule code (e.g., “DOC-020”)

Returns:



51
52
53
# File 'lib/uniword/validation/rules/registry.rb', line 51

def self.find(code)
  all.find { |r| r.code == code }
end

.for_category(category) ⇒ Array<Base>

Get rule instances for a specific category.

Parameters:

  • category (Symbol)

    Category name

Returns:



43
44
45
# File 'lib/uniword/validation/rules/registry.rb', line 43

def self.for_category(category)
  all.select { |r| r.category == category }
end

.register(rule_class) ⇒ Object

Register a validation rule class.

Parameters:

  • rule_class (Class)

    A subclass of Base



26
27
28
29
30
# File 'lib/uniword/validation/rules/registry.rb', line 26

def self.register(rule_class)
  @mutex.synchronize do
    @rules << rule_class unless @rules.include?(rule_class)
  end
end

.reset!Object

Clear all registered rules (useful for testing).



56
57
58
# File 'lib/uniword/validation/rules/registry.rb', line 56

def self.reset!
  @mutex.synchronize { @rules.clear }
end

.rule_classesArray<Class>

Get all registered rule classes.

Returns:

  • (Array<Class>)


63
64
65
# File 'lib/uniword/validation/rules/registry.rb', line 63

def self.rule_classes
  @rules.dup
end