Module: Ddr::Datastreams::DatastreamBehavior
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/ddr/datastreams/datastream_behavior.rb
Constant Summary collapse
- DEFAULT_FILE_EXTENSION =
"bin"
- STRFTIME_FORMAT =
"%Y-%m-%dT%H:%M:%S.%LZ"
Instance Method Summary collapse
- #content_digest(algorithm) ⇒ Object
- #create_date_string ⇒ Object
-
#default_file_extension ⇒ Object
Return default file extension for datastream based on MIME type.
-
#default_file_name ⇒ Object
Return default file name.
-
#default_file_prefix ⇒ Object
Return default file name prefix based on object PID.
- #file_name ⇒ Object
- #file_path ⇒ Object
- #file_paths ⇒ Object
-
#file_size ⇒ Object
Returns the size of the external file for the datastream.
- #tempfile(prefix: nil, suffix: nil) ⇒ Object
- #validate_checksum!(checksum, checksum_type = nil) ⇒ Object
- #version_history ⇒ Object
- #version_info ⇒ Object
- #version_uri ⇒ Object
Instance Method Details
#content_digest(algorithm) ⇒ Object
50 51 52 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 50 def content_digest algorithm Ddr::Utils.digest(self.content, algorithm) end |
#create_date_string ⇒ Object
46 47 48 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 46 def create_date_string dsCreateDate.strftime(STRFTIME_FORMAT) if dsCreateDate end |
#default_file_extension ⇒ Object
Return default file extension for datastream based on MIME type
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 86 def default_file_extension mimetypes = MIME::Types[mimeType] return mimetypes.first.extensions.first unless mimetypes.empty? case mimeType when 'application/n-triples' 'txt' else DEFAULT_FILE_EXTENSION end end |
#default_file_name ⇒ Object
Return default file name
103 104 105 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 103 def default_file_name [default_file_prefix, default_file_extension].join(".") end |
#default_file_prefix ⇒ Object
Return default file name prefix based on object PID
98 99 100 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 98 def default_file_prefix [pid.sub(/:/, '_'), dsid].join("_") end |
#file_name ⇒ Object
68 69 70 71 72 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 68 def file_name if path = file_path File.basename(path) end end |
#file_path ⇒ Object
62 63 64 65 66 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 62 def file_path if external? && dsLocation.present? && dsLocation.start_with?("file:") Ddr::Utils.path_from_uri(dsLocation) end end |
#file_paths ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 54 def file_paths if new? return Array(file_path) else versions.map(&:file_path).compact end end |
#file_size ⇒ Object
Returns the size of the external file for the datastream.
75 76 77 78 79 80 81 82 83 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 75 def file_size if external? if path = file_path File.size(path) end else dsSize end end |
#tempfile(prefix: nil, suffix: nil) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 107 def tempfile(prefix: nil, suffix: nil) if empty? raise Ddr::Models::Error, "Refusing to create tempfile for empty datastream!" 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, checksum_type = nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 15 def validate_checksum! checksum, checksum_type=nil raise Ddr::Models::Error, "Checksum cannot be validated on new datastream." if new? raise Ddr::Models::Error, "Checksum cannot be validated on unpersisted content." if content_changed? raise Ddr::Models::ChecksumInvalid, "The repository internal checksum validation failed." unless dsChecksumValid algorithm = checksum_type || self.checksumType ds_checksum = if !external? && algorithm == self.checksumType self.checksum else content_digest(algorithm) end if checksum == ds_checksum "The checksum [#{algorithm}]#{checksum} is valid for datastream #{version_info}." else raise Ddr::Models::ChecksumInvalid, "The checksum [#{algorithm}]#{checksum} is not valid for datastream #{version_info}." end end |
#version_history ⇒ Object
32 33 34 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 32 def version_history versions.map(&:profile) end |
#version_info ⇒ Object
41 42 43 44 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 41 def version_info # E.g., info:fedora/duke:1/content/content.0 [2013-09-26T20:00:03.357Z] "#{version_uri} [#{Ddr::Utils.ds_as_of_date_time(self)}]" unless new? end |
#version_uri ⇒ Object
36 37 38 39 |
# File 'lib/ddr/datastreams/datastream_behavior.rb', line 36 def version_uri # E.g., info:fedora/duke:1/content/content.0 ["info:fedora", pid, dsid, dsVersionID].join("/") unless new? end |