Class: Uniword::Quality::QualityRule

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/quality/quality_rule.rb

Overview

Base class for document quality rules.

Responsibility: Define the interface for quality checking rules. Each rule checks one specific aspect of document quality.

Follows Single Responsibility Principle - one rule checks one quality aspect. Follows Open/Closed Principle - new rules can be added without modifying this class.

Examples:

Create a custom quality rule

class CustomRule < QualityRule
  def initialize(config = {})
    super(config)
    @threshold = config[:threshold] || 100
  end

  def check(document)
    violations = []
    # Perform checks and add violations
    violations
  end
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = {}) ⇒ QualityRule

Initialize quality rule

Parameters:

  • config (Hash) (defaults to: {})

    Rule configuration

Options Hash (config):

  • :enabled (Boolean)

    Whether rule is enabled



33
34
35
36
# File 'lib/uniword/quality/quality_rule.rb', line 33

def initialize(config = {})
  @config = config || {}
  @enabled = @config.fetch(:enabled, true)
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



27
28
29
# File 'lib/uniword/quality/quality_rule.rb', line 27

def config
  @config
end

#enabledObject (readonly)

Returns the value of attribute enabled.



27
28
29
# File 'lib/uniword/quality/quality_rule.rb', line 27

def enabled
  @enabled
end

Instance Method Details

#check(document) ⇒ Array<QualityViolation>

Check document for quality violations

Parameters:

  • document (Document)

    The document to check

Returns:

Raises:

  • (NotImplementedError)


49
50
51
# File 'lib/uniword/quality/quality_rule.rb', line 49

def check(document)
  raise NotImplementedError, "#{self.class} must implement #check"
end

#enabled?Boolean

Check if rule is enabled

Returns:

  • (Boolean)

    true if rule should be executed



41
42
43
# File 'lib/uniword/quality/quality_rule.rb', line 41

def enabled?
  @enabled
end

#nameString

Get rule name (used for identification)

Returns:

  • (String)

    Rule name



56
57
58
59
60
61
62
# File 'lib/uniword/quality/quality_rule.rb', line 56

def name
  self.class.name.split("::").last
    .gsub(/Rule$/, "")
    .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .downcase
end