assembly-objectfile 2.1.0 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 101baff5dcb53ae691341818de800b9836bc5c2db2483b3cdac08afa8fed479e
4
- data.tar.gz: 0265e4b3d35ecf91a07b48129e4485e9844e6e1c940a08ae4f32246b209d2260
3
+ metadata.gz: 6743d03c8c75529ad425586ed16bece4858c1fd2394342918ab29c568199d4f7
4
+ data.tar.gz: 16a79c4115124aae1402f1651076a85eb58912b4309f5a7503536246cd55076f
5
5
  SHA512:
6
- metadata.gz: fa0814a3a51d7d98f7eeb91611193e367accb4161ab18967b1afdb7caeb54476994f078ed58eff684dfba37dd2358a75fba98b181df74f165f82c65537723ebc
7
- data.tar.gz: 91272e14724ff23ac668bf65339f29a272606712da691a7e13018d70c7e2a00ac8d242723ae6b4a9e05007543174e43e6ade6abb8f71a922ff9a4f4b230b10bb
6
+ metadata.gz: f08d614455304c1d7c935bc5e69ca85400493b8ba4bb045d048dc519c5a78f401d2d7e1a62292a8048cc0e9b83bdd0bc3f9fa540e8021356f9929ba3ec72ef37
7
+ data.tar.gz: 2340e0deff59c7e913272c6c18ce6f27513d2b1777e7d7da9120a4b3377f00c80ae2c59e31c3c29769ae763dc2cc4888b3bbdc76ce75f6962b81b2de713d4551
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2022-07-19 19:06:39 UTC using RuboCop version 1.31.2.
3
+ # on 2022-07-20 17:16:46 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
@@ -9,4 +9,4 @@
9
9
  # Offense count: 1
10
10
  # Configuration parameters: CountComments, CountAsOne.
11
11
  Metrics/ClassLength:
12
- Max: 118
12
+ Max: 122
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assembly-objectfile (2.1.0)
4
+ assembly-objectfile (2.1.3)
5
5
  activesupport (>= 5.2.0)
6
6
  mime-types (> 3)
7
7
  mini_exiftool
@@ -28,16 +28,16 @@ GEM
28
28
  mime-types-data (~> 3.2015)
29
29
  mime-types-data (3.2022.0105)
30
30
  mini_exiftool (2.10.2)
31
- minitest (5.16.2)
31
+ minitest (5.16.3)
32
32
  parallel (1.22.1)
33
- parser (3.1.2.0)
33
+ parser (3.1.2.1)
34
34
  ast (~> 2.4.1)
35
- pry (0.13.1)
35
+ pry (0.14.1)
36
36
  coderay (~> 1.1)
37
37
  method_source (~> 1.0)
38
- pry-byebug (3.9.0)
38
+ pry-byebug (3.10.1)
39
39
  byebug (~> 11.0)
40
- pry (~> 0.13.0)
40
+ pry (>= 0.13, < 0.15)
41
41
  rainbow (3.1.1)
42
42
  rake (13.0.6)
43
43
  regexp_parser (2.5.0)
@@ -55,17 +55,17 @@ GEM
55
55
  diff-lcs (>= 1.2.0, < 2.0)
56
56
  rspec-support (~> 3.11.0)
57
57
  rspec-support (3.11.0)
58
- rubocop (1.31.2)
58
+ rubocop (1.35.1)
59
59
  json (~> 2.3)
60
60
  parallel (~> 1.10)
61
- parser (>= 3.1.0.0)
61
+ parser (>= 3.1.2.1)
62
62
  rainbow (>= 2.2.2, < 4.0)
63
63
  regexp_parser (>= 1.8, < 3.0)
64
64
  rexml (>= 3.2.5, < 4.0)
65
- rubocop-ast (>= 1.18.0, < 2.0)
65
+ rubocop-ast (>= 1.20.1, < 2.0)
66
66
  ruby-progressbar (~> 1.7)
67
67
  unicode-display_width (>= 1.4.0, < 3.0)
68
- rubocop-ast (1.19.1)
68
+ rubocop-ast (1.21.0)
69
69
  parser (>= 3.1.1.0)
70
70
  rubocop-rspec (2.12.1)
71
71
  rubocop (~> 1.31)
@@ -76,7 +76,7 @@ GEM
76
76
  simplecov_json_formatter (~> 0.1)
77
77
  simplecov-html (0.12.3)
78
78
  simplecov_json_formatter (0.1.4)
79
- tzinfo (2.0.4)
79
+ tzinfo (2.0.5)
80
80
  concurrent-ruby (~> 1.0)
81
81
  unicode-display_width (2.2.0)
82
82
 
@@ -4,6 +4,6 @@
4
4
  module Assembly
5
5
  class ObjectFile
6
6
  # Gem version
7
- VERSION = '2.1.0'
7
+ VERSION = '2.1.3'
8
8
  end
9
9
  end
@@ -7,11 +7,8 @@ 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.
11
- # Useful for removing a common path from a set of filenames when producing content metadata
12
- #
13
- # @param [Array] strings Array of filenames with paths to operate on
14
- # @return [String] longest common initial part of path of filenames passed in
10
+ # @param [Array] strings Array of filenames with paths
11
+ # @return [String] longest common initial path of filenames passed in
15
12
  #
16
13
  # Example:
17
14
  # puts Assembly::ObjectFile.common_prefix(['/Users/peter/00/test.tif','/Users/peter/05/test.jp2'])
@@ -52,8 +49,6 @@ module Assembly
52
49
  # :file (from unix file system command)
53
50
  # the default is defined in the private `default_mime_type_order` method
54
51
  # but you can override to set your own order
55
- # @example
56
- # Assembly::ObjectFile.new('/input/path_to_file.tif')
57
52
  def initialize(path, params = {})
58
53
  @path = path
59
54
  @label = params[:label]
@@ -64,64 +59,41 @@ module Assembly
64
59
  @mime_type_order = params[:mime_type_order] || default_mime_type_order
65
60
  end
66
61
 
67
- # @return [String] base filename
68
- # @example
69
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
70
- # puts source_file.filename # "path_to_file.tif"
71
62
  def filename
72
63
  File.basename(path)
73
64
  end
74
65
 
75
- # @return [String] base directory
76
- # @example
77
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
78
- # puts source_file.dirname # "/input"
79
66
  def dirname
80
67
  File.dirname(path)
81
68
  end
82
69
 
83
- # @return [String] filename extension
84
- # @example
85
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
86
- # puts source_file.ext # ".tif"
87
70
  def ext
88
71
  File.extname(path)
89
72
  end
90
73
 
91
- # @return [String] base filename without extension
92
- # @example
93
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
94
- # puts source_file.filename # "path_to_file"
95
74
  def filename_without_ext
96
75
  File.basename(path, ext)
97
76
  end
98
77
 
99
- # @return [MiniExiftool] exif information stored as a hash and an object
100
- # @example
101
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
102
- # puts source_file.exif # hash with exif information
78
+ # @return [MiniExiftool] exif mini_exiftool gem object wrapper for exiftool
103
79
  def exif
104
80
  @exif ||= begin
105
81
  check_for_file
106
82
  MiniExiftool.new(path, replace_invalid_chars: '?')
83
+ rescue MiniExiftool::Error
84
+ # MiniExiftool may raise an error on files it doesn't know how to handle (disk images for example)
85
+ # but we don't want this to prevent an ObjectFile from being created, so just swallow it.
86
+ nil
107
87
  end
108
88
  end
109
89
 
110
- # Computes md5 checksum or returns cached value
111
- # @return [String] md5 checksum
112
- # @example
113
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
114
- # puts source_file.md5 # 'XXX123XXX1243XX1243'
90
+ # @return [String] computed md5 checksum
115
91
  def md5
116
92
  check_for_file unless @md5
117
93
  @md5 ||= Digest::MD5.file(path).hexdigest
118
94
  end
119
95
 
120
- # Computes sha1 checksum or return cached value
121
- # @return [String] sha1 checksum
122
- # @example
123
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
124
- # puts source_file.sha1 # 'XXX123XXX1243XX1243'
96
+ # @return [String] computed sha1 checksum
125
97
  def sha1
126
98
  check_for_file unless @sha1
127
99
  @sha1 ||= Digest::SHA1.file(path).hexdigest
@@ -129,10 +101,7 @@ module Assembly
129
101
 
130
102
  # Returns mimetype information for the current file based on the ordering set in default_mime_type_order
131
103
  # We stop computing mimetypes as soon as we have a method that returns a value
132
- # @return [String] mime type
133
- # @example
134
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
135
- # puts source_file.mimetype # 'text/plain'
104
+ # @return [String] mimetype of the file
136
105
  def mimetype
137
106
  @mimetype ||= begin
138
107
  check_for_file
@@ -147,84 +116,60 @@ module Assembly
147
116
 
148
117
  # @return [Symbol] the type of object, could be :application (for PDF or Word, etc),
149
118
  # :audio, :image, :message, :model, :multipart, :text or :video
150
- # @example
151
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
152
- # puts source_file.object_type # :image
153
119
  def object_type
154
120
  lookup = MIME::Types[mimetype][0]
155
121
  lookup.nil? ? :other : lookup.media_type.to_sym
156
122
  end
157
123
 
158
- # @return [Boolean] if object is an image
159
- # @example
160
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
161
- # puts source_file.image? # true
124
+ # @return [Boolean] true if the mime-types gem recognizes it as an image
162
125
  def image?
163
- object_type == :image
126
+ return false if object_type != :image
127
+
128
+ # We exclude TARGA images here because we've seen where the file is a disk image and
129
+ # when we look for a mime type it is `image/x-tga', however it is not
130
+ # recognizable by exiftool. See https://github.com/sul-dlss/assembly-objectfile/issues/98
131
+ mimetype != 'image/x-tga'
164
132
  end
165
133
 
166
- # Examines the input image for validity. Used to determine if image is a valid and useful image.
167
- # If image is not a jp2, also checks if it is jp2able?
168
- # @return [Boolean] true if image is valid, false if not.
169
- # @example
170
- # source_img = Assembly::ObjectFile.new('/input/path_to_file.tif')
171
- # puts source_img.valid_image? # true
134
+ # @return [Boolean] true if the mime-types gem recognizes it as an image
135
+ # AND it is a jp2 or jp2able?
172
136
  def valid_image?
173
137
  return false unless image?
174
138
 
175
139
  mimetype == 'image/jp2' || jp2able?
176
140
  end
177
141
 
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.
182
- # @return [Boolean] true if image should have a jp2 created, false if not.
183
- # @example
184
- # source_img = Assembly::ObjectFile.new('/input/path_to_file.tif')
185
- # puts source_img.jp2able? # true
142
+ # @return [Boolean] true if we can create a jp2 from the file
186
143
  def jp2able?
187
144
  return false unless exif
188
145
 
189
146
  Assembly::VALID_IMAGE_MIMETYPES.include?(mimetype)
190
147
  end
191
148
 
192
- # Returns file size information for the current file in bytes.
193
149
  # @return [Integer] file size in bytes
194
- # @example
195
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
196
- # puts source_file.filesize # 1345
197
150
  def filesize
198
151
  check_for_file
199
152
  @filesize ||= File.size(path)
200
153
  end
201
154
 
202
- # Determines if the file exists (and is not a directory)
203
- # @return [Boolean] file exists
204
- # @example
205
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.tif')
206
- # puts source_file.file_exists? # true
155
+ # @return [Boolean] file exists and is not a directory
207
156
  def file_exists?
208
157
  @file_exists ||= (File.exist?(path) && !File.directory?(path))
209
158
  end
210
159
 
211
160
  private
212
161
 
213
- # private method to check for file existence before operating on it
162
+ # check for file existence before operating on it
214
163
  def check_for_file
215
164
  raise "input file #{path} does not exist or is a directory" unless file_exists?
216
165
  end
217
166
 
218
- # prive method defining default preferred ordering of how mimetypes are determined
167
+ # defines default preferred ordering of how mimetypes are determined
219
168
  def default_mime_type_order
220
169
  %i[override exif file extension]
221
170
  end
222
171
 
223
- # Returns mimetype information using the mime-types gem (based on a file extension lookup)
224
- # @return [String] mime type for supplied file
225
- # @example
226
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
227
- # puts source_file.extension_mimetype # 'text/plain'
172
+ # @return [String] mime type for supplied file using the mime-types gem (based on a file extension lookup)
228
173
  def extension_mimetype
229
174
  @extension_mimetype ||= begin
230
175
  mtype = MIME::Types.type_for(path).first
@@ -232,11 +177,7 @@ module Assembly
232
177
  end
233
178
  end
234
179
 
235
- # Returns mimetype information for the current file based on unix file system command.
236
- # @return [String] mime type for supplied file
237
- # @example
238
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
239
- # puts source_file.file_mimetype # 'text/plain'
180
+ # @return [String] mime type for supplied file based on unix file system command
240
181
  def file_mimetype
241
182
  @file_mimetype ||= begin
242
183
  check_for_file
@@ -244,40 +185,22 @@ module Assembly
244
185
  end
245
186
  end
246
187
 
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)
249
- # @return [String] mime type for supplied file
250
- # @example
251
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
252
- # puts source_file.exif_mimetype # 'text/plain'
188
+ # @return [String] mimetype information for the current file based on exif data,
189
+ # unless mimetype is configured as one we'd rather get from the file system command
190
+ # (e.g. exif struggles or we get better info from file system command)
253
191
  def exif_mimetype
254
192
  @exif_mimetype ||= begin
255
193
  check_for_file
256
194
  # if it's not a "trusted" mimetype and there is exif data; get the mimetype from the exif
257
195
  prefer_exif = !Assembly::TRUSTED_MIMETYPES.include?(file_mimetype)
258
- exif.mimetype if exif&.mimetype && prefer_exif
196
+ exif.mimetype if prefer_exif && exif&.mimetype
259
197
  end
260
198
  end
261
199
 
262
200
  # Returns mimetype information using the manual override mapping (based on a file extension lookup)
263
201
  # @return [String] mime type for supplied file if a mapping exists for the file's extension
264
- # @example
265
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.json')
266
- # puts source_file.override_mimetype # 'application/json'
267
202
  def override_mimetype
268
203
  @override_mimetype ||= Assembly::OVERRIDE_MIMETYPES.fetch(ext.to_sym, '')
269
204
  end
270
-
271
- # @note Uses shell call to "file", only expected to work on unix based systems
272
- # @return [String] encoding for supplied file
273
- # @example
274
- # source_file = Assembly::ObjectFile.new('/input/path_to_file.txt')
275
- # puts source_file.encoding # 'us-ascii'
276
- def encoding
277
- @encoding ||= begin
278
- check_for_file
279
- `file --mime-encoding "#{path}"`.delete("\n").split(':')[1].strip
280
- end
281
- end
282
205
  end
283
206
  end
@@ -1,9 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Assembly
4
- # the path to the gem, used to access profiles stored with the gem
5
- PATH_TO_GEM = File.expand_path("#{File.dirname(__FILE__)}/..")
6
-
7
4
  # If input image is not one of these mime types, it will not be regarded as a valid image
8
5
  # for the purpose of generating a JP2 derivative
9
6
  VALID_IMAGE_MIMETYPES = ['image/jpeg', 'image/tiff', 'image/tif', 'image/png'].freeze
@@ -12,7 +9,8 @@ module Assembly
12
9
  # one of these is returned by the file command, then a check will be made to see if exif data exists...
13
10
  # if so, the mimetype returned by the exif data will be used if no exif data exists, then the
14
11
  # mimetype returned by the unix file command will be used
15
- TRUSTED_MIMETYPES = ['text/plain', 'plain/text', 'application/pdf', 'text/html', 'application/xml'].freeze
12
+ TRUSTED_MIMETYPES = ['text/plain', 'plain/text', 'application/pdf', 'text/html', 'application/xml',
13
+ 'application/octet-stream'].freeze
16
14
 
17
15
  # This is a manual override mapping of file extension to mimetype; if a file with the given extension
18
16
  # is found, the mapped mimetype will be returned and no further methods will be used - this is used
@@ -97,34 +97,41 @@ describe Assembly::ObjectFile do
97
97
  end
98
98
 
99
99
  describe '#image?' do
100
+ subject { object_file.image? }
101
+
100
102
  context 'with tiff' do
101
- it 'true' do
102
- object_file = described_class.new(TEST_TIF_INPUT_FILE)
103
- expect(object_file.image?).to be(true)
104
- end
103
+ let(:object_file) { described_class.new(TEST_TIF_INPUT_FILE) }
104
+
105
+ it { is_expected.to be true }
105
106
  end
106
107
 
107
108
  context 'with jp2' do
108
- it 'true' do
109
- object_file = described_class.new(TEST_JP2_INPUT_FILE)
110
- expect(object_file.image?).to be(true)
109
+ let(:object_file) { described_class.new(TEST_JP2_INPUT_FILE) }
110
+
111
+ it { is_expected.to be true }
112
+ end
113
+
114
+ context 'with targa file' do
115
+ before do
116
+ allow(object_file).to receive(:exif_mimetype).and_return(nil)
117
+ allow(object_file).to receive(:file_mimetype).and_return('image/x-tga')
111
118
  end
119
+
120
+ let(:object_file) { described_class.new(TEST_JP2_INPUT_FILE) }
121
+
122
+ it { is_expected.to be false }
112
123
  end
113
124
 
114
125
  context 'with ruby file' do
115
- it 'false' do
116
- non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
117
- object_file = described_class.new(non_image_file)
118
- expect(object_file.image?).to be(false)
119
- end
126
+ let(:object_file) { described_class.new(File.join(PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')) }
127
+
128
+ it { is_expected.to be false }
120
129
  end
121
130
 
122
131
  context 'with xml' do
123
- it 'false' do
124
- non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/test_data/input/file_with_no_exif.xml')
125
- object_file = described_class.new(non_image_file)
126
- expect(object_file.image?).to be(false)
127
- end
132
+ let(:object_file) { described_class.new(File.join(PATH_TO_GEM, 'spec/test_data/input/file_with_no_exif.xml')) }
133
+
134
+ it { is_expected.to be false }
128
135
  end
129
136
  end
130
137
 
@@ -145,7 +152,7 @@ describe Assembly::ObjectFile do
145
152
 
146
153
  context 'with ruby file' do
147
154
  it ':text' do
148
- non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
155
+ non_image_file = File.join(PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
149
156
  object_file = described_class.new(non_image_file)
150
157
  expect(object_file.object_type).to eq(:text)
151
158
  end
@@ -153,7 +160,7 @@ describe Assembly::ObjectFile do
153
160
 
154
161
  context 'with xml' do
155
162
  it ':application' do
156
- non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/test_data/input/file_with_no_exif.xml')
163
+ non_image_file = File.join(PATH_TO_GEM, 'spec/test_data/input/file_with_no_exif.xml')
157
164
  object_file = described_class.new(non_image_file)
158
165
  expect(object_file.object_type).to eq(:application)
159
166
  end
@@ -191,7 +198,7 @@ describe Assembly::ObjectFile do
191
198
 
192
199
  context 'with ruby file' do
193
200
  it 'false' do
194
- non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
201
+ non_image_file = File.join(PATH_TO_GEM, 'spec/assembly/object_file_spec.rb')
195
202
  object_file = described_class.new(non_image_file)
196
203
  expect(object_file.valid_image?).to be(false)
197
204
  end
@@ -199,7 +206,7 @@ describe Assembly::ObjectFile do
199
206
 
200
207
  context 'with xml' do
201
208
  it 'false' do
202
- non_image_file = File.join(Assembly::PATH_TO_GEM, 'spec/test_data/input/file_with_no_exif.xml')
209
+ non_image_file = File.join(PATH_TO_GEM, 'spec/test_data/input/file_with_no_exif.xml')
203
210
  object_file = described_class.new(non_image_file)
204
211
  expect(object_file.valid_image?).to be(false)
205
212
  end
@@ -359,7 +366,7 @@ describe Assembly::ObjectFile do
359
366
 
360
367
  describe '#file_exists?' do
361
368
  it 'false when a valid directory is specified instead of a file' do
362
- path = Assembly::PATH_TO_GEM
369
+ path = PATH_TO_GEM
363
370
  object_file = described_class.new(path)
364
371
  expect(File.exist?(path)).to be true
365
372
  expect(File.directory?(path)).to be true
@@ -367,7 +374,7 @@ describe Assembly::ObjectFile do
367
374
  end
368
375
 
369
376
  it 'false when a non-existent file is specified' do
370
- path = File.join(Assembly::PATH_TO_GEM, 'file_not_there.txt')
377
+ path = File.join(PATH_TO_GEM, 'file_not_there.txt')
371
378
  object_file = described_class.new(path)
372
379
  expect(File.exist?(path)).to be false
373
380
  expect(File.directory?(path)).to be false
@@ -387,32 +394,17 @@ describe Assembly::ObjectFile do
387
394
  end
388
395
  end
389
396
 
390
- describe '#encoding' do
391
- context 'with .tif file' do
392
- it 'binary' do
393
- object_file = described_class.new(TEST_TIF_INPUT_FILE)
394
- expect(object_file.send(:encoding)).to eq('binary')
395
- end
396
- end
397
+ describe '#exif' do
398
+ subject(:exif) { object_file.exif }
397
399
 
398
- context 'with .txt file' do
399
- it 'binary' do
400
- object_file = described_class.new(TEST_RES1_TEXT)
401
- expect(object_file.send(:encoding)).to eq('us-ascii')
402
- end
403
- end
404
- end
400
+ let(:object_file) { described_class.new(TEST_TIF_INPUT_FILE) }
405
401
 
406
- describe '#exif' do
407
- it 'returns MiniExiftool object' do
408
- object_file = described_class.new(TEST_TIF_INPUT_FILE)
409
- expect(object_file.exif).not_to be_nil
410
- expect(object_file.exif.class).to eq MiniExiftool
411
- end
402
+ it { is_expected.to be_kind_of MiniExiftool }
403
+
404
+ context 'when exiftool raises an error initializing the file' do
405
+ let(:object_file) { described_class.new('spec/test_data/empty.txt') }
412
406
 
413
- it 'raises MiniExiftool::Error if exiftool raises one' do
414
- object_file = described_class.new('spec/test_data/empty.txt')
415
- expect { object_file.exif }.to raise_error(MiniExiftool::Error)
407
+ it { is_expected.to be_nil }
416
408
  end
417
409
  end
418
410
 
data/spec/spec_helper.rb CHANGED
@@ -10,13 +10,10 @@ RSpec.configure do |config|
10
10
  config.order = 'random'
11
11
  end
12
12
 
13
- TEST_DATA_DIR = File.join(Assembly::PATH_TO_GEM, 'spec', 'test_data')
14
- TEST_INPUT_DIR = File.join(TEST_DATA_DIR, 'input')
15
- TEST_OUTPUT_DIR = File.join(TEST_DATA_DIR, 'output')
13
+ PATH_TO_GEM = File.expand_path("#{File.dirname(__FILE__)}/..")
14
+ TEST_INPUT_DIR = File.join(PATH_TO_GEM, 'spec', 'test_data', 'input')
16
15
  TEST_TIF_INPUT_FILE = File.join(TEST_INPUT_DIR, 'test.tif')
17
- TEST_JPEG_INPUT_FILE = File.join(TEST_INPUT_DIR, 'test.jpg')
18
16
  TEST_JP2_INPUT_FILE = File.join(TEST_INPUT_DIR, 'test.jp2')
19
- TEST_JP2_OUTPUT_FILE = File.join(TEST_OUTPUT_DIR, 'test.jp2')
20
17
 
21
18
  TEST_TIFF_NO_COLOR_FILE = File.join(TEST_INPUT_DIR, 'test_no_color_profile.tif')
22
19
 
@@ -30,5 +27,3 @@ TEST_JSON_FILE = File.join(TEST_INPUT_DIR, 'test.json')
30
27
 
31
28
  TEST_OBJ_FILE = File.join(TEST_INPUT_DIR, 'someobject.obj')
32
29
  TEST_PLY_FILE = File.join(TEST_INPUT_DIR, 'someobject.ply')
33
-
34
- TEST_DRUID = 'nx288wh8889'
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.1.0
4
+ version: 2.1.3
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-19 00:00:00.000000000 Z
14
+ date: 2022-08-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport