Class: Ddr::Models::File

Inherits:
ActiveFedora::File
  • Object
show all
Extended by:
Deprecation
Defined in:
lib/ddr/models/file.rb

Direct Known Subclasses

StructuralMetadataFile

Constant Summary collapse

CONTENT =
"content".freeze
EXTRACTED_TEXT =
"extractedText".freeze
FITS =
"fits".freeze
STRUCT_METADATA =
"structMetadata".freeze
THUMBNAIL =
"thumbnail".freeze
DEFAULT_FILE_EXTENSION =
"bin"
STRFTIME_FORMAT =
"%Y-%m-%dT%H:%M:%S.%LZ"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.const_missing(name) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/ddr/models/file.rb', line 16

def self.const_missing(name)
  case name
    when :DESC_METADATA
      Deprecation.warn(self, "Ddr::File::DESC_METADATA is deprecated." \
                           " Use Ddr::Models::Metadata::DESC_METADATA instead.")
      Ddr::Models::::
  end
end

Instance Method Details

#content_digest(algorithm) ⇒ Object



58
59
60
# File 'lib/ddr/models/file.rb', line 58

def content_digest(algorithm)
  Ddr::Utils.digest(content, algorithm)
end

#create_date_stringObject



54
55
56
# File 'lib/ddr/models/file.rb', line 54

def create_date_string
  create_date.strftime(STRFTIME_FORMAT) if create_date
end

#default_file_extensionObject

Return default file extension for file based on MIME type



63
64
65
66
67
68
69
70
71
72
# File 'lib/ddr/models/file.rb', line 63

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

#default_file_nameObject

Return default file name



79
80
81
# File 'lib/ddr/models/file.rb', line 79

def default_file_name
  [ default_file_prefix, default_file_extension ].join(".")
end

#default_file_prefixObject



74
75
76
# File 'lib/ddr/models/file.rb', line 74

def default_file_prefix
  (id && id.gsub(/\//, "_")) || "NEW"
end

#dsCreateDateObject



32
33
34
35
# File 'lib/ddr/models/file.rb', line 32

def dsCreateDate
  Deprecation.warn(File, "`dsCreateDate` is no longer a file method. Use `create_date` instead.")
  create_date
end

#dsidObject



25
26
27
28
29
30
# File 'lib/ddr/models/file.rb', line 25

def dsid
  Deprecation.warn(File, "`dsid` is no longer a file method. Use `::File.basename(id)`.")
  if id
    ::File.basename(id)
  end
end

#tempfile(prefix: nil, suffix: nil) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/ddr/models/file.rb', line 83

def tempfile(prefix: nil, suffix: nil)
  if empty?
    raise Error, "Refusing to create tempfile for empty file!"
  end
  prefix ||= default_file_prefix + "--"
  suffix ||= "." + default_file_extension
  Tempfile.open [prefix, suffix], encoding: Encoding::ASCII_8BIT do |f|
    f.write(content)
    f.close
    yield f
  end
end

#validate_checksum!(checksum_value, checksum_type = nil) ⇒ Object

Raises:



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ddr/models/file.rb', line 37

def validate_checksum!(checksum_value, checksum_type=nil)
  raise Error, "Checksum cannot be validated on new file." if new_record?
  raise Error, "Checksum cannot be validated on unpersisted content." if content_changed?
  raise ChecksumInvalid, "The repository internal checksum validation failed." unless check_fixity
  algorithm = checksum_type || checksum.algorithm
  calculated_checksum = if algorithm == checksum.algorithm
                          checksum.value
                        else
                          content_digest(algorithm)
                        end
  if checksum_value == calculated_checksum
    "The checksum #{algorithm}:#{checksum_value} is valid for file #{::File.basename(id)}."
  else
    raise ChecksumInvalid, "The checksum #{algorithm}:#{checksum_value} is not valid for file #{::File.basename(id)}."
  end
end