Class: Cocina::Models::Validators::CompositeStructuralValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/cocina/models/validators/composite_structural_validator.rb

Overview

Composite validator for structural metadata that uses a visitor pattern to validate files in a single pass.

Constant Summary collapse

VALIDATORS =
[
  DarkVisitorValidator,
  LanguageTagVisitorValidator,
  ReservedFilenameVisitorValidator
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(clazz, attributes, validators: VALIDATORS) ⇒ CompositeStructuralValidator

Returns a new instance of CompositeStructuralValidator.



18
19
20
21
22
# File 'lib/cocina/models/validators/composite_structural_validator.rb', line 18

def initialize(clazz, attributes, validators: VALIDATORS)
  @clazz = clazz
  @attributes = attributes
  @validators = validators.map { |v| v.new(attributes) }
end

Class Method Details

.validate(clazz, attributes) ⇒ Object



14
15
16
# File 'lib/cocina/models/validators/composite_structural_validator.rb', line 14

def self.validate(clazz, attributes)
  new(clazz, attributes).validate
end

Instance Method Details

#validateObject



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/cocina/models/validators/composite_structural_validator.rb', line 24

def validate
  return unless meets_preconditions?

  Array(attributes.dig(:structural, :contains)).each do |fileset_hash|
    Array(fileset_hash.dig(:structural, :contains)).each do |file_hash|
      validators.each { |validator| validator.visit_file(file_hash:) }
    end
  end

  validators.each(&:validate!)
end