Sha256: 6a533bf9003ad810459b765d8cc38e6156e360806661f37b204ffd9554041f2d

Contents?: true

Size: 1.09 KB

Versions: 43

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module Cocina
  module Models
    module Validators
      # Validates that Purl matches the external identifier (druid)
      class PurlValidator
        def self.validate(clazz, attributes)
          new(clazz, attributes).validate
        end

        def initialize(clazz, attributes)
          @clazz = clazz
          @attributes = attributes
        end

        def validate
          return unless meets_preconditions?

          return if identifier_from_druid == identifier_from_purl

          raise ValidationError, "Purl mismatch: #{druid} purl does not match object druid."
        end

        private

        attr_reader :clazz, :attributes

        def meets_preconditions?
          purl
        end

        def druid
          @druid ||= attributes[:externalIdentifier]
        end

        def purl
          @purl ||= attributes.dig(:description, :purl)
        end

        def identifier_from_druid
          druid.delete_prefix('druid:')
        end

        def identifier_from_purl
          purl.split('/').last
        end
      end
    end
  end
end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
cocina-models-0.89.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.88.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.87.1 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.87.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.86.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.85.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.84.5 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.84.4 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.84.3 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.84.2 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.84.1 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.84.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.83.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.82.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.81.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.80.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.79.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.78.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.77.0 lib/cocina/models/validators/purl_validator.rb
cocina-models-0.76.0 lib/cocina/models/validators/purl_validator.rb