Sha256: d8f6f040e64f8d93afde8d760380963541ced7d367b8eddf6d7b7b1f52d39c7a

Contents?: true

Size: 1.07 KB

Versions: 29

Compression:

Stored size: 1.07 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.checksum.algorithm)
      if digest != content.checksum.value
        raise ChecksumInvalid, "The checksum of the downloaded file does not match the stored checksum of the content."
      end
    end

  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
ddr-models-3.0.8 lib/ddr/models/with_content_file.rb
ddr-models-3.0.7 lib/ddr/models/with_content_file.rb
ddr-models-3.0.6 lib/ddr/models/with_content_file.rb
ddr-models-3.0.5 lib/ddr/models/with_content_file.rb
ddr-models-3.0.4 lib/ddr/models/with_content_file.rb
ddr-models-3.0.3 lib/ddr/models/with_content_file.rb
ddr-models-3.0.2 lib/ddr/models/with_content_file.rb
ddr-models-3.0.1 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.rc6 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.rc5 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.rc4 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.rc3 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.rc2 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.rc1 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.beta.22 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.beta.21 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.beta.20 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.beta.18 lib/ddr/models/with_content_file.rb
ddr-models-3.0.0.beta.17 lib/ddr/models/with_content_file.rb