Class: Ddr::File

Inherits:
Valkyrie::Resource
  • Object
show all
Defined in:
app/models/ddr/file.rb

Constant Summary collapse

DEFAULT_FILE_EXTENSION =
'bin'

Instance Method Summary collapse

Instance Method Details

#contentObject



11
12
13
# File 'app/models/ddr/file.rb', line 11

def content
  file.read
end

#default_file_extensionObject

Return default file extension for file based on MIME type



36
37
38
39
40
41
42
43
44
45
# File 'app/models/ddr/file.rb', line 36

def default_file_extension
  mimetypes = MIME::Types[media_type]
  return mimetypes.first.preferred_extension unless mimetypes.empty?
  case media_type
  when 'application/n-triples'
    'txt'
  else
    DEFAULT_FILE_EXTENSION
  end
end

#fileObject



15
16
17
# File 'app/models/ddr/file.rb', line 15

def file
  Ddr.storage_adapter.find_by(id: file_identifier)
end

#file_created_atObject



19
20
21
# File 'app/models/ddr/file.rb', line 19

def file_created_at
  ::File::Stat.new(Ddr.storage_adapter.file_path(file_identifier)).ctime
end

#file_pathObject



23
24
25
# File 'app/models/ddr/file.rb', line 23

def file_path
  Ddr.storage_adapter.file_path(file_identifier)
end

#file_sizeObject



27
28
29
# File 'app/models/ddr/file.rb', line 27

def file_size
  file.size
end

#sha1Object



31
32
33
# File 'app/models/ddr/file.rb', line 31

def sha1
  digest.detect(&:sha1?)&.value
end

#stored_checksums_valid?Boolean

Returns:

  • (Boolean)


47
48
49
50
# File 'app/models/ddr/file.rb', line 47

def stored_checksums_valid?
  checksums = digest.each_with_object({}) { |dgst, memo| memo[dgst.type] = dgst.value }
  file.valid? digests: checksums
end

#validate_checksum!(checksum_value, checksum_type) ⇒ Object

Raises:



52
53
54
55
56
57
58
59
60
61
# File 'app/models/ddr/file.rb', line 52

def validate_checksum!(checksum_value, checksum_type)
  raise Ddr::Error, I18n.t('ddr.checksum.validation.must_be_stored') unless file_identifier.present?
  raise Ddr::ChecksumInvalid, I18n.t('ddr.checksum.validation.internal_check_failed') unless stored_checksums_valid?
  if file.valid? digests: { checksum_type => checksum_value }
    I18n.t('ddr.checksum.validation.valid', type: checksum_type, value: checksum_value)
  else
    raise Ddr::ChecksumInvalid,
          I18n.t('ddr.checksum.validation.invalid', type: checksum_type, value: checksum_value)
  end
end