Class: Uniword::Validation::DocumentValidator
- Inherits:
-
Object
- Object
- Uniword::Validation::DocumentValidator
- 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):
-
File Structure - file exists, readable, valid extension
-
ZIP Integrity - valid archive, no corruption
-
OOXML Parts - required parts present
-
XML Schema - well-formed XML
-
Relationships - valid references
-
Content Types - consistent type declarations
-
Document Semantics - valid document structure
External configuration: config/validation_rules.yml
Instance Attribute Summary collapse
-
#config ⇒ Hash
readonly
Configuration.
-
#validators ⇒ Array<LayerValidator>
readonly
Validators.
Instance Method Summary collapse
-
#initialize(config_file: nil) ⇒ DocumentValidator
constructor
Initialize document validator.
-
#valid?(path) ⇒ Boolean
Quick validity check (boolean).
-
#validate(path) ⇒ DocumentValidationReport
Validate a document file.
Constructor Details
#initialize(config_file: nil) ⇒ DocumentValidator
Initialize document validator.
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
#config ⇒ Hash (readonly)
Returns Configuration.
37 38 39 |
# File 'lib/uniword/validation/document_validator.rb', line 37 def config @config end |
#validators ⇒ Array<LayerValidator> (readonly)
Returns Validators.
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).
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.
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 |