Module: Assembly::ObjectFileable
- Included in:
- ObjectFile
- Defined in:
- lib/assembly-objectfile/object_fileable.rb
Overview
Common behaviors we need for other classes in the gem
Instance Attribute Summary collapse
-
#file_attributes ⇒ Object
Returns the value of attribute file_attributes.
-
#label ⇒ Object
Returns the value of attribute label.
-
#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.
Instance Method Summary collapse
-
#dirname ⇒ String
Base directory.
-
#dpg_basename ⇒ String
DPG base filename, removing the extension and the ‘00’,‘05’, etc.
-
#dpg_folder ⇒ String
DPG subfolder for the given filename, i.e.
-
#encoding ⇒ String
Encoding for supplied file.
-
#exif ⇒ MiniExiftool
Exif information stored as a hash and an object.
-
#exif_mimetype ⇒ String
Returns mimetype information for the current file based on exif data (if available and not a trusted source that we’d rather get from the file system command).
-
#ext ⇒ String
Filename extension.
-
#file_exists? ⇒ Boolean
Determines if the file exists (and is not a directory).
-
#file_mimetype ⇒ String
Returns mimetype information for the current file based on unix file system command.
-
#filename ⇒ String
Base filename.
-
#filename_without_ext ⇒ String
Base filename without extension.
-
#filesize ⇒ Integer
Returns file size information for the current file in bytes.
-
#has_color_profile? ⇒ Boolean
True if image has a color profile, false if not.
-
#image? ⇒ Boolean
If object is an image.
- #initialize(path, params = {}) ⇒ Object
-
#jp2able? ⇒ Boolean
Examines the input image for validity to create a jp2.
-
#md5 ⇒ String
Computes md5 checksum or returns cached value.
-
#mimetype ⇒ String
Returns mimetype information for the current file based on (1) exifdata (if available), (2) unix file type or (3) file extension using the mimetypes gem, in this priority order.
-
#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
Computes sha1 checksum or return cached value.
-
#valid_image? ⇒ Boolean
Examines the input image for validity.
Instance Attribute Details
#file_attributes ⇒ Object
Returns the value of attribute file_attributes.
8 9 10 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 8 def file_attributes @file_attributes end |
#label ⇒ Object
Returns the value of attribute label.
8 9 10 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 8 def label @label end |
#path ⇒ Object
Returns the value of attribute path.
8 9 10 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 8 def path @path end |
#provider_md5 ⇒ Object
Returns the value of attribute provider_md5.
8 9 10 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 8 def provider_md5 @provider_md5 end |
#provider_sha1 ⇒ Object
Returns the value of attribute provider_sha1.
8 9 10 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 8 def provider_sha1 @provider_sha1 end |
#relative_path ⇒ Object
Returns the value of attribute relative_path.
8 9 10 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 8 def relative_path @relative_path end |
Instance Method Details
#dirname ⇒ String
Returns base directory.
58 59 60 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 58 def dirname File.dirname(path) end |
#dpg_basename ⇒ String
Returns DPG base filename, removing the extension and the ‘00’,‘05’, etc. placeholders.
32 33 34 35 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 32 def dpg_basename file_parts = File.basename(path, ext).split('_') file_parts.size == 3 ? "#{file_parts[0]}_#{file_parts[2]}" : filename_without_ext end |
#dpg_folder ⇒ String
Returns DPG subfolder for the given filename, i.e. ‘00’,‘05’, etc.
41 42 43 44 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 41 def dpg_folder file_parts = File.basename(path, ext).split('_') file_parts.size == 3 ? file_parts[1] : '' end |
#encoding ⇒ String
Uses shell call to “file”, only expected to work on unix based systems
Returns encoding for supplied file.
160 161 162 163 164 165 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 160 def encoding @encoding ||= begin check_for_file `file --mime-encoding "#{path}"`.delete("\n").split(':')[1].strip end end |
#exif ⇒ MiniExiftool
Returns exif information stored as a hash and an object.
82 83 84 85 86 87 88 89 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 82 def exif @exif ||= begin check_for_file MiniExiftool.new(path, replace_invalid_chars: '?') rescue StandardError nil end end |
#exif_mimetype ⇒ String
Returns mimetype information for the current file based on exif data (if available and not a trusted source that we’d rather get from the file system command)
147 148 149 150 151 152 153 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 147 def exif_mimetype @exif_mimetype ||= begin check_for_file prefer_exif = !Assembly::TRUSTED_MIMETYPES.include?(file_mimetype) # if it's not a "trusted" mimetype and there is exif data; get the mimetype from the exif exif.mimetype if exif && exif.mimetype && prefer_exif end end |
#ext ⇒ String
Returns filename extension.
66 67 68 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 66 def ext File.extname(path) end |
#file_exists? ⇒ Boolean
Determines if the file exists (and is not a directory)
233 234 235 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 233 def file_exists? File.exist?(path) && !File.directory?(path) end |
#file_mimetype ⇒ String
Returns mimetype information for the current file based on unix file system command.
135 136 137 138 139 140 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 135 def file_mimetype @file_mimetype ||= begin check_for_file `file --mime-type "#{path}"`.delete("\n").split(':')[1].strip # first try and get the mimetype from the unix file command end end |
#filename ⇒ String
Returns base filename.
50 51 52 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 50 def filename File.basename(path) end |
#filename_without_ext ⇒ String
Returns base filename without extension.
74 75 76 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 74 def filename_without_ext File.basename(path, ext) end |
#filesize ⇒ Integer
Returns file size information for the current file in bytes.
223 224 225 226 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 223 def filesize check_for_file @filesize ||= File.size(path) end |
#has_color_profile? ⇒ Boolean
Returns true if image has a color profile, false if not.
200 201 202 203 204 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 200 def has_color_profile? return false unless exif exif['profiledescription'] || exif['colorspace'] ? true : false end |
#image? ⇒ Boolean
Returns if object is an image.
180 181 182 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 180 def image? object_type == :image end |
#initialize(path, params = {}) ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 19 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] end |
#jp2able? ⇒ Boolean
Examines the input image for validity to create a jp2. Same as valid_image? but also confirms the existence of a profile description and further restricts mimetypes. It is used by the assembly robots to decide if a jp2 will be created and is also called before you create a jp2 using assembly-image.
212 213 214 215 216 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 212 def jp2able? return false unless exif Assembly::VALID_IMAGE_MIMETYPES.include?(mimetype) end |
#md5 ⇒ String
Computes md5 checksum or returns cached value
96 97 98 99 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 96 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
(1) exifdata (if available), (2) unix file type or (3) file extension using the mimetypes gem, in this priority order
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 117 def mimetype @mimetype ||= begin if exif_mimetype # first, try the exif data exif_mimetype elsif file_mimetype # next, try exif/unix file system command file_mimetype else # finally, get it from the mime-types gem (using the file extension) if both of those failed for some reason mtype = MIME::Types.type_for(path).first mtype ? mtype.content_type : '' end 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.
171 172 173 174 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 171 def object_type lookup = MIME::Types[mimetype][0] lookup.nil? ? :other : lookup.media_type.to_sym end |
#sha1 ⇒ String
Computes sha1 checksum or return cached value
106 107 108 109 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 106 def sha1 check_for_file unless @sha1 @sha1 ||= Digest::SHA1.file(path).hexdigest end |
#valid_image? ⇒ Boolean
Examines the input image for validity. Used to determine if image is a valid and useful image. If image is not a jp2, also checks if it is jp2able?
190 191 192 193 194 |
# File 'lib/assembly-objectfile/object_fileable.rb', line 190 def valid_image? return false unless image? mimetype == 'image/jp2' || jp2able? ? true : false end |