Sha256: b52965eee283ca84ffa4d24589c35db9130e511a3d3e68ae6f4f6d45a089283e

Contents?: true

Size: 1.32 KB

Versions: 14

Compression:

Stored size: 1.32 KB

Contents

require 'mime/types'

module Hydra::Derivatives
  class TempfileService
    def self.create(file, &block)
      new(file).tempfile(&block)
    end

    attr_reader :source_file

    def initialize(source_file)
      @source_file = source_file
    end

    def tempfile(&block)
      if source_file.respond_to? :to_tempfile
        source_file.send(:to_tempfile, &block)
      elsif source_file.has_content?
        default_tempfile(&block)
      end
    end

    def default_tempfile(&_block)
      Tempfile.open(filename_for_characterization) do |f|
        f.binmode
        if source_file.content.respond_to? :read
          f.write(source_file.content.read)
        else
          f.write(source_file.content)
        end
        source_file.content.rewind if source_file.content.respond_to? :rewind
        f.rewind
        yield(f)
      end
    end

    def filename_for_characterization
      registered_mime_type = MIME::Types[source_file.mime_type].first
      Logger.warn "Unable to find a registered mime type for #{source_file.mime_type.inspect} on #{source_file.uri}" unless registered_mime_type
      extension = registered_mime_type ? ".#{registered_mime_type.extensions.first}" : ''
      version_id = 1 # TODO: fixme
      m = %r{/([^/]*)$}.match(source_file.uri)
      ["#{m[1]}-#{version_id}", extension.to_s]
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
hydra-derivatives-3.7.0 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.6.1 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.6.0 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.5.0 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.4.2 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.4.1 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.4.0 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.3.2 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.3.1 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.3.0 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.2.2 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.2.1 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.2.0 lib/hydra/derivatives/services/tempfile_service.rb
hydra-derivatives-3.1.4 lib/hydra/derivatives/services/tempfile_service.rb