assembly-objectfile 1.8.4 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +1 -1
- data/lib/assembly-objectfile/content_metadata/file_set.rb +1 -1
- data/lib/assembly-objectfile/content_metadata/file_set_builder.rb +4 -0
- data/lib/assembly-objectfile/object_fileable.rb +32 -12
- data/lib/assembly-objectfile/version.rb +1 -1
- data/spec/object_file_spec.rb +12 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04ee4aa95c21e1ef894bc760f83bf38bc4ce18cb18ca543451fc9645ee43f20b
|
4
|
+
data.tar.gz: e6e6f2a9a6d9e075470f412bcd299d4da9dbeb3e5aa673c6b371e3d20c3e06fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23c5882333d2c6b95eb107672c374986c8b048d9844ed40c8716cae9f1d8ad4a1904c187f0bdc308ac97262010a0e386eaae833524100fd4de7d8f9dcf672c23
|
7
|
+
data.tar.gz: 15114a44a00b614f41d6cb8467c1fbaf16986dc570ed7e4decc574eebfdc1fe52321fc8c87cce37ba45199347860b47044ea8fde6467e4399569ac6c84eafe77
|
data/.rubocop_todo.yml
CHANGED
@@ -7,7 +7,7 @@ module Assembly
|
|
7
7
|
# Represents a groups of related Files, such as a single master file and the derivatives
|
8
8
|
class FileSet
|
9
9
|
# @param [Boolean] dpg (false) is it a dpg bundle?
|
10
|
-
# @param [Array] resource_files
|
10
|
+
# @param [Array<Assembly::ObjectFile>] resource_files
|
11
11
|
# @param style
|
12
12
|
def initialize(dpg: false, resource_files:, style:)
|
13
13
|
@dpg = dpg
|
@@ -4,6 +4,9 @@ module Assembly
|
|
4
4
|
class ContentMetadata
|
5
5
|
# Builds a groups of related Files, based on bundle
|
6
6
|
class FileSetBuilder
|
7
|
+
# @param [Symbol] bundle one of: :default, :filename, :dpg or :prebundled
|
8
|
+
# @param [Array<Assembly::ObjectFile>] objects
|
9
|
+
# @param [Symbol] style one of: :simple_image, :file, :simple_book, :book_as_image, :book_with_pdf, :map, or :'3d'
|
7
10
|
def self.build(bundle:, objects:, style:)
|
8
11
|
new(bundle: bundle, objects: objects, style: style).build
|
9
12
|
end
|
@@ -25,6 +28,7 @@ module Assembly
|
|
25
28
|
build_for_dpg
|
26
29
|
when :prebundled
|
27
30
|
# if the user specifies this method, they will pass in an array of arrays, indicating resources, so we don't need to bundle in the gem
|
31
|
+
# This is used by the assemblyWF if you have stubContentMetadata.xml
|
28
32
|
objects.map { |inner| FileSet.new(resource_files: inner, style: style) }
|
29
33
|
else
|
30
34
|
raise 'Invalid bundle method'
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'mini_exiftool'
|
4
4
|
require 'mime/types'
|
5
|
-
# require 'checksum-tools'
|
6
5
|
|
7
6
|
module Assembly
|
8
7
|
# Common behaviors we need for other classes in the gem
|
9
8
|
module ObjectFileable
|
10
|
-
attr_accessor :file_attributes, :label, :path, :provider_md5, :provider_sha1, :relative_path
|
9
|
+
attr_accessor :file_attributes, :label, :path, :provider_md5, :provider_sha1, :relative_path, :mime_type_order
|
10
|
+
VALID_MIMETYPE_METHODS = %i[exif file extension].freeze
|
11
11
|
|
12
12
|
# @param [String] path full path to the file to be worked with
|
13
13
|
# @param [Hash<Symbol => Object>] params options used during content metadata generation
|
@@ -16,6 +16,9 @@ module Assembly
|
|
16
16
|
# @option params [String] :provider_md5 pre-computed MD5 checksum
|
17
17
|
# @option params [String] :provider_sha1 pre-computed SHA1 checksum
|
18
18
|
# @option params [String] :relative_path if you want the file ids in the content metadata it can be set, otherwise content metadata will get the full path
|
19
|
+
# @option params [Array] :mime_type_order can be set to the order in which you want mimetypes to be determined
|
20
|
+
# options are :exif (from exif if exists), :extension (from file extension), and :file (from unix file system command)
|
21
|
+
# the default is defined in the private `default_mime_type_order` method but you can override to set your own order
|
19
22
|
# @example
|
20
23
|
# Assembly::ObjectFile.new('/input/path_to_file.tif')
|
21
24
|
def initialize(path, params = {})
|
@@ -25,6 +28,7 @@ module Assembly
|
|
25
28
|
@relative_path = params[:relative_path]
|
26
29
|
@provider_md5 = params[:provider_md5]
|
27
30
|
@provider_sha1 = params[:provider_sha1]
|
31
|
+
@mime_type_order = params[:mime_type_order] || default_mime_type_order
|
28
32
|
end
|
29
33
|
|
30
34
|
# @return [String] DPG base filename, removing the extension and the '00','05', etc. placeholders
|
@@ -110,22 +114,33 @@ module Assembly
|
|
110
114
|
@sha1 ||= Digest::SHA1.file(path).hexdigest
|
111
115
|
end
|
112
116
|
|
113
|
-
# Returns mimetype information for the current file based on
|
114
|
-
#
|
117
|
+
# Returns mimetype information for the current file based on the ordering set in default_mime_type_order
|
118
|
+
# We stop computing mimetypes as soon as we have a method that returns a value
|
115
119
|
# @return [String] mime type
|
116
120
|
# @example
|
117
121
|
# source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
|
118
122
|
# puts source_file.mimetype # 'text/plain'
|
119
123
|
def mimetype
|
120
124
|
@mimetype ||= begin
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
mtype = MIME::Types.type_for(path).first
|
127
|
-
mtype ? mtype.content_type : ''
|
125
|
+
check_for_file
|
126
|
+
mimetype = ''
|
127
|
+
mime_type_order.each do |mime_type_method|
|
128
|
+
mimetype = public_send("#{mime_type_method}_mimetype") if VALID_MIMETYPE_METHODS.include?(mime_type_method)
|
129
|
+
break if !mimetype.nil? && mimetype != ''
|
128
130
|
end
|
131
|
+
mimetype
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Returns mimetype information using the mime-types gem (based on a file extension lookup)
|
136
|
+
# @return [String] mime type for supplied file
|
137
|
+
# @example
|
138
|
+
# source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
|
139
|
+
# puts source_file.extension_mimetype # 'text/plain'
|
140
|
+
def extension_mimetype
|
141
|
+
@extension_mimetype ||= begin
|
142
|
+
mtype = MIME::Types.type_for(path).first
|
143
|
+
mtype ? mtype.content_type : ''
|
129
144
|
end
|
130
145
|
end
|
131
146
|
|
@@ -234,11 +249,16 @@ exif&.mimetype && prefer_exif
|
|
234
249
|
# source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
|
235
250
|
# puts source_file.file_exists? # true
|
236
251
|
def file_exists?
|
237
|
-
File.exist?(path) && !File.directory?(path)
|
252
|
+
@file_exists ||= (File.exist?(path) && !File.directory?(path))
|
238
253
|
end
|
239
254
|
|
240
255
|
private
|
241
256
|
|
257
|
+
# prive method defining default preferred ordering of how mimetypes are determined
|
258
|
+
def default_mime_type_order
|
259
|
+
%i[exif file extension]
|
260
|
+
end
|
261
|
+
|
242
262
|
# private method to check for file existence before operating on it
|
243
263
|
def check_for_file
|
244
264
|
raise "input file #{path} does not exist" unless file_exists?
|
data/spec/object_file_spec.rb
CHANGED
@@ -25,6 +25,8 @@ describe Assembly::ObjectFile do
|
|
25
25
|
expect(@ai.exif).not_to be nil
|
26
26
|
expect(@ai.mimetype).to eq('image/tiff')
|
27
27
|
expect(@ai.file_mimetype).to eq('image/tiff')
|
28
|
+
expect(@ai.extension_mimetype).to eq('image/tiff')
|
29
|
+
expect(@ai.exif_mimetype).to eq('image/tiff')
|
28
30
|
expect(@ai.object_type).to eq(:image)
|
29
31
|
expect(@ai.valid_image?).to eq(true)
|
30
32
|
expect(@ai.jp2able?).to eq(true)
|
@@ -53,6 +55,16 @@ describe Assembly::ObjectFile do
|
|
53
55
|
expect(@ai.mimetype).to eq('text/plain')
|
54
56
|
end
|
55
57
|
|
58
|
+
it 'sets a mimetype of application/x-tgif for .obj 3d files if we prefer the mimetype extension gem over unix file system command' do
|
59
|
+
@ai = described_class.new(TEST_OBJ_FILE, mime_type_order: %i[extension file exif])
|
60
|
+
expect(@ai.mimetype).to eq('application/x-tgif')
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'ignores invald mimetype generation methods and still sets a mimetype of application/x-tgif for .obj 3d files if we prefer the mimetype extension gem over unix file system command' do
|
64
|
+
@ai = described_class.new(TEST_OBJ_FILE, mime_type_order: %i[bogus extension file])
|
65
|
+
expect(@ai.mimetype).to eq('application/x-tgif')
|
66
|
+
end
|
67
|
+
|
56
68
|
it 'sets the correct mimetype of plain/text for .ply 3d files' do
|
57
69
|
@ai = described_class.new(TEST_PLY_FILE)
|
58
70
|
expect(@ai.mimetype).to eq('text/plain')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assembly-objectfile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Mangiafico
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2020-
|
14
|
+
date: 2020-02-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -273,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
273
|
- !ruby/object:Gem::Version
|
274
274
|
version: '0'
|
275
275
|
requirements: []
|
276
|
-
rubygems_version: 3.
|
276
|
+
rubygems_version: 3.0.3
|
277
277
|
signing_key:
|
278
278
|
specification_version: 4
|
279
279
|
summary: Ruby immplementation of file services needed to prepare objects to be accessioned
|