riiif 1.4.3 → 1.4.4

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
  SHA1:
3
- metadata.gz: 9f437c07332a02c21a6dee64125a02b1d124bdec
4
- data.tar.gz: ac97febcbbfb128653e242a47120cfce675f40a0
3
+ metadata.gz: 5a89139fdccd2b6824042ae7bdae9880eb28d334
4
+ data.tar.gz: 7b13b9280123669a73aa533a50f218f9daccdb53
5
5
  SHA512:
6
- metadata.gz: c876a1694e4d26f2bfccb67b1182fb8659410cf740fa0abacb3e796d9ab31f0044bc90bed00e788f6c205752a237eb84bac9f2f6cea42b559157a55c6a9c87f5
7
- data.tar.gz: 3b5733068a706304b8dd2920fdd34dcf3853a2cef5bc7d9ef5dfcc4ccd568c5b7cb7bdf48f03fa4811331abae4418a5c9aa6d4c562c75ec541834568ac548935
6
+ metadata.gz: a3174488a09bcb1ecad59db2a8d7e338ab863af1d2a5afe07bbd746fd161ced2a0cf4bfc4ac85c9d4067fd41d089525e8419c0bc489be8f1cd8755e7718dfeed
7
+ data.tar.gz: 6afbc6db3a6029f38c35f46c204402c84de393ea1327fd3455e4ae0e798856e8c8726e9ad8e8e8526c5846392880d35c1ba60f45badb5a6c76d6942ef8cea323
@@ -33,10 +33,12 @@ module Riiif
33
33
  def info
34
34
  image = model.new(image_id)
35
35
  if authorization_service.can?(:info, image)
36
+ image_info = image.info
37
+ return render json: { error: 'no info' }, status: :not_found unless image_info.valid?
36
38
  headers['Access-Control-Allow-Origin'] = '*'
37
39
  # Set a Cache-Control header
38
40
  expires_in cache_expires, public: public_cache?
39
- render json: image.info.to_h.merge(server_info), content_type: 'application/ld+json'
41
+ render json: image_info.to_h.merge(server_info), content_type: 'application/ld+json'
40
42
  else
41
43
  render json: { error: 'unauthorized' }, status: :unauthorized
42
44
  end
@@ -0,0 +1,28 @@
1
+ module Riiif
2
+ # This is the result of calling the Riiif.image_info service. It stores the height & width
3
+ class ImageInformation
4
+ def initialize(width, height)
5
+ @width = width
6
+ @height = height
7
+ end
8
+
9
+ attr_reader :width, :height
10
+
11
+ def to_h
12
+ { width: width, height: height }
13
+ end
14
+
15
+ # Image information is only valid if height and width are present.
16
+ # If an image info service doesn't have the value yet (not characterized perhaps?)
17
+ # then we wouldn't want to cache this value.
18
+ def valid?
19
+ width.present? && height.present?
20
+ end
21
+
22
+ def ==(other)
23
+ other.class == self.class &&
24
+ other.width == width &&
25
+ other.height == height
26
+ end
27
+ end
28
+ end
data/lib/riiif/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Riiif
2
- VERSION = '1.4.3'.freeze
2
+ VERSION = '1.4.4'.freeze
3
3
  end
data/lib/riiif.rb CHANGED
@@ -13,11 +13,11 @@ module Riiif
13
13
  class Error < RuntimeError; end
14
14
  class InvalidAttributeError < Error; end
15
15
  class ImageNotFoundError < Error; end
16
+
16
17
  # This error is raised when Riiif can't convert an image
17
18
  class ConversionError < Error; end
18
19
 
19
20
  Transformation = Struct.new(:crop, :size, :quality, :rotation, :format)
20
- ImageInformation = Struct.new(:width, :height)
21
21
  mattr_accessor :not_found_image # the image to use when a lookup fails
22
- mattr_accessor :unauthorized_image # the image to use when a lookup fails
22
+ mattr_accessor :unauthorized_image # the image to use when a user doesn't have access
23
23
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'open-uri'
3
3
 
4
- describe Riiif::ImagesController do
4
+ RSpec.describe Riiif::ImagesController do
5
5
  let(:filename) { File.expand_path('spec/samples/world.jp2') }
6
6
  routes { Riiif::Engine.routes }
7
7
 
@@ -19,6 +19,7 @@ describe Riiif::ImagesController do
19
19
  end
20
20
  end
21
21
  end
22
+
22
23
  describe '#show' do
23
24
  it 'sends images to the service' do
24
25
  image = double
@@ -131,23 +132,45 @@ describe Riiif::ImagesController do
131
132
  end
132
133
 
133
134
  describe 'info' do
134
- it 'returns info' do
135
- image = double
136
- expect(Riiif::Image).to receive(:new).with('abcd1234').and_return(image)
137
- expect(image).to receive(:info).and_return(Riiif::ImageInformation.new(6000, 4000))
138
- get :info, params: { id: 'abcd1234', format: 'json' }
139
- expect(response).to be_successful
140
- json = JSON.parse(response.body)
141
- expect(json).to eq '@context' => 'http://iiif.io/api/image/2/context.json',
142
- '@id' => 'http://test.host/abcd1234',
143
- 'width' => 6000,
144
- 'height' => 4000,
145
- 'profile' => ['http://iiif.io/api/image/2/level1.json', 'formats' => %w(jpg png)],
146
- 'protocol' => 'http://iiif.io/api/image'
147
- expect(response.headers['Link']).to eq '<http://iiif.io/api/image/2/level1.json>;rel="profile"'
148
- expect(response.headers['Content-Type']).to eq 'application/ld+json; charset=utf-8'
149
- expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
150
- expect(response.headers['Cache-Control']).to eq "max-age=#{1.year.to_i}, private"
135
+ context 'the happy path' do
136
+ let(:image) { double }
137
+ let(:json) { JSON.parse(response.body) }
138
+
139
+ before do
140
+ allow(Riiif::Image).to receive(:new).with('abcd1234').and_return(image)
141
+ allow(image).to receive(:info).and_return(Riiif::ImageInformation.new(6000, 4000))
142
+ end
143
+
144
+ it 'returns info' do
145
+ get :info, params: { id: 'abcd1234', format: 'json' }
146
+ expect(response).to be_successful
147
+ expect(json).to eq '@context' => 'http://iiif.io/api/image/2/context.json',
148
+ '@id' => 'http://test.host/abcd1234',
149
+ 'width' => 6000,
150
+ 'height' => 4000,
151
+ 'profile' => ['http://iiif.io/api/image/2/level1.json', 'formats' => %w(jpg png)],
152
+ 'protocol' => 'http://iiif.io/api/image'
153
+ expect(response.headers['Link']).to eq '<http://iiif.io/api/image/2/level1.json>;rel="profile"'
154
+ expect(response.headers['Content-Type']).to eq 'application/ld+json; charset=utf-8'
155
+ expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
156
+ expect(response.headers['Cache-Control']).to eq "max-age=#{1.year.to_i}, private"
157
+ end
158
+ end
159
+
160
+ context 'when the info_service has an invalid result' do
161
+ let(:image) { double }
162
+ let(:json) { JSON.parse(response.body) }
163
+
164
+ before do
165
+ allow(Riiif::Image).to receive(:new).with('abcd1234').and_return(image)
166
+ allow(image).to receive(:info).and_return(Riiif::ImageInformation.new(nil, nil))
167
+ end
168
+
169
+ it 'returns an error' do
170
+ get :info, params: { id: 'abcd1234', format: 'json' }
171
+ expect(response).to be_not_found
172
+ expect(json).to eq 'error' => 'no info'
173
+ end
151
174
  end
152
175
 
153
176
  context 'with an unauthorized image' do
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Riiif::ImageInformation do
4
+ describe '#valid?' do
5
+ subject { info.valid? }
6
+
7
+ context 'with valid dimensions' do
8
+ let(:info) { described_class.new(100, 200) }
9
+
10
+ it { is_expected.to be true }
11
+ end
12
+
13
+ context 'with nil dimensions' do
14
+ let(:info) { described_class.new(nil, nil) }
15
+
16
+ it { is_expected.to be false }
17
+ end
18
+ end
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riiif
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -148,6 +148,7 @@ files:
148
148
  - app/controllers/riiif/images_controller.rb
149
149
  - app/models/riiif/file.rb
150
150
  - app/models/riiif/image.rb
151
+ - app/models/riiif/image_information.rb
151
152
  - app/services/riiif/command_runner.rb
152
153
  - app/services/riiif/image_magick_info_extractor.rb
153
154
  - app/services/riiif/imagemagick_command_factory.rb
@@ -177,6 +178,7 @@ files:
177
178
  - spec/models/riiif/akubra_system_file_resolver_spec.rb
178
179
  - spec/models/riiif/file_system_file_resolver_spec.rb
179
180
  - spec/models/riiif/http_file_resolver_spec.rb
181
+ - spec/models/riiif/image_information_spec.rb
180
182
  - spec/models/riiif/image_spec.rb
181
183
  - spec/routing/redirect_spec.rb
182
184
  - spec/routing/resize_routes_spec.rb
@@ -204,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
206
  version: '0'
205
207
  requirements: []
206
208
  rubyforge_project:
207
- rubygems_version: 2.5.2
209
+ rubygems_version: 2.6.12
208
210
  signing_key:
209
211
  specification_version: 4
210
212
  summary: A rails engine that support IIIF requests
@@ -213,6 +215,7 @@ test_files:
213
215
  - spec/models/riiif/akubra_system_file_resolver_spec.rb
214
216
  - spec/models/riiif/file_system_file_resolver_spec.rb
215
217
  - spec/models/riiif/http_file_resolver_spec.rb
218
+ - spec/models/riiif/image_information_spec.rb
216
219
  - spec/models/riiif/image_spec.rb
217
220
  - spec/routing/redirect_spec.rb
218
221
  - spec/routing/resize_routes_spec.rb