Sha256: eeecc2a2ecc9f5445e547047772e8b9c6cb2d93109d82db8a3978d9da3aa1538

Contents?: true

Size: 950 Bytes

Versions: 6

Compression:

Stored size: 950 Bytes

Contents

require 'iiif/presentation'

module Spotlight
  module Resources
    # harvest Images from IIIF Manifest and turn them into a Spotlight::Resource
    # Note: IIIF API : http://iiif.io/api/presentation/2.0
    class IiifHarvester < Spotlight::Resource
      self.document_builder_class = Spotlight::Resources::IiifBuilder
      self.weight = -5000

      validate :valid_url?

      def iiif_manifests
        @iiif_manifests ||= IiifService.parse(url)
      end

      private

      def valid_url?
        errors.add(:url, 'Invalid IIIF URL') unless url_is_iiif?(url)
      end

      def url_is_iiif?(url)
        valid_content_types = ['application/json', 'application/ld+json']
        req = Faraday.head(url)
        req = Faraday.get(url) if req.status == 405
        return unless req.success?

        valid_content_types.any? do |valid_type|
          req.headers['content-type'].include?(valid_type)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
blacklight-spotlight-2.4.1 app/models/spotlight/resources/iiif_harvester.rb
blacklight-spotlight-2.4.0 app/models/spotlight/resources/iiif_harvester.rb
blacklight-spotlight-2.3.3 app/models/spotlight/resources/iiif_harvester.rb
blacklight-spotlight-2.3.2 app/models/spotlight/resources/iiif_harvester.rb
blacklight-spotlight-2.3.1 app/models/spotlight/resources/iiif_harvester.rb
blacklight-spotlight-2.3.0 app/models/spotlight/resources/iiif_harvester.rb