Sha256: e57d6c1dcb68f62a0fb7697f1e5adef31678fae5bd443c10b3585283eba0c1f5

Contents?: true

Size: 1.05 KB

Versions: 55

Compression:

Stored size: 1.05 KB

Contents

require "tempfile"
require "delegate"

module Ddr::Models
  class WithContentFile < SimpleDelegator

    def initialize(obj, &block)
      super(obj)
      with_temp_file &block
    end

    # Yields path of tempfile containing content to block
    # @yield [String] the path to the tempfile containing content
    def with_temp_file
      filename = original_filename || content.default_file_name
      basename = [ File.basename(filename, ".*"), File.extname(filename) ]
      infile = Tempfile.open(basename, Ddr::Models.tempdir, encoding: 'ascii-8bit')
      begin
        infile.write(content.content)
        infile.close
        verify_checksum!(infile)
        yield infile.path
      ensure
        infile.close unless infile.closed?
        File.unlink(infile)
      end
    end

    def verify_checksum!(file)
      digest = Ddr::Utils.digest(File.read(file), content.checksumType)
      if digest != content.checksum
        raise ChecksumInvalid, "The checksum of the downloaded file does not match the stored checksum of the content."
      end
    end

  end
end

Version data entries

55 entries across 55 versions & 1 rubygems

Version Path
ddr-models-2.11.0 lib/ddr/models/with_content_file.rb
ddr-models-2.10.2 lib/ddr/models/with_content_file.rb
ddr-models-2.10.1 lib/ddr/models/with_content_file.rb
ddr-models-2.10.0 lib/ddr/models/with_content_file.rb
ddr-models-2.10.0.rc2 lib/ddr/models/with_content_file.rb
ddr-models-2.10.0.rc1 lib/ddr/models/with_content_file.rb
ddr-models-2.9.2 lib/ddr/models/with_content_file.rb
ddr-models-2.9.1 lib/ddr/models/with_content_file.rb
ddr-models-2.9.0 lib/ddr/models/with_content_file.rb
ddr-models-2.9.0.rc1 lib/ddr/models/with_content_file.rb
ddr-models-2.8.0 lib/ddr/models/with_content_file.rb
ddr-models-2.8.0.rc1 lib/ddr/models/with_content_file.rb
ddr-models-2.7.6 lib/ddr/models/with_content_file.rb
ddr-models-2.7.5 lib/ddr/models/with_content_file.rb
ddr-models-2.7.4 lib/ddr/models/with_content_file.rb
ddr-models-2.7.3 lib/ddr/models/with_content_file.rb
ddr-models-2.7.2 lib/ddr/models/with_content_file.rb
ddr-models-2.7.1 lib/ddr/models/with_content_file.rb
ddr-models-2.7.0 lib/ddr/models/with_content_file.rb
ddr-models-2.7.0.rc1 lib/ddr/models/with_content_file.rb