assembly-objectfile 2.1.0 → 2.1.3

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 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