assembly-objectfile 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -1
- data/.rubocop.yml +33 -0
- data/.rubocop_todo.yml +2 -53
- data/Gemfile.lock +9 -18
- data/README.md +6 -6
- data/assembly-objectfile.gemspec +3 -5
- data/config/boot.rb +0 -1
- data/lib/{assembly-objectfile → assembly/object_file}/version.rb +1 -1
- data/lib/{assembly-objectfile → assembly}/object_file.rb +28 -24
- data/lib/assembly-objectfile.rb +12 -10
- data/spec/{object_file_spec.rb → assembly/object_file_spec.rb} +23 -33
- metadata +8 -53
- data/profiles/AdobeRGB1998.icc +0 -0
- data/profiles/DotGain20.icc +0 -0
- data/profiles/sRGBIEC6196621.icc +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 101baff5dcb53ae691341818de800b9836bc5c2db2483b3cdac08afa8fed479e
|
4
|
+
data.tar.gz: 0265e4b3d35ecf91a07b48129e4485e9844e6e1c940a08ae4f32246b209d2260
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa0814a3a51d7d98f7eeb91611193e367accb4161ab18967b1afdb7caeb54476994f078ed58eff684dfba37dd2358a75fba98b181df74f165f82c65537723ebc
|
7
|
+
data.tar.gz: 91272e14724ff23ac668bf65339f29a272606712da691a7e13018d70c7e2a00ac8d242723ae6b4a9e05007543174e43e6ade6abb8f71a922ff9a4f4b230b10bb
|
data/.circleci/config.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -9,11 +9,31 @@ AllCops:
|
|
9
9
|
- '**/*.md'
|
10
10
|
- 'vendor/**/*' # avoid running rubocop on cached bundler
|
11
11
|
|
12
|
+
Layout/LineLength:
|
13
|
+
Max: 120
|
14
|
+
|
15
|
+
Naming/FileName:
|
16
|
+
Exclude:
|
17
|
+
- 'lib/assembly-objectfile.rb'
|
18
|
+
|
19
|
+
Naming/PredicateName:
|
20
|
+
NamePrefix:
|
21
|
+
- 'is_'
|
22
|
+
|
12
23
|
Metrics/BlockLength:
|
13
24
|
Exclude:
|
14
25
|
- 'spec/**/*.rb'
|
15
26
|
- '**/*.gemspec'
|
16
27
|
|
28
|
+
RSpec/ExampleLength:
|
29
|
+
Max: 10
|
30
|
+
|
31
|
+
RSpec/MultipleExpectations:
|
32
|
+
Max: 10
|
33
|
+
|
34
|
+
RSpec/NestedGroups:
|
35
|
+
Max: 4
|
36
|
+
|
17
37
|
Gemspec/DeprecatedAttributeAssignment: # (new in 1.10)
|
18
38
|
Enabled: true
|
19
39
|
|
@@ -207,3 +227,16 @@ RSpec/ChangeByZero: # new in 2.11.0
|
|
207
227
|
Enabled: true
|
208
228
|
RSpec/VerifiedDoubleReference: # new in 2.10.0
|
209
229
|
Enabled: true
|
230
|
+
|
231
|
+
Layout/LineContinuationLeadingSpace: # new in 1.31
|
232
|
+
Enabled: true
|
233
|
+
Layout/LineContinuationSpacing: # new in 1.31
|
234
|
+
Enabled: true
|
235
|
+
Lint/ConstantOverwrittenInRescue: # new in 1.31
|
236
|
+
Enabled: true
|
237
|
+
Lint/NonAtomicFileOperation: # new in 1.31
|
238
|
+
Enabled: true
|
239
|
+
RSpec/Capybara/SpecificMatcher: # new in 2.12
|
240
|
+
Enabled: true
|
241
|
+
RSpec/Rails/HaveHttpStatus: # new in 2.12
|
242
|
+
Enabled: true
|
data/.rubocop_todo.yml
CHANGED
@@ -1,63 +1,12 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2022-07-
|
3
|
+
# on 2022-07-19 19:06:39 UTC using RuboCop version 1.31.2.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count: 1
|
10
|
-
Lint/UselessAssignment:
|
11
|
-
Exclude:
|
12
|
-
- 'config/boot.rb'
|
13
|
-
|
14
9
|
# Offense count: 1
|
15
10
|
# Configuration parameters: CountComments, CountAsOne.
|
16
11
|
Metrics/ClassLength:
|
17
|
-
Max:
|
18
|
-
|
19
|
-
# Offense count: 1
|
20
|
-
# Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, CheckDefinitionPathHierarchyRoots, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
21
|
-
# CheckDefinitionPathHierarchyRoots: lib, spec, test, src
|
22
|
-
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
23
|
-
Naming/FileName:
|
24
|
-
Exclude:
|
25
|
-
- 'lib/assembly-objectfile.rb'
|
26
|
-
|
27
|
-
# Offense count: 1
|
28
|
-
# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
|
29
|
-
# NamePrefix: is_, has_, have_
|
30
|
-
# ForbiddenPrefixes: is_, has_, have_
|
31
|
-
# AllowedMethods: is_a?
|
32
|
-
# MethodDefinitionMacros: define_method, define_singleton_method
|
33
|
-
Naming/PredicateName:
|
34
|
-
Exclude:
|
35
|
-
- 'spec/**/*'
|
36
|
-
- 'lib/assembly-objectfile/object_file.rb'
|
37
|
-
|
38
|
-
# Offense count: 2
|
39
|
-
# Configuration parameters: CountAsOne.
|
40
|
-
RSpec/ExampleLength:
|
41
|
-
Max: 7
|
42
|
-
|
43
|
-
# Offense count: 1
|
44
|
-
# Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly.
|
45
|
-
# Include: **/*_spec*rb*, **/spec/**/*
|
46
|
-
RSpec/FilePath:
|
47
|
-
Exclude:
|
48
|
-
- 'spec/object_file_spec.rb'
|
49
|
-
|
50
|
-
# Offense count: 8
|
51
|
-
RSpec/MultipleExpectations:
|
52
|
-
Max: 6
|
53
|
-
|
54
|
-
# Offense count: 3
|
55
|
-
RSpec/NestedGroups:
|
56
|
-
Max: 4
|
57
|
-
|
58
|
-
# Offense count: 24
|
59
|
-
# This cop supports safe autocorrection (--autocorrect).
|
60
|
-
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, IgnoredPatterns.
|
61
|
-
# URISchemes: http, https
|
62
|
-
Layout/LineLength:
|
63
|
-
Max: 187
|
12
|
+
Max: 118
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
assembly-objectfile (2.
|
4
|
+
assembly-objectfile (2.1.0)
|
5
5
|
activesupport (>= 5.2.0)
|
6
|
-
deprecation
|
7
6
|
mime-types (> 3)
|
8
7
|
mini_exiftool
|
9
|
-
nokogiri
|
10
8
|
|
11
9
|
GEM
|
12
10
|
remote: http://rubygems.org/
|
13
11
|
specs:
|
14
|
-
activesupport (7.0.3)
|
12
|
+
activesupport (7.0.3.1)
|
15
13
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
14
|
i18n (>= 1.6, < 2)
|
17
15
|
minitest (>= 5.1)
|
@@ -20,11 +18,9 @@ GEM
|
|
20
18
|
byebug (11.1.3)
|
21
19
|
coderay (1.1.3)
|
22
20
|
concurrent-ruby (1.1.10)
|
23
|
-
deprecation (1.1.0)
|
24
|
-
activesupport
|
25
21
|
diff-lcs (1.5.0)
|
26
22
|
docile (1.4.0)
|
27
|
-
i18n (1.
|
23
|
+
i18n (1.12.0)
|
28
24
|
concurrent-ruby (~> 1.0)
|
29
25
|
json (2.6.2)
|
30
26
|
method_source (1.0.0)
|
@@ -32,11 +28,7 @@ GEM
|
|
32
28
|
mime-types-data (~> 3.2015)
|
33
29
|
mime-types-data (3.2022.0105)
|
34
30
|
mini_exiftool (2.10.2)
|
35
|
-
mini_portile2 (2.8.0)
|
36
31
|
minitest (5.16.2)
|
37
|
-
nokogiri (1.13.6)
|
38
|
-
mini_portile2 (~> 2.8.0)
|
39
|
-
racc (~> 1.4)
|
40
32
|
parallel (1.22.1)
|
41
33
|
parser (3.1.2.0)
|
42
34
|
ast (~> 2.4.1)
|
@@ -46,7 +38,6 @@ GEM
|
|
46
38
|
pry-byebug (3.9.0)
|
47
39
|
byebug (~> 11.0)
|
48
40
|
pry (~> 0.13.0)
|
49
|
-
racc (1.6.0)
|
50
41
|
rainbow (3.1.1)
|
51
42
|
rake (13.0.6)
|
52
43
|
regexp_parser (2.5.0)
|
@@ -64,7 +55,8 @@ GEM
|
|
64
55
|
diff-lcs (>= 1.2.0, < 2.0)
|
65
56
|
rspec-support (~> 3.11.0)
|
66
57
|
rspec-support (3.11.0)
|
67
|
-
rubocop (1.31.
|
58
|
+
rubocop (1.31.2)
|
59
|
+
json (~> 2.3)
|
68
60
|
parallel (~> 1.10)
|
69
61
|
parser (>= 3.1.0.0)
|
70
62
|
rainbow (>= 2.2.2, < 4.0)
|
@@ -73,10 +65,10 @@ GEM
|
|
73
65
|
rubocop-ast (>= 1.18.0, < 2.0)
|
74
66
|
ruby-progressbar (~> 1.7)
|
75
67
|
unicode-display_width (>= 1.4.0, < 3.0)
|
76
|
-
rubocop-ast (1.
|
68
|
+
rubocop-ast (1.19.1)
|
77
69
|
parser (>= 3.1.1.0)
|
78
|
-
rubocop-rspec (2.
|
79
|
-
rubocop (~> 1.
|
70
|
+
rubocop-rspec (2.12.1)
|
71
|
+
rubocop (~> 1.31)
|
80
72
|
ruby-progressbar (1.11.0)
|
81
73
|
simplecov (0.21.2)
|
82
74
|
docile (~> 1.1)
|
@@ -94,7 +86,6 @@ PLATFORMS
|
|
94
86
|
DEPENDENCIES
|
95
87
|
assembly-objectfile!
|
96
88
|
byebug
|
97
|
-
json
|
98
89
|
pry-byebug
|
99
90
|
rake
|
100
91
|
rspec (~> 3.0)
|
@@ -103,4 +94,4 @@ DEPENDENCIES
|
|
103
94
|
simplecov
|
104
95
|
|
105
96
|
BUNDLED WITH
|
106
|
-
2.3.
|
97
|
+
2.3.17
|
data/README.md
CHANGED
@@ -8,15 +8,15 @@
|
|
8
8
|
## Overview
|
9
9
|
This gem contains classes used by the Stanford University Digital Library to
|
10
10
|
perform file operations necessary for accessioning of content. It is also
|
11
|
-
used by related gems
|
12
|
-
generation).
|
11
|
+
used by related gems that perform content type specific operations (e.g.
|
12
|
+
assembly-image for jp2 generation).
|
13
13
|
|
14
14
|
## Usage
|
15
15
|
|
16
16
|
The gem currently has methods for:
|
17
17
|
* filesize
|
18
|
-
*
|
19
|
-
*
|
18
|
+
* mimetype
|
19
|
+
* exif - consumers use ExifTool to get file information
|
20
20
|
|
21
21
|
## Running tests
|
22
22
|
|
@@ -34,8 +34,8 @@ rake release
|
|
34
34
|
|
35
35
|
1. Exiftool
|
36
36
|
|
37
|
-
RHEL: (RPM to install
|
38
|
-
|
37
|
+
RHEL: (RPM to install coming soon) Download latest version from:
|
38
|
+
https://exiftool.org/
|
39
39
|
|
40
40
|
tar -xf Image-ExifTool-#.##.tar.gz
|
41
41
|
cd Image-ExifTool-#.##
|
data/assembly-objectfile.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
-
require 'assembly
|
4
|
+
require 'assembly/object_file/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'assembly-objectfile'
|
@@ -10,7 +10,8 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.authors = ['Peter Mangiafico', 'Renzo Sanchez-Silva', 'Monty Hindman', 'Tony Calavano']
|
11
11
|
s.email = ['pmangiafico@stanford.edu']
|
12
12
|
s.homepage = 'https://github.com/sul-dlss/assembly-objectfile'
|
13
|
-
s.summary = 'Ruby
|
13
|
+
s.summary = 'Ruby implementation of file services needed to prepare objects to be accessioned ' \
|
14
|
+
'into the Stanford Digital Repository'
|
14
15
|
s.description = 'Get exif data, file sizes and more.'
|
15
16
|
s.license = 'ALv2'
|
16
17
|
s.metadata['rubygems_mfa_required'] = 'true'
|
@@ -23,12 +24,9 @@ Gem::Specification.new do |s|
|
|
23
24
|
s.required_ruby_version = '>= 3.0'
|
24
25
|
|
25
26
|
s.add_dependency 'activesupport', '>= 5.2.0'
|
26
|
-
s.add_dependency 'deprecation'
|
27
27
|
s.add_dependency 'mime-types', '> 3'
|
28
28
|
s.add_dependency 'mini_exiftool'
|
29
|
-
s.add_dependency 'nokogiri'
|
30
29
|
|
31
|
-
s.add_development_dependency 'json'
|
32
30
|
s.add_development_dependency 'pry-byebug'
|
33
31
|
s.add_development_dependency 'rake'
|
34
32
|
s.add_development_dependency 'rspec', '~> 3.0'
|
data/config/boot.rb
CHANGED
@@ -7,13 +7,15 @@ require 'active_support/core_ext/object/blank'
|
|
7
7
|
module Assembly
|
8
8
|
# This class contains generic methods to operate on any file.
|
9
9
|
class ObjectFile
|
10
|
-
# Class level method that given an array of strings, return the longest common initial path.
|
10
|
+
# Class level method that given an array of strings, return the longest common initial path.
|
11
|
+
# Useful for removing a common path from a set of filenames when producing content metadata
|
11
12
|
#
|
12
13
|
# @param [Array] strings Array of filenames with paths to operate on
|
13
14
|
# @return [String] longest common initial part of path of filenames passed in
|
14
15
|
#
|
15
16
|
# Example:
|
16
|
-
#
|
17
|
+
# puts Assembly::ObjectFile.common_prefix(['/Users/peter/00/test.tif','/Users/peter/05/test.jp2'])
|
18
|
+
# # => '/Users/peter/0'
|
17
19
|
def self.common_path(strings)
|
18
20
|
return nil if strings.empty?
|
19
21
|
|
@@ -34,15 +36,22 @@ module Assembly
|
|
34
36
|
|
35
37
|
# @param [String] path full path to the file to be worked with
|
36
38
|
# @param [Hash<Symbol => Object>] params options used during content metadata generation
|
37
|
-
# @option params [Hash<Symbol => ['yes', 'no']>] :file_attributes e.g
|
38
|
-
#
|
39
|
+
# @option params [Hash<Symbol => ['yes', 'no']>] :file_attributes e.g.:
|
40
|
+
# {:preserve=>'yes',:shelve=>'no',:publish=>'no'},
|
41
|
+
# defaults pulled from mimetype
|
42
|
+
# @option params [String] :label a resource label (files bundled together will just get the first
|
43
|
+
# file's label attribute if set)
|
39
44
|
# @option params [String] :provider_md5 pre-computed MD5 checksum
|
40
45
|
# @option params [String] :provider_sha1 pre-computed SHA1 checksum
|
41
|
-
# @option params [String] :relative_path if you want the file ids in the content metadata it can be set,
|
46
|
+
# @option params [String] :relative_path if you want the file ids in the content metadata it can be set,
|
47
|
+
# otherwise content metadata will get the full path
|
42
48
|
# @option params [Array] :mime_type_order can be set to the order in which you want mimetypes to be determined
|
43
|
-
# options are :override (from manual overide mapping if exists),
|
44
|
-
# :
|
45
|
-
#
|
49
|
+
# options are :override (from manual overide mapping if exists),
|
50
|
+
# :exif (from exif if exists)
|
51
|
+
# :extension (from file extension)
|
52
|
+
# :file (from unix file system command)
|
53
|
+
# the default is defined in the private `default_mime_type_order` method
|
54
|
+
# but you can override to set your own order
|
46
55
|
# @example
|
47
56
|
# Assembly::ObjectFile.new('/input/path_to_file.tif')
|
48
57
|
def initialize(path, params = {})
|
@@ -136,7 +145,8 @@ module Assembly
|
|
136
145
|
end
|
137
146
|
end
|
138
147
|
|
139
|
-
# @return [Symbol] the type of object, could be :application (for PDF or Word, etc),
|
148
|
+
# @return [Symbol] the type of object, could be :application (for PDF or Word, etc),
|
149
|
+
# :audio, :image, :message, :model, :multipart, :text or :video
|
140
150
|
# @example
|
141
151
|
# source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
|
142
152
|
# puts source_file.object_type # :image
|
@@ -165,18 +175,10 @@ module Assembly
|
|
165
175
|
mimetype == 'image/jp2' || jp2able?
|
166
176
|
end
|
167
177
|
|
168
|
-
#
|
169
|
-
#
|
170
|
-
#
|
171
|
-
#
|
172
|
-
def has_color_profile?
|
173
|
-
return false unless exif
|
174
|
-
|
175
|
-
exif['profiledescription'] || exif['colorspace'] ? true : false
|
176
|
-
end
|
177
|
-
|
178
|
-
# 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.
|
179
|
-
# 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.
|
178
|
+
# Examines the input image for validity to create a jp2. Same as valid_image? but also confirms
|
179
|
+
# the existence of a profile description and further restricts mimetypes.
|
180
|
+
# It is used by the assembly robots to decide if a jp2 will be created and is also called before
|
181
|
+
# you create a jp2 using assembly-image.
|
180
182
|
# @return [Boolean] true if image should have a jp2 created, false if not.
|
181
183
|
# @example
|
182
184
|
# source_img = Assembly::ObjectFile.new('/input/path_to_file.tif')
|
@@ -238,11 +240,12 @@ module Assembly
|
|
238
240
|
def file_mimetype
|
239
241
|
@file_mimetype ||= begin
|
240
242
|
check_for_file
|
241
|
-
`file --mime-type "#{path}"`.delete("\n").split(':')[1].strip #
|
243
|
+
`file --mime-type "#{path}"`.delete("\n").split(':')[1].strip # get the mimetype from the unix file command
|
242
244
|
end
|
243
245
|
end
|
244
246
|
|
245
|
-
# Returns mimetype information for the current file based on exif data
|
247
|
+
# Returns mimetype information for the current file based on exif data
|
248
|
+
# (if available and not a trusted source that we'd rather get from the file system command)
|
246
249
|
# @return [String] mime type for supplied file
|
247
250
|
# @example
|
248
251
|
# source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
|
@@ -250,7 +253,8 @@ module Assembly
|
|
250
253
|
def exif_mimetype
|
251
254
|
@exif_mimetype ||= begin
|
252
255
|
check_for_file
|
253
|
-
|
256
|
+
# if it's not a "trusted" mimetype and there is exif data; get the mimetype from the exif
|
257
|
+
prefer_exif = !Assembly::TRUSTED_MIMETYPES.include?(file_mimetype)
|
254
258
|
exif.mimetype if exif&.mimetype && prefer_exif
|
255
259
|
end
|
256
260
|
end
|
data/lib/assembly-objectfile.rb
CHANGED
@@ -4,22 +4,24 @@ module Assembly
|
|
4
4
|
# the path to the gem, used to access profiles stored with the gem
|
5
5
|
PATH_TO_GEM = File.expand_path("#{File.dirname(__FILE__)}/..")
|
6
6
|
|
7
|
-
#
|
7
|
+
# If input image is not one of these mime types, it will not be regarded as a valid image
|
8
|
+
# for the purpose of generating a JP2 derivative
|
8
9
|
VALID_IMAGE_MIMETYPES = ['image/jpeg', 'image/tiff', 'image/tif', 'image/png'].freeze
|
9
10
|
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
11
|
+
# The list of mimetypes that will be "trusted" by the unix file command; if a mimetype other than
|
12
|
+
# one of these is returned by the file command, then a check will be made to see if exif data exists...
|
13
|
+
# if so, the mimetype returned by the exif data will be used if no exif data exists, then the
|
14
|
+
# mimetype returned by the unix file command will be used
|
13
15
|
TRUSTED_MIMETYPES = ['text/plain', 'plain/text', 'application/pdf', 'text/html', 'application/xml'].freeze
|
14
16
|
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
17
|
+
# This is a manual override mapping of file extension to mimetype; if a file with the given extension
|
18
|
+
# is found, the mapped mimetype will be returned and no further methods will be used - this is used
|
19
|
+
# to force a specific mimetype to be returned for a given file extension regardless of what exif or
|
20
|
+
# the unix file system command returns the mapping format is "extension with period: returned mimetype",
|
21
|
+
# e.g. for any .json file, you will always get `application/json`
|
19
22
|
OVERRIDE_MIMETYPES = {
|
20
23
|
'.json': 'application/json'
|
21
24
|
}.freeze
|
22
25
|
end
|
23
26
|
|
24
|
-
require 'assembly
|
25
|
-
require 'assembly-objectfile/version'
|
27
|
+
require 'assembly/object_file'
|
@@ -6,13 +6,15 @@ describe Assembly::ObjectFile do
|
|
6
6
|
describe '.common_path' do
|
7
7
|
context 'when common path is 2 nodes out of 4' do
|
8
8
|
it 'returns the common directory' do
|
9
|
-
expect(described_class.common_path(['/Users/peter/00/test.tif',
|
9
|
+
expect(described_class.common_path(['/Users/peter/00/test.tif',
|
10
|
+
'/Users/peter/05/test.jp2'])).to eq('/Users/peter/')
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
14
|
context 'when common path is 3 nodes out of 4' do
|
14
15
|
it 'returns the common directory' do
|
15
|
-
expect(described_class.common_path(['/Users/peter/00/test.tif',
|
16
|
+
expect(described_class.common_path(['/Users/peter/00/test.tif',
|
17
|
+
'/Users/peter/00/test.jp2'])).to eq('/Users/peter/00/')
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
@@ -25,8 +27,9 @@ describe Assembly::ObjectFile do
|
|
25
27
|
|
26
28
|
describe '#new' do
|
27
29
|
context 'without params' do
|
30
|
+
let(:object_file) { described_class.new('/some/file.txt') }
|
31
|
+
|
28
32
|
it 'does not set attributes' do
|
29
|
-
object_file = described_class.new('/some/file.txt')
|
30
33
|
expect(object_file.path).to eq('/some/file.txt')
|
31
34
|
expect(object_file.label).to be_nil
|
32
35
|
expect(object_file.file_attributes).to be_nil
|
@@ -37,8 +40,15 @@ describe Assembly::ObjectFile do
|
|
37
40
|
end
|
38
41
|
|
39
42
|
context 'with params' do
|
43
|
+
let(:object_file) do
|
44
|
+
described_class.new('/some/file.txt', label: 'some label',
|
45
|
+
file_attributes: { 'shelve' => 'yes',
|
46
|
+
'publish' => 'yes',
|
47
|
+
'preserve' => 'no' },
|
48
|
+
relative_path: '/tmp')
|
49
|
+
end
|
50
|
+
|
40
51
|
it 'sets attributes to passed params' do
|
41
|
-
object_file = described_class.new('/some/file.txt', label: 'some label', file_attributes: { 'shelve' => 'yes', 'publish' => 'yes', 'preserve' => 'no' }, relative_path: '/tmp')
|
42
52
|
expect(object_file.path).to eq('/some/file.txt')
|
43
53
|
expect(object_file.label).to eq('some label')
|
44
54
|
expect(object_file.file_attributes).to eq('shelve' => 'yes', 'publish' => 'yes', 'preserve' => 'no')
|
@@ -47,9 +57,12 @@ describe Assembly::ObjectFile do
|
|
47
57
|
expect(object_file.relative_path).to eq('/tmp')
|
48
58
|
end
|
49
59
|
|
50
|
-
|
51
|
-
object_file
|
52
|
-
|
60
|
+
context 'with provider_md5' do
|
61
|
+
let(:object_file) { described_class.new('/some/file.txt', provider_md5: 'XYZ') }
|
62
|
+
|
63
|
+
it 'sets provider_md5 to passed param' do
|
64
|
+
expect(object_file.provider_md5).to eq('XYZ')
|
65
|
+
end
|
53
66
|
end
|
54
67
|
end
|
55
68
|
end
|
@@ -100,7 +113,7 @@ describe Assembly::ObjectFile do
|
|
100
113
|
|
101
114
|
context 'with ruby file' do
|
102
115
|
it 'false' do
|
103
|
-
non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/object_file_spec.rb')
|
116
|
+
non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
|
104
117
|
object_file = described_class.new(non_image_file)
|
105
118
|
expect(object_file.image?).to be(false)
|
106
119
|
end
|
@@ -132,7 +145,7 @@ describe Assembly::ObjectFile do
|
|
132
145
|
|
133
146
|
context 'with ruby file' do
|
134
147
|
it ':text' do
|
135
|
-
non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/object_file_spec.rb')
|
148
|
+
non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
|
136
149
|
object_file = described_class.new(non_image_file)
|
137
150
|
expect(object_file.object_type).to eq(:text)
|
138
151
|
end
|
@@ -178,7 +191,7 @@ describe Assembly::ObjectFile do
|
|
178
191
|
|
179
192
|
context 'with ruby file' do
|
180
193
|
it 'false' do
|
181
|
-
non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/object_file_spec.rb')
|
194
|
+
non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
|
182
195
|
object_file = described_class.new(non_image_file)
|
183
196
|
expect(object_file.valid_image?).to be(false)
|
184
197
|
end
|
@@ -320,29 +333,6 @@ describe Assembly::ObjectFile do
|
|
320
333
|
end
|
321
334
|
end
|
322
335
|
|
323
|
-
describe '#has_color_profile?' do
|
324
|
-
context 'with jp2 file' do
|
325
|
-
it 'true' do
|
326
|
-
object_file = described_class.new(TEST_JP2_INPUT_FILE)
|
327
|
-
expect(object_file.has_color_profile?).to be(true)
|
328
|
-
end
|
329
|
-
end
|
330
|
-
|
331
|
-
context 'with tiff file' do
|
332
|
-
it 'true' do
|
333
|
-
object_file = described_class.new(TEST_RES1_TIF1)
|
334
|
-
expect(object_file.has_color_profile?).to be(true)
|
335
|
-
end
|
336
|
-
end
|
337
|
-
|
338
|
-
context 'with tiff no color file' do
|
339
|
-
it 'false' do
|
340
|
-
object_file = described_class.new(TEST_TIFF_NO_COLOR_FILE)
|
341
|
-
expect(object_file.has_color_profile?).to be(false)
|
342
|
-
end
|
343
|
-
end
|
344
|
-
end
|
345
|
-
|
346
336
|
describe '#md5' do
|
347
337
|
it 'computes md5 for an image file' do
|
348
338
|
object_file = described_class.new(TEST_TIF_INPUT_FILE)
|
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: 2.
|
4
|
+
version: 2.1.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: 2022-07-
|
14
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -27,20 +27,6 @@ dependencies:
|
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 5.2.0
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: deprecation
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
requirements:
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '0'
|
37
|
-
type: :runtime
|
38
|
-
prerelease: false
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
44
30
|
- !ruby/object:Gem::Dependency
|
45
31
|
name: mime-types
|
46
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -69,34 +55,6 @@ dependencies:
|
|
69
55
|
- - ">="
|
70
56
|
- !ruby/object:Gem::Version
|
71
57
|
version: '0'
|
72
|
-
- !ruby/object:Gem::Dependency
|
73
|
-
name: nokogiri
|
74
|
-
requirement: !ruby/object:Gem::Requirement
|
75
|
-
requirements:
|
76
|
-
- - ">="
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: '0'
|
79
|
-
type: :runtime
|
80
|
-
prerelease: false
|
81
|
-
version_requirements: !ruby/object:Gem::Requirement
|
82
|
-
requirements:
|
83
|
-
- - ">="
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
|
-
name: json
|
88
|
-
requirement: !ruby/object:Gem::Requirement
|
89
|
-
requirements:
|
90
|
-
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: '0'
|
93
|
-
type: :development
|
94
|
-
prerelease: false
|
95
|
-
version_requirements: !ruby/object:Gem::Requirement
|
96
|
-
requirements:
|
97
|
-
- - ">="
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: '0'
|
100
58
|
- !ruby/object:Gem::Dependency
|
101
59
|
name: pry-byebug
|
102
60
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,12 +163,9 @@ files:
|
|
205
163
|
- bin/run_all_tests
|
206
164
|
- config/boot.rb
|
207
165
|
- lib/assembly-objectfile.rb
|
208
|
-
- lib/assembly
|
209
|
-
- lib/assembly
|
210
|
-
-
|
211
|
-
- profiles/DotGain20.icc
|
212
|
-
- profiles/sRGBIEC6196621.icc
|
213
|
-
- spec/object_file_spec.rb
|
166
|
+
- lib/assembly/object_file.rb
|
167
|
+
- lib/assembly/object_file/version.rb
|
168
|
+
- spec/assembly/object_file_spec.rb
|
214
169
|
- spec/spec_helper.rb
|
215
170
|
- spec/test_data/empty.txt
|
216
171
|
- spec/test_data/input/.empty
|
@@ -244,9 +199,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
244
199
|
- !ruby/object:Gem::Version
|
245
200
|
version: '0'
|
246
201
|
requirements: []
|
247
|
-
rubygems_version: 3.
|
202
|
+
rubygems_version: 3.2.32
|
248
203
|
signing_key:
|
249
204
|
specification_version: 4
|
250
|
-
summary: Ruby
|
251
|
-
|
205
|
+
summary: Ruby implementation of file services needed to prepare objects to be accessioned
|
206
|
+
into the Stanford Digital Repository
|
252
207
|
test_files: []
|
data/profiles/AdobeRGB1998.icc
DELETED
Binary file
|
data/profiles/DotGain20.icc
DELETED
Binary file
|
data/profiles/sRGBIEC6196621.icc
DELETED
Binary file
|