lib/cocina/models/validators/validator.rb in cocina-models-0.73.6 vs lib/cocina/models/validators/validator.rb in cocina-models-0.74.0
- old
+ new
@@ -6,16 +6,41 @@
# Perform validation against all other Validators
class Validator
VALIDATORS = [
OpenApiValidator,
DarkValidator,
+ PurlValidator,
CatalogLinksValidator,
DescriptionTypesValidator
].freeze
def self.validate(clazz, attributes)
- VALIDATORS.each { |validator| validator.validate(clazz, attributes) }
+ # This gets rid of nested model objects.
+ # Once DSA is on Rails 6, this can be:
+ # attributes_hash = attributes.to_h.deep_transform_values do |value|
+ # value.class.name.starts_with?('Cocina::Models') ? value.to_h : value
+ # end.with_indifferent_access
+ # And add require 'active_support/core_ext/hash/deep_transform_values' to models file.
+
+ # In the meantime, copying code.
+ attributes_hash = deep_transform_values(attributes.to_h) do |value|
+ value.class.name.starts_with?('Cocina::Models') ? value.to_h : value
+ end.with_indifferent_access
+
+ VALIDATORS.each { |validator| validator.validate(clazz, attributes_hash) }
end
+
+ def self.deep_transform_values(object, &block)
+ case object
+ when Hash
+ object.transform_values { |value| deep_transform_values(value, &block) }
+ when Array
+ object.map { |e| deep_transform_values(e, &block) }
+ else
+ yield(object)
+ end
+ end
+ private_class_method :deep_transform_values
end
end
end
end