Class: Assembly::ObjectFile
- Inherits:
-
Object
- Object
- Assembly::ObjectFile
- Defined in:
- lib/assembly/object_file.rb,
lib/assembly/object_file/version.rb
Overview
This class contains generic methods to operate on any file.
Constant Summary collapse
- VALID_MIMETYPE_METHODS =
%i[override exif file extension].freeze
- VERSION =
Gem version
'2.1.3'
Instance Attribute Summary collapse
-
#file_attributes ⇒ Object
Returns the value of attribute file_attributes.
-
#label ⇒ Object
Returns the value of attribute label.
-
#mime_type_order ⇒ Object
Returns the value of attribute mime_type_order.
-
#path ⇒ Object
Returns the value of attribute path.
-
#provider_md5 ⇒ Object
Returns the value of attribute provider_md5.
-
#provider_sha1 ⇒ Object
Returns the value of attribute provider_sha1.
-
#relative_path ⇒ Object
Returns the value of attribute relative_path.
Class Method Summary collapse
-
.common_path(strings) ⇒ String
Example: puts Assembly::ObjectFile.common_prefix() # => ‘/Users/peter/0’.
Instance Method Summary collapse
- #dirname ⇒ Object
-
#exif ⇒ MiniExiftool
Exif mini_exiftool gem object wrapper for exiftool.
- #ext ⇒ Object
-
#file_exists? ⇒ Boolean
File exists and is not a directory.
- #filename ⇒ Object
- #filename_without_ext ⇒ Object
-
#filesize ⇒ Integer
File size in bytes.
-
#image? ⇒ Boolean
True if the mime-types gem recognizes it as an image.
-
#initialize(path, params = {}) ⇒ ObjectFile
constructor
A new instance of ObjectFile.
-
#jp2able? ⇒ Boolean
True if we can create a jp2 from the file.
-
#md5 ⇒ String
Computed md5 checksum.
-
#mimetype ⇒ String
Returns mimetype information for the current file based on the ordering set in default_mime_type_order We stop computing mimetypes as soon as we have a method that returns a value.
-
#object_type ⇒ Symbol
The type of object, could be :application (for PDF or Word, etc), :audio, :image, :message, :model, :multipart, :text or :video.
-
#sha1 ⇒ String
Computed sha1 checksum.
-
#valid_image? ⇒ Boolean
True if the mime-types gem recognizes it as an image AND it is a jp2 or jp2able?.
Constructor Details
#initialize(path, params = {}) ⇒ ObjectFile
Returns a new instance of ObjectFile.
52 53 54 55 56 57 58 59 60 |
# File 'lib/assembly/object_file.rb', line 52 def initialize(path, params = {}) @path = path @label = params[:label] @file_attributes = params[:file_attributes] @relative_path = params[:relative_path] @provider_md5 = params[:provider_md5] @provider_sha1 = params[:provider_sha1] @mime_type_order = params[:mime_type_order] || default_mime_type_order end |
Instance Attribute Details
#file_attributes ⇒ Object
Returns the value of attribute file_attributes.
30 31 32 |
# File 'lib/assembly/object_file.rb', line 30 def file_attributes @file_attributes end |
#label ⇒ Object
Returns the value of attribute label.
30 31 32 |
# File 'lib/assembly/object_file.rb', line 30 def label @label end |
#mime_type_order ⇒ Object
Returns the value of attribute mime_type_order.
30 31 32 |
# File 'lib/assembly/object_file.rb', line 30 def mime_type_order @mime_type_order end |
#path ⇒ Object
Returns the value of attribute path.
30 31 32 |
# File 'lib/assembly/object_file.rb', line 30 def path @path end |
#provider_md5 ⇒ Object
Returns the value of attribute provider_md5.
30 31 32 |
# File 'lib/assembly/object_file.rb', line 30 def provider_md5 @provider_md5 end |
#provider_sha1 ⇒ Object
Returns the value of attribute provider_sha1.
30 31 32 |
# File 'lib/assembly/object_file.rb', line 30 def provider_sha1 @provider_sha1 end |
#relative_path ⇒ Object
Returns the value of attribute relative_path.
30 31 32 |
# File 'lib/assembly/object_file.rb', line 30 def relative_path @relative_path end |
Class Method Details
.common_path(strings) ⇒ String
Example:
puts Assembly::ObjectFile.common_prefix(['/Users/peter/00/test.tif','/Users/peter/05/test.jp2'])
# => '/Users/peter/0'
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/assembly/object_file.rb', line 16 def self.common_path(strings) return nil if strings.empty? n = 0 x = strings.last n += 1 while strings.all? { |s| s[n] && (s[n] == x[n]) } common_prefix = x[0...n] if common_prefix[-1, 1] == '/' # check if last element of the common string is the end of a directory common_prefix # if not, split string along directories, and reject last one else "#{common_prefix.split('/')[0..-2].join('/')}/" # if it was, then return the common prefix directly end end |
Instance Method Details
#dirname ⇒ Object
66 67 68 |
# File 'lib/assembly/object_file.rb', line 66 def dirname File.dirname(path) end |
#exif ⇒ MiniExiftool
Returns exif mini_exiftool gem object wrapper for exiftool.
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/assembly/object_file.rb', line 79 def exif @exif ||= begin check_for_file MiniExiftool.new(path, replace_invalid_chars: '?') rescue MiniExiftool::Error # MiniExiftool may raise an error on files it doesn't know how to handle (disk images for example) # but we don't want this to prevent an ObjectFile from being created, so just swallow it. nil end end |
#ext ⇒ Object
70 71 72 |
# File 'lib/assembly/object_file.rb', line 70 def ext File.extname(path) end |
#file_exists? ⇒ Boolean
Returns file exists and is not a directory.
156 157 158 |
# File 'lib/assembly/object_file.rb', line 156 def file_exists? @file_exists ||= (File.exist?(path) && !File.directory?(path)) end |
#filename ⇒ Object
62 63 64 |
# File 'lib/assembly/object_file.rb', line 62 def filename File.basename(path) end |
#filename_without_ext ⇒ Object
74 75 76 |
# File 'lib/assembly/object_file.rb', line 74 def filename_without_ext File.basename(path, ext) end |
#filesize ⇒ Integer
Returns file size in bytes.
150 151 152 153 |
# File 'lib/assembly/object_file.rb', line 150 def filesize check_for_file @filesize ||= File.size(path) end |
#image? ⇒ Boolean
Returns true if the mime-types gem recognizes it as an image.
125 126 127 128 129 130 131 132 |
# File 'lib/assembly/object_file.rb', line 125 def image? return false if object_type != :image # We exclude TARGA images here because we've seen where the file is a disk image and # when we look for a mime type it is `image/x-tga', however it is not # recognizable by exiftool. See https://github.com/sul-dlss/assembly-objectfile/issues/98 mimetype != 'image/x-tga' end |
#jp2able? ⇒ Boolean
Returns true if we can create a jp2 from the file.
143 144 145 146 147 |
# File 'lib/assembly/object_file.rb', line 143 def jp2able? return false unless exif Assembly::VALID_IMAGE_MIMETYPES.include?(mimetype) end |
#md5 ⇒ String
Returns computed md5 checksum.
91 92 93 94 |
# File 'lib/assembly/object_file.rb', line 91 def md5 check_for_file unless @md5 @md5 ||= Digest::MD5.file(path).hexdigest end |
#mimetype ⇒ String
Returns mimetype information for the current file based on the ordering set in default_mime_type_order
We stop computing mimetypes as soon as we have a method that returns a value
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/assembly/object_file.rb', line 105 def mimetype @mimetype ||= begin check_for_file mimetype = '' mime_type_order.each do |mime_type_method| mimetype = send("#{mime_type_method}_mimetype") if VALID_MIMETYPE_METHODS.include?(mime_type_method) break if mimetype.present? end mimetype end end |
#object_type ⇒ Symbol
Returns the type of object, could be :application (for PDF or Word, etc), :audio, :image, :message, :model, :multipart, :text or :video.
119 120 121 122 |
# File 'lib/assembly/object_file.rb', line 119 def object_type lookup = MIME::Types[mimetype][0] lookup.nil? ? :other : lookup.media_type.to_sym end |
#sha1 ⇒ String
Returns computed sha1 checksum.
97 98 99 100 |
# File 'lib/assembly/object_file.rb', line 97 def sha1 check_for_file unless @sha1 @sha1 ||= Digest::SHA1.file(path).hexdigest end |
#valid_image? ⇒ Boolean
Returns true if the mime-types gem recognizes it as an image AND it is a jp2 or jp2able?.
136 137 138 139 140 |
# File 'lib/assembly/object_file.rb', line 136 def valid_image? return false unless image? mimetype == 'image/jp2' || jp2able? end |