Class: Uniword::Validation::DocumentValidator

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

Overview

Main document validator orchestrator.

Responsibility: Orchestrate 7-layer document validation. Single Responsibility: Only coordinates validation layers.

Validates Word documents at 7 layers (MECE):

  1. File Structure - file exists, readable, valid extension

  2. ZIP Integrity - valid archive, no corruption

  3. OOXML Parts - required parts present

  4. XML Schema - well-formed XML

  5. Relationships - valid references

  6. Content Types - consistent type declarations

  7. Document Semantics - valid document structure

External configuration: config/validation_rules.yml

Examples:

Basic validation

validator = DocumentValidator.new
report = validator.validate('document.docx')
puts report.valid? # => true

Custom configuration

validator = DocumentValidator.new(
  config_file: 'custom_validation.yml'
)
report = validator.validate('document.docx')

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_file: nil) ⇒ DocumentValidator

Initialize document validator.

Examples:

Create with default config

validator = DocumentValidator.new

Create with custom config

validator = DocumentValidator.new(
  config_file: 'config/custom_validation.yml'
)

Parameters:

  • config_file (String) (defaults to: nil)

    Path to configuration file



53
54
55
56
# File 'lib/uniword/validation/document_validator.rb', line 53

def initialize(config_file: nil)
  @config = load_config(config_file)
  @validators = initialize_validators
end

Instance Attribute Details

#configHash (readonly)

Returns Configuration.

Returns:

  • (Hash)

    Configuration



37
38
39
# File 'lib/uniword/validation/document_validator.rb', line 37

def config
  @config
end

#validatorsArray<LayerValidator> (readonly)

Returns Validators.

Returns:



40
41
42
# File 'lib/uniword/validation/document_validator.rb', line 40

def validators
  @validators
end

Instance Method Details

#valid?(path) ⇒ Boolean

Quick validity check (boolean).

Examples:

Quick check

if validator.valid?('document.docx')
  # Process document
end

Parameters:

  • path (String)

    Path to .docx file

Returns:

  • (Boolean)

    true if document is valid



98
99
100
# File 'lib/uniword/validation/document_validator.rb', line 98

def valid?(path)
  validate(path).valid?
end

#validate(path) ⇒ DocumentValidationReport

Validate a document file.

Runs all enabled validators in sequence. Can fail-fast on critical errors if configured.

Examples:

Validate a document

report = validator.validate('document.docx')
if report.valid?
  puts "Document is valid!"
else
  puts "Errors: #{report.errors.count}"
end

Parameters:

  • path (String)

    Path to .docx file

Returns:



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/uniword/validation/document_validator.rb', line 73

def validate(path)
  report = DocumentValidationReport.new(path)

  @validators.each do |validator|
    next unless validator.enabled?

    result = validator.validate(path)
    report.add_layer_result(validator.layer_name, result)

    # Fail fast if critical failure and configured to do so
    break if result.critical_failures? && fail_fast?
  end

  report
end