riiif 0.0.10 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +8 -0
- data/README.md +10 -6
- data/Rakefile +4 -2
- data/app/controllers/riiif/images_controller.rb +11 -8
- data/app/models/riiif/image.rb +1 -1
- data/config/routes.rb +1 -9
- data/lib/riiif/engine.rb +1 -1
- data/lib/riiif/file_system_file_resolver.rb +10 -9
- data/lib/riiif/http_file_resolver.rb +35 -15
- data/lib/riiif/rails/routes.rb +12 -0
- data/lib/riiif/routes.rb +29 -0
- data/lib/riiif/version.rb +1 -1
- data/lib/riiif.rb +1 -0
- data/spec/controllers/images_controller_spec.rb +1 -1
- data/spec/models/file_system_file_resolver_spec.rb +2 -2
- data/spec/models/http_file_resolver_spec.rb +20 -8
- data/spec/models/image_spec.rb +3 -3
- data/spec/routing/resize_routes_spec.rb +8 -8
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b40c5ba24332506e2dcb444e2034d45af7b96f22
|
4
|
+
data.tar.gz: 27a8f56407ceb92566925db564feb8bfff556e94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d98a5365e702626c211458f480d5b130089f4326bdd8f73c607141aaeaa52585e1b9d48fda9feb70705c57b359d6fbef8136817b10cfd95a8f4c65238cb6f59a
|
7
|
+
data.tar.gz: d42a807b1e645fa03e6d6bda49bd03b046c7b35470094cabe64b949f67203f943fe8e0e92cb521f825f0e18918c284302be2e399b5a151fe3047b6a795c9a445
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -36,7 +36,7 @@ Or install it yourself as:
|
|
36
36
|
By default Riiif is set to load images from the filesystem using the Riiif::FileSystemFileResolver.
|
37
37
|
You can configure how this resolver finds the files by setting this property:
|
38
38
|
```
|
39
|
-
Riiif::
|
39
|
+
Riiif::Image.file_resolver.base_path = '/opt/repository/images/'
|
40
40
|
```
|
41
41
|
When the Id passed in is "foo_image", then it will look for an image file using this glob:
|
42
42
|
```
|
@@ -46,18 +46,22 @@ When the Id passed in is "foo_image", then it will look for an image file using
|
|
46
46
|
### Images retrieved over HTTP
|
47
47
|
It's preferable to use files on the filesystem, because this avoids the overhead of downloading the file. If this is unavoidable, Riiif can be configured to fetch files from the network. To enable this behavior, configure Riiif to use an alternative resolver:
|
48
48
|
```
|
49
|
-
Riiif::Image.file_resolver = Riiif::HTTPFileResolver
|
49
|
+
Riiif::Image.file_resolver = Riiif::HTTPFileResolver.new
|
50
50
|
```
|
51
51
|
Then we configure the resolver with a mechanism for mapping the provided id to a url:
|
52
52
|
```
|
53
|
-
Riiif::
|
53
|
+
Riiif::Image.file_resolver.id_to_uri = lambda do |id|
|
54
54
|
"http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/#{id}.jpg/600px-#{id}.jpg"
|
55
55
|
end
|
56
56
|
```
|
57
|
+
If you need to use HTTP basic authentication you can enable it like this:
|
58
|
+
```
|
59
|
+
Riiif::Image.file_resolver.basic_auth_credentials = ['username', 's0s3kr3t']
|
60
|
+
```
|
57
61
|
|
58
62
|
This file resolver caches the network files, so you will want to clear out the old files or the cache will expand until you run out of disk space.
|
59
63
|
Using a script like this would be a good idea: https://github.com/pulibrary/loris/blob/607567b921404a15a2111fbd7123604f4fdec087/bin/loris-cache_clean.sh
|
60
|
-
By default the cache is located in `tmp/network_files`. You can set the cache path like this: `Riiif::
|
64
|
+
By default the cache is located in `tmp/network_files`. You can set the cache path like this: `Riiif::Image.file_resolver.cache_path = '/var/cache'`
|
61
65
|
|
62
66
|
## Usage
|
63
67
|
|
@@ -103,11 +107,11 @@ Create an initializer like this in `config/initializers/riiif_initializer.rb`
|
|
103
107
|
|
104
108
|
```ruby
|
105
109
|
# Tell RIIIF to get files via HTTP (not from the local disk)
|
106
|
-
Riiif::Image.file_resolver = Riiif::HTTPFileResolver
|
110
|
+
Riiif::Image.file_resolver = Riiif::HTTPFileResolver.new
|
107
111
|
|
108
112
|
# This tells RIIIF how to resolve the identifier to a URI in Fedora
|
109
113
|
DATASTREAM = 'imageContent'
|
110
|
-
Riiif::
|
114
|
+
Riiif::Image.file_resolver.id_to_uri = lambda do |id|
|
111
115
|
connection = ActiveFedora::Base.connection_for_pid(id)
|
112
116
|
host = connection.config[:url]
|
113
117
|
path = connection.api.datastream_content_url(id, DATASTREAM, {})
|
data/Rakefile
CHANGED
@@ -3,11 +3,11 @@ module Riiif
|
|
3
3
|
before_filter :link_header, only: [:show, :info]
|
4
4
|
def show
|
5
5
|
begin
|
6
|
-
image =
|
6
|
+
image = model.new(image_id)
|
7
7
|
status = :ok
|
8
8
|
rescue ImageNotFoundError
|
9
9
|
if Riiif.not_found_image.present?
|
10
|
-
image =
|
10
|
+
image = model.new(image_id, Riiif::File.new(Riiif.not_found_image))
|
11
11
|
status = :not_found
|
12
12
|
else
|
13
13
|
raise
|
@@ -18,17 +18,20 @@ module Riiif
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def info
|
21
|
-
image =
|
21
|
+
image = model.new(image_id)
|
22
22
|
render json: image.info.merge(server_info)
|
23
23
|
end
|
24
24
|
|
25
|
-
def view
|
26
|
-
@image = Image.new(params[:id])
|
27
|
-
end
|
28
|
-
|
29
25
|
protected
|
30
26
|
|
31
27
|
LEVEL2 = 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2'
|
28
|
+
def model
|
29
|
+
params.fetch(:model, "riiif/image").camelize.constantize
|
30
|
+
end
|
31
|
+
|
32
|
+
def image_id
|
33
|
+
params[:id]
|
34
|
+
end
|
32
35
|
|
33
36
|
def link_header
|
34
37
|
response.headers["Link"] = "<#{LEVEL2}>;rel=\"profile\""
|
@@ -38,7 +41,7 @@ module Riiif
|
|
38
41
|
{
|
39
42
|
"@context" => "http://library.stanford.edu/iiif/image-api/1.1/context.json",
|
40
43
|
"@id" => request.original_url.sub('/info.json', ''),
|
41
|
-
"formats" =>
|
44
|
+
"formats" => model::OUTPUT_FORMATS,
|
42
45
|
"profile" => "#{LEVEL2}"
|
43
46
|
|
44
47
|
}
|
data/app/models/riiif/image.rb
CHANGED
data/config/routes.rb
CHANGED
@@ -1,11 +1,3 @@
|
|
1
1
|
Riiif::Engine.routes.draw do
|
2
|
-
|
3
|
-
SIZES ||= /(pct:)?[\w.,]+/
|
4
|
-
get "/:id/:region/:size/:rotation/:quality.:format" => "images#show",
|
5
|
-
constraints: { rotation: ALLOW_DOTS, size: SIZES },
|
6
|
-
defaults: { format: 'jpg', rotation: '0', region: 'full', quality: 'native' },
|
7
|
-
as: 'image'
|
8
|
-
|
9
|
-
get "/:id/info.json" => "images#info", defaults: { format: 'json' }, as: 'info'
|
10
|
-
get "/:id/view(.:format)" => "images#view"
|
2
|
+
iiif_for 'riiif/image'
|
11
3
|
end
|
data/lib/riiif/engine.rb
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
module Riiif
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
self.root = File.expand_path(File.join(File.dirname(__FILE__), '../..'))
|
6
|
-
self.base_path = File.join(root, 'spec/samples')
|
7
|
-
self.input_types = %W{png jpg tiff jp jp2}
|
2
|
+
class FileSystemFileResolver
|
3
|
+
attr_accessor :root, :base_path, :input_types
|
8
4
|
|
5
|
+
def initialize
|
6
|
+
@root = ::File.expand_path(::File.join(::File.dirname(__FILE__), '../..'))
|
7
|
+
@base_path = ::File.join(root, 'spec/samples')
|
8
|
+
@input_types = %W{png jpg tiff jp jp2}
|
9
|
+
end
|
9
10
|
|
10
|
-
def
|
11
|
+
def find(id)
|
11
12
|
Riiif::File.new(path(id))
|
12
13
|
end
|
13
14
|
|
14
|
-
def
|
15
|
+
def path(id)
|
15
16
|
search = pattern(id)
|
16
17
|
Dir.glob(search).first || raise(ImageNotFoundError, search)
|
17
18
|
end
|
18
19
|
|
19
20
|
|
20
|
-
def
|
21
|
+
def pattern(id)
|
21
22
|
raise ArgumentError, "Invalid characters in id `#{id}`" unless /^[\w\-:]+$/.match(id)
|
22
23
|
::File.join(base_path, "#{id}.{#{input_types.join(',')}}")
|
23
24
|
end
|
@@ -2,32 +2,46 @@ require 'open-uri'
|
|
2
2
|
require 'active_support/core_ext/file/atomic'
|
3
3
|
|
4
4
|
module Riiif
|
5
|
-
|
5
|
+
class HTTPFileResolver
|
6
6
|
|
7
7
|
# Set a lambda that maps the first parameter (id) to a URL
|
8
8
|
# Example:
|
9
9
|
#
|
10
|
-
# Riiif::HTTPFileResolver.
|
10
|
+
# resolver = Riiif::HTTPFileResolver.new
|
11
|
+
# resolver.id_to_uri = lambda do |id|
|
11
12
|
# "http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/#{id}.jpg/600px-#{id}.jpg"
|
12
13
|
# end
|
13
14
|
#
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
self.cache_path = 'tmp/network_files'
|
15
|
+
attr_accessor :id_to_uri
|
16
|
+
attr_accessor :basic_auth_credentials
|
17
|
+
attr_accessor :cache_path
|
18
18
|
|
19
|
+
def initialize
|
20
|
+
@cache_path = 'tmp/network_files'
|
21
|
+
end
|
19
22
|
|
20
|
-
def
|
21
|
-
remote = RemoteFile.new(uri(id)
|
23
|
+
def find(id)
|
24
|
+
remote = RemoteFile.new(uri(id),
|
25
|
+
cache_path: cache_path,
|
26
|
+
basic_auth_credentials: basic_auth_credentials)
|
22
27
|
Riiif::File.new(remote.fetch)
|
23
28
|
end
|
24
29
|
|
25
30
|
class RemoteFile
|
26
31
|
include ActiveSupport::Benchmarkable
|
27
32
|
delegate :logger, to: :Rails
|
28
|
-
attr_reader :url
|
29
|
-
def initialize(url)
|
30
|
-
@url = url
|
33
|
+
attr_reader :url, :cache_path
|
34
|
+
def initialize(url, options = {})
|
35
|
+
@url = url
|
36
|
+
@options = options
|
37
|
+
end
|
38
|
+
|
39
|
+
def cache_path
|
40
|
+
@options.fetch(:cache_path)
|
41
|
+
end
|
42
|
+
|
43
|
+
def basic_auth_credentials
|
44
|
+
@options[:basic_auth_credentials]
|
31
45
|
end
|
32
46
|
|
33
47
|
def fetch
|
@@ -42,15 +56,15 @@ module Riiif
|
|
42
56
|
end
|
43
57
|
|
44
58
|
def file_name
|
45
|
-
@cache_file_name ||= ::File.join(
|
59
|
+
@cache_file_name ||= ::File.join(cache_path, Digest::MD5.hexdigest(url)+"#{ext}")
|
46
60
|
end
|
47
61
|
|
48
62
|
def download_file
|
49
63
|
ensure_cache_path(::File.dirname(file_name))
|
50
64
|
benchmark ("Riiif downloaded #{url}") do
|
51
|
-
::File.atomic_write(file_name,
|
65
|
+
::File.atomic_write(file_name, cache_path) do |local|
|
52
66
|
begin
|
53
|
-
Kernel::open(url) do |remote|
|
67
|
+
Kernel::open(url, download_opts) do |remote|
|
54
68
|
while chunk = remote.read(8192)
|
55
69
|
local.write(chunk)
|
56
70
|
end
|
@@ -62,6 +76,12 @@ module Riiif
|
|
62
76
|
end
|
63
77
|
end
|
64
78
|
|
79
|
+
# Get a hash of options for passing to Kernel::open
|
80
|
+
# This is the primary pathway for passing basic auth credentials
|
81
|
+
def download_opts
|
82
|
+
basic_auth_credentials ? { http_basic_authentication: basic_auth_credentials } : {}
|
83
|
+
end
|
84
|
+
|
65
85
|
# Make sure a file path's directories exist.
|
66
86
|
def ensure_cache_path(path)
|
67
87
|
FileUtils.makedirs(path) unless ::File.exist?(path)
|
@@ -71,7 +91,7 @@ module Riiif
|
|
71
91
|
|
72
92
|
protected
|
73
93
|
|
74
|
-
def
|
94
|
+
def uri(id)
|
75
95
|
raise "Must set the id_to_uri lambda" if id_to_uri.nil?
|
76
96
|
id_to_uri.call(id)
|
77
97
|
end
|
data/lib/riiif/routes.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Riiif
|
2
|
+
class Routes
|
3
|
+
ALLOW_DOTS ||= /[\w.]+/
|
4
|
+
SIZES ||= /(pct:)?[\w.,]+/
|
5
|
+
|
6
|
+
def initialize(router, options)
|
7
|
+
@router = router
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_routes &blk
|
12
|
+
@router.instance_exec(@options, &blk)
|
13
|
+
end
|
14
|
+
|
15
|
+
def draw
|
16
|
+
add_routes do |options|
|
17
|
+
resource = options.fetch(:resource)
|
18
|
+
route_prefix = options[:at]
|
19
|
+
route_prefix ||= "/#{options[:as]}" if options[:as]
|
20
|
+
get "#{route_prefix}/:id/:region/:size/:rotation/:quality.:format" => "riiif/images#show",
|
21
|
+
constraints: { rotation: ALLOW_DOTS, size: SIZES },
|
22
|
+
defaults: { format: 'jpg', rotation: '0', region: 'full', quality: 'native', model: resource },
|
23
|
+
as: options[:as] || "image"
|
24
|
+
|
25
|
+
get "#{route_prefix}/:id/info.json" => "riiif/images#info", defaults: { format: 'json', model: resource }, as: [options[:as], "info"].compact.join("_")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/riiif/version.rb
CHANGED
data/lib/riiif.rb
CHANGED
@@ -25,7 +25,7 @@ describe Riiif::ImagesController do
|
|
25
25
|
expect(response).to be_successful
|
26
26
|
json = JSON.parse(response.body)
|
27
27
|
expect(json).to eq "@context"=>"http://library.stanford.edu/iiif/image-api/1.1/context.json",
|
28
|
-
"@id" =>"http://test.host/
|
28
|
+
"@id" =>"http://test.host/abcd1234",
|
29
29
|
"width" =>6000,
|
30
30
|
"height" =>4000,
|
31
31
|
"formats" => [ "jpg", "png" ],
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Riiif::FileSystemFileResolver do
|
4
|
-
subject { Riiif::FileSystemFileResolver }
|
4
|
+
subject { Riiif::FileSystemFileResolver.new }
|
5
5
|
it "should raise an error when the file isn't found" do
|
6
6
|
expect{subject.find('1234')}.to raise_error Riiif::ImageNotFoundError
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should get the jpeg2000 file" do
|
10
|
-
expect(subject.find('world').path).to eq
|
10
|
+
expect(subject.find('world').path).to eq subject.root + '/spec/samples/world.jp2'
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should accept ids with dashes" do
|
@@ -1,15 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Riiif::HTTPFileResolver do
|
4
|
-
subject { Riiif::HTTPFileResolver }
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
subject { Riiif::HTTPFileResolver.new }
|
5
|
+
|
6
|
+
before do
|
7
|
+
Dir.glob("tmp/network_files/*") do |f|
|
8
|
+
File.unlink(f)
|
9
|
+
end
|
10
|
+
subject.id_to_uri = lambda {|id| id}
|
10
11
|
end
|
11
12
|
|
12
|
-
it "
|
13
|
+
it "raises an error when the file isn't found" do
|
13
14
|
expect(Kernel).to receive(:open).and_raise(OpenURI::HTTPError.new("failure", StringIO.new))
|
14
15
|
begin
|
15
16
|
subject.find('1234')
|
@@ -18,5 +19,16 @@ describe Riiif::HTTPFileResolver do
|
|
18
19
|
expect(e).to be_a Riiif::ImageNotFoundError
|
19
20
|
expect(e.original_exception).to be_an OpenURI::HTTPError
|
20
21
|
end
|
21
|
-
end
|
22
22
|
|
23
|
+
context "when basic authentication credentials are set" do
|
24
|
+
let(:credentials) { ['username', 's0s3kr3t'] }
|
25
|
+
before do
|
26
|
+
subject.basic_auth_credentials = credentials
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should use basic auth credentials" do
|
30
|
+
expect(Kernel).to receive(:open).with("1234", { http_basic_authentication: credentials })
|
31
|
+
subject.find('1234')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/models/image_spec.rb
CHANGED
@@ -33,13 +33,13 @@ describe Riiif::Image do
|
|
33
33
|
|
34
34
|
context "using HTTPFileResolver" do
|
35
35
|
before do
|
36
|
-
Riiif::Image.file_resolver = Riiif::HTTPFileResolver
|
37
|
-
Riiif::
|
36
|
+
Riiif::Image.file_resolver = Riiif::HTTPFileResolver.new
|
37
|
+
Riiif::Image.file_resolver.id_to_uri = lambda do |id|
|
38
38
|
"http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/#{id}.jpg/600px-#{id}.jpg"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
after do
|
42
|
-
Riiif::Image.file_resolver = Riiif::FileSystemFileResolver
|
42
|
+
Riiif::Image.file_resolver = Riiif::FileSystemFileResolver.new
|
43
43
|
end
|
44
44
|
|
45
45
|
describe "get info" do
|
@@ -9,7 +9,7 @@ describe "routes" do
|
|
9
9
|
get: "/abcd1234/full/full/0/native.jpg"
|
10
10
|
).to route_to(controller: "riiif/images", id: 'abcd1234', action: "show",
|
11
11
|
region: 'full', size: 'full', rotation: '0',
|
12
|
-
quality: 'native', format: 'jpg')
|
12
|
+
quality: 'native', format: 'jpg', model: "riiif/image")
|
13
13
|
end
|
14
14
|
|
15
15
|
it "routes requests with floating point percent size" do
|
@@ -17,30 +17,30 @@ describe "routes" do
|
|
17
17
|
get: "/abcd1234/full/pct:12.5/22.5/native.jpg"
|
18
18
|
).to route_to(controller: "riiif/images", id: 'abcd1234', action: "show",
|
19
19
|
region: 'full', size: 'pct:12.5', rotation: '22.5',
|
20
|
-
quality: 'native', format: 'jpg')
|
20
|
+
quality: 'native', format: 'jpg', model: "riiif/image")
|
21
21
|
end
|
22
22
|
it "routes requests with pixel size" do
|
23
23
|
expect(
|
24
24
|
get: "/abcd1234/full/100,50/22.5/native.jpg"
|
25
25
|
).to route_to(controller: "riiif/images", id: 'abcd1234', action: "show",
|
26
26
|
region: 'full', size: '100,50', rotation: '22.5',
|
27
|
-
quality: 'native', format: 'jpg')
|
27
|
+
quality: 'native', format: 'jpg', model: "riiif/image")
|
28
28
|
end
|
29
29
|
it "routes requests with dashes in the id" do
|
30
30
|
expect(
|
31
31
|
get: "/abcd-1234-5678/full/full/0/native.jpg"
|
32
32
|
).to route_to(controller: "riiif/images", id: 'abcd-1234-5678', action: "show",
|
33
33
|
region: 'full', size: 'full', rotation: '0',
|
34
|
-
quality: 'native', format: 'jpg')
|
34
|
+
quality: 'native', format: 'jpg', model: "riiif/image")
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "route helper" do
|
38
38
|
it "takes all the options" do
|
39
39
|
expect(image_path('abcd1234', region: 'full', size: '100,50', rotation: '22.5', quality: 'native',
|
40
|
-
format: 'jpg')).to eq '/
|
40
|
+
format: 'jpg')).to eq '/abcd1234/full/100,50/22.5/native.jpg'
|
41
41
|
end
|
42
42
|
it "has defaults" do
|
43
|
-
expect(image_path('abcd1234', size: '100,50')).to eq '/
|
43
|
+
expect(image_path('abcd1234', size: '100,50')).to eq '/abcd1234/full/100,50/0/native.jpg'
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -50,10 +50,10 @@ describe "routes" do
|
|
50
50
|
expect(
|
51
51
|
get: "/abcd1234/info.json"
|
52
52
|
).to route_to(controller: "riiif/images", id: 'abcd1234',
|
53
|
-
action: "info", format: 'json')
|
53
|
+
action: "info", format: 'json', model: "riiif/image")
|
54
54
|
end
|
55
55
|
it "should have a route helper" do
|
56
|
-
expect(info_path('abcd1234')).to eq '/
|
56
|
+
expect(info_path('abcd1234')).to eq '/abcd1234/info.json'
|
57
57
|
end
|
58
58
|
end
|
59
59
|
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: 0.0
|
4
|
+
version: 0.1.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: 2015-
|
11
|
+
date: 2015-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -103,6 +103,7 @@ extra_rdoc_files: []
|
|
103
103
|
files:
|
104
104
|
- ".gitignore"
|
105
105
|
- ".rspec"
|
106
|
+
- ".travis.yml"
|
106
107
|
- Gemfile
|
107
108
|
- LICENSE
|
108
109
|
- README.md
|
@@ -115,6 +116,8 @@ files:
|
|
115
116
|
- lib/riiif/engine.rb
|
116
117
|
- lib/riiif/file_system_file_resolver.rb
|
117
118
|
- lib/riiif/http_file_resolver.rb
|
119
|
+
- lib/riiif/rails/routes.rb
|
120
|
+
- lib/riiif/routes.rb
|
118
121
|
- lib/riiif/version.rb
|
119
122
|
- riiif.gemspec
|
120
123
|
- spec/controllers/images_controller_spec.rb
|
@@ -145,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
148
|
version: '0'
|
146
149
|
requirements: []
|
147
150
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.4.5
|
149
152
|
signing_key:
|
150
153
|
specification_version: 4
|
151
154
|
summary: A rails engine that support IIIF requests
|