riiif 0.3.0 → 0.4.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.yml +4 -0
- data/.rubocop_todo.yml +153 -0
- data/Rakefile +10 -4
- data/app/controllers/riiif/images_controller.rb +33 -33
- data/app/models/riiif/file.rb +23 -23
- data/app/models/riiif/image.rb +8 -8
- data/lib/riiif/abstract_file_system_resolver.rb +26 -0
- data/lib/riiif/akubra_system_file_resolver.rb +7 -16
- data/lib/riiif/file_system_file_resolver.rb +8 -19
- data/lib/riiif/http_file_resolver.rb +27 -27
- data/lib/riiif/rails/routes.rb +1 -1
- data/lib/riiif/routes.rb +4 -4
- data/lib/riiif/version.rb +1 -1
- data/lib/riiif.rb +4 -3
- data/riiif.gemspec +16 -14
- data/spec/controllers/riiif/images_controller_spec.rb +132 -0
- data/spec/models/riiif/akubra_system_file_resolver_spec.rb +12 -0
- data/spec/models/riiif/file_system_file_resolver_spec.rb +41 -0
- data/spec/models/{http_file_resolver_spec.rb → riiif/http_file_resolver_spec.rb} +8 -8
- data/spec/models/{image_spec.rb → riiif/image_spec.rb} +47 -47
- data/spec/routing/redirect_spec.rb +4 -4
- data/spec/routing/resize_routes_spec.rb +28 -28
- data/spec/spec_helper.rb +1 -4
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -2
- metadata +49 -18
- data/spec/controllers/images_controller_spec.rb +0 -138
- data/spec/models/akubra_system_file_resolver_spec.rb +0 -13
- data/spec/models/file_system_file_resolver_spec.rb +0 -19
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riiif
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.2.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,19 +95,33 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: rubocop
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
90
|
-
type: :
|
103
|
+
version: 0.41.2
|
104
|
+
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 0.41.2
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.5'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.5'
|
97
125
|
description: A IIIF image server
|
98
126
|
email:
|
99
127
|
- justin@curationexperts.com
|
@@ -103,6 +131,8 @@ extra_rdoc_files: []
|
|
103
131
|
files:
|
104
132
|
- ".gitignore"
|
105
133
|
- ".rspec"
|
134
|
+
- ".rubocop.yml"
|
135
|
+
- ".rubocop_todo.yml"
|
106
136
|
- ".travis.yml"
|
107
137
|
- CHANGELOG
|
108
138
|
- Gemfile
|
@@ -114,6 +144,7 @@ files:
|
|
114
144
|
- app/models/riiif/image.rb
|
115
145
|
- config/routes.rb
|
116
146
|
- lib/riiif.rb
|
147
|
+
- lib/riiif/abstract_file_system_resolver.rb
|
117
148
|
- lib/riiif/akubra_system_file_resolver.rb
|
118
149
|
- lib/riiif/engine.rb
|
119
150
|
- lib/riiif/file_system_file_resolver.rb
|
@@ -123,11 +154,11 @@ files:
|
|
123
154
|
- lib/riiif/routes.rb
|
124
155
|
- lib/riiif/version.rb
|
125
156
|
- riiif.gemspec
|
126
|
-
- spec/controllers/images_controller_spec.rb
|
127
|
-
- spec/models/akubra_system_file_resolver_spec.rb
|
128
|
-
- spec/models/file_system_file_resolver_spec.rb
|
129
|
-
- spec/models/http_file_resolver_spec.rb
|
130
|
-
- spec/models/image_spec.rb
|
157
|
+
- spec/controllers/riiif/images_controller_spec.rb
|
158
|
+
- spec/models/riiif/akubra_system_file_resolver_spec.rb
|
159
|
+
- spec/models/riiif/file_system_file_resolver_spec.rb
|
160
|
+
- spec/models/riiif/http_file_resolver_spec.rb
|
161
|
+
- spec/models/riiif/image_spec.rb
|
131
162
|
- spec/routing/redirect_spec.rb
|
132
163
|
- spec/routing/resize_routes_spec.rb
|
133
164
|
- spec/spec_helper.rb
|
@@ -158,11 +189,11 @@ signing_key:
|
|
158
189
|
specification_version: 4
|
159
190
|
summary: A rails engine that support IIIF requests
|
160
191
|
test_files:
|
161
|
-
- spec/controllers/images_controller_spec.rb
|
162
|
-
- spec/models/akubra_system_file_resolver_spec.rb
|
163
|
-
- spec/models/file_system_file_resolver_spec.rb
|
164
|
-
- spec/models/http_file_resolver_spec.rb
|
165
|
-
- spec/models/image_spec.rb
|
192
|
+
- spec/controllers/riiif/images_controller_spec.rb
|
193
|
+
- spec/models/riiif/akubra_system_file_resolver_spec.rb
|
194
|
+
- spec/models/riiif/file_system_file_resolver_spec.rb
|
195
|
+
- spec/models/riiif/http_file_resolver_spec.rb
|
196
|
+
- spec/models/riiif/image_spec.rb
|
166
197
|
- spec/routing/redirect_spec.rb
|
167
198
|
- spec/routing/resize_routes_spec.rb
|
168
199
|
- spec/spec_helper.rb
|
@@ -1,138 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'open-uri'
|
3
|
-
|
4
|
-
describe Riiif::ImagesController do
|
5
|
-
let(:filename) { File.expand_path('spec/samples/world.jp2') }
|
6
|
-
routes { Riiif::Engine.routes }
|
7
|
-
|
8
|
-
describe "#show" do
|
9
|
-
it "sends images to the service" do
|
10
|
-
image = double
|
11
|
-
expect(Riiif::Image).to receive(:new).with('abcd1234').and_return(image)
|
12
|
-
expect(image).to receive(:render).with("region" => 'full', "size" => 'full',
|
13
|
-
"rotation" => '0', "quality" => 'default',
|
14
|
-
"format" => 'jpg').and_return("IMAGEDATA")
|
15
|
-
get :show, id: 'abcd1234', action: "show", region: 'full', size: 'full',
|
16
|
-
rotation: '0', quality: 'default', format: 'jpg'
|
17
|
-
expect(response).to be_successful
|
18
|
-
expect(response.body).to eq 'IMAGEDATA'
|
19
|
-
expect(response.headers['Link']).to eq '<http://iiif.io/api/image/2/level1.json>;rel="profile"'
|
20
|
-
expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
|
21
|
-
end
|
22
|
-
|
23
|
-
context "with an unauthorized image" do
|
24
|
-
let(:auth) { double("no auth service", can?: false) }
|
25
|
-
let(:not_found_image) { double("not_found_image", render: 'test data') }
|
26
|
-
before do
|
27
|
-
allow(controller).to receive(:authorization_service).and_return(auth)
|
28
|
-
allow(controller).to receive(:not_found_image).and_return(not_found_image)
|
29
|
-
end
|
30
|
-
it "renders 401" do
|
31
|
-
get :show, id: 'abcd1234', action: "show", region: 'full', size: 'full',
|
32
|
-
rotation: '0', quality: 'default', format: 'jpg'
|
33
|
-
expect(response.body).to eq "test data"
|
34
|
-
expect(response.code).to eq "401"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with a invalid region" do
|
39
|
-
it "renders 400" do
|
40
|
-
image = double("an image")
|
41
|
-
allow(image).to receive(:render).and_raise Riiif::InvalidAttributeError
|
42
|
-
allow(Riiif::Image).to receive(:new).with('abcd1234').and_return(image)
|
43
|
-
get :show, id: 'abcd1234', action: "show", region: '`szoW0', size: 'full',
|
44
|
-
rotation: '0', quality: 'default', format: 'jpg'
|
45
|
-
expect(response.code).to eq "400"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "with a nonexistent image" do
|
50
|
-
it "should error when a default image isn't sent" do
|
51
|
-
expect(Riiif::Image).to receive(:new).with('bad_id').and_raise(OpenURI::HTTPError.new("fail", StringIO.new))
|
52
|
-
expect do
|
53
|
-
get :show, id: 'bad_id', action: "show", region: 'full', size: 'full',
|
54
|
-
rotation: '0', quality: 'default', format: 'jpg'
|
55
|
-
end.to raise_error(StandardError)
|
56
|
-
end
|
57
|
-
|
58
|
-
context "with a default image set" do
|
59
|
-
around do |example|
|
60
|
-
old_value = Riiif.not_found_image
|
61
|
-
Riiif.not_found_image = filename
|
62
|
-
example.run
|
63
|
-
Riiif.not_found_image = old_value
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should send the default 'not found' image for failed http files" do
|
67
|
-
not_found_image = double
|
68
|
-
expect(Riiif::Image).to receive(:new) do |id, file|
|
69
|
-
if file.present?
|
70
|
-
not_found_image
|
71
|
-
else
|
72
|
-
raise Riiif::ImageNotFoundError
|
73
|
-
end
|
74
|
-
end.twice
|
75
|
-
expect(not_found_image).to receive(:render).with("region" => 'full', "size" => 'full',
|
76
|
-
"rotation" => '0', "quality" => 'default',
|
77
|
-
"format" => 'jpg').and_return("default-image-data")
|
78
|
-
|
79
|
-
get :show, id: 'bad_id', action: "show", region: 'full', size: 'full',
|
80
|
-
rotation: '0', quality: 'default', format: 'jpg'
|
81
|
-
expect(response).to be_not_found
|
82
|
-
expect(response.body).to eq 'default-image-data'
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should send the default 'not found' image for failed files on the filesystem" do
|
86
|
-
not_found_image = double
|
87
|
-
expect(Riiif::Image).to receive(:new) do |id, file|
|
88
|
-
if file.present?
|
89
|
-
not_found_image
|
90
|
-
else
|
91
|
-
raise Riiif::ImageNotFoundError
|
92
|
-
end
|
93
|
-
end.twice
|
94
|
-
expect(not_found_image).to receive(:render).with("region" => 'full', "size" => 'full',
|
95
|
-
"rotation" => '0', "quality" => 'default',
|
96
|
-
"format" => 'jpg').and_return("default-image-data")
|
97
|
-
|
98
|
-
get :show, id: 'bad_id', action: "show", region: 'full', size: 'full',
|
99
|
-
rotation: '0', quality: 'default', format: 'jpg'
|
100
|
-
expect(response).to be_not_found
|
101
|
-
expect(response.body).to eq 'default-image-data'
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe "info" do
|
108
|
-
it "returns info" do
|
109
|
-
image = double
|
110
|
-
expect(Riiif::Image).to receive(:new).with('abcd1234').and_return(image)
|
111
|
-
expect(image).to receive(:info).and_return({width: 6000, height: 4000 })
|
112
|
-
get :info, id: 'abcd1234', format: 'json'
|
113
|
-
expect(response).to be_successful
|
114
|
-
json = JSON.parse(response.body)
|
115
|
-
expect(json).to eq "@context" => "http://iiif.io/api/image/2/context.json",
|
116
|
-
"@id" =>"http://test.host/images/abcd1234",
|
117
|
-
"width" =>6000,
|
118
|
-
"height" =>4000,
|
119
|
-
"profile" => ["http://iiif.io/api/image/2/level1.json", "formats" => ["jpg", "png"]],
|
120
|
-
'protocol' => 'http://iiif.io/api/image'
|
121
|
-
expect(response.headers['Link']).to eq '<http://iiif.io/api/image/2/level1.json>;rel="profile"'
|
122
|
-
expect(response.headers['Content-Type']).to eq 'application/ld+json; charset=utf-8'
|
123
|
-
expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
|
124
|
-
end
|
125
|
-
|
126
|
-
context "with an unauthorized image" do
|
127
|
-
let(:auth) { double("no auth service", can?: false) }
|
128
|
-
before do
|
129
|
-
allow(controller).to receive(:authorization_service).and_return(auth)
|
130
|
-
end
|
131
|
-
it "renders 401" do
|
132
|
-
get :info, id: 'abcd1234', format: 'json'
|
133
|
-
expect(response.body).to eq "{\"error\":\"unauthorized\"}"
|
134
|
-
expect(response.code).to eq "401"
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Riiif::AkubraSystemFileResolver do
|
4
|
-
subject { Riiif::AkubraSystemFileResolver.new(Rails.root.join('../spec/samples/'),'jp2',[[0,2],[2,2],[4,1]]) }
|
5
|
-
it "should raise an error when the file isn't found" do
|
6
|
-
expect{subject.find('demo:2')}.to raise_error Riiif::ImageNotFoundError
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should get the jpeg2000 file" do
|
10
|
-
expect(subject.find('demo:1').path).to eq Riiif::File.new(Dir.glob(subject.pathroot + '22/7e/9/info%3Afedora%2Fdemo%3A1%2Fjp2%2Fjp2.0').first).path
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Riiif::FileSystemFileResolver do
|
4
|
-
subject { Riiif::FileSystemFileResolver.new }
|
5
|
-
it "should raise an error when the file isn't found" do
|
6
|
-
expect{subject.find('1234')}.to raise_error Riiif::ImageNotFoundError
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should get the jpeg2000 file" do
|
10
|
-
expect(subject.find('world').path).to eq subject.root + '/spec/samples/world.jp2'
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should accept ids with dashes" do
|
14
|
-
subject.pattern('foo-bar-baz')
|
15
|
-
end
|
16
|
-
it "should accept ids with colins" do
|
17
|
-
subject.pattern('fo:baz')
|
18
|
-
end
|
19
|
-
end
|