Class: Uniword::Validation::LinkValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/validation/link_validator.rb

Overview

Main orchestrator for link validation.

Responsibility: Coordinate link validation across entire document. Single Responsibility: Link validation orchestration only.

The LinkValidator:

  • Loads configuration from external YAML

  • Initializes appropriate checkers

  • Finds all links in document

  • Routes each link to appropriate checker

  • Aggregates results into ValidationReport

Follows Open/Closed principle:

  • Adding new checker types requires no changes to this class

  • Checkers are configured externally

Examples:

Basic usage

validator = LinkValidator.new
report = validator.validate(document)
puts "Valid: #{report.valid?}"
report.export_html('report.html')

Custom configuration

validator = LinkValidator.new(
  config_file: 'custom_validation_rules.yml'
)
report = validator.validate(document)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_file: "link_validation_rules") ⇒ LinkValidator

Initialize a new LinkValidator.

Examples:

Create validator

validator = LinkValidator.new

Custom config file

validator = LinkValidator.new(
  config_file: 'config/custom_rules.yml'
)

Parameters:

  • config_file (String) (defaults to: "link_validation_rules")

    Path to configuration file



52
53
54
55
# File 'lib/uniword/validation/link_validator.rb', line 52

def initialize(config_file: "link_validation_rules")
  @config = load_configuration(config_file)
  @checkers = initialize_checkers
end

Instance Attribute Details

#checkersArray<LinkChecker> (readonly)

Returns Registered checkers.

Returns:



39
40
41
# File 'lib/uniword/validation/link_validator.rb', line 39

def checkers
  @checkers
end

#configHash (readonly)

Returns Loaded configuration.

Returns:

  • (Hash)

    Loaded configuration



36
37
38
# File 'lib/uniword/validation/link_validator.rb', line 36

def config
  @config
end

Instance Method Details

#validate(document) ⇒ ValidationReport

Validate all links in a document.

Examples:

Validate document

report = validator.validate(document)
puts "Found #{report.total_count} links"
puts "Failures: #{report.failure_count}"

Parameters:

  • document (Object)

    The document to validate

Returns:



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/uniword/validation/link_validator.rb', line 66

def validate(document)
  report = ValidationReport.new

  # Validate hyperlinks
  validate_hyperlinks(document, report)

  # Validate bookmarks (cross-references)
  validate_bookmarks(document, report)

  # Validate footnote references
  validate_footnotes(document, report)

  report
end