riiif 2.0.0.beta1 → 2.0.0.beta2

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
  SHA1:
3
- metadata.gz: cd3265a72519ab497b58fcd9314509a8bac800c4
4
- data.tar.gz: 51c4d65cd6e0488a5ae225cb7c3d9917fd427033
3
+ metadata.gz: e944a8c92ae1774d9dd42515c3202a18b6a70f64
4
+ data.tar.gz: a4fa5460db8fc3703f21d3c8a07a62b920e4aa5e
5
5
  SHA512:
6
- metadata.gz: 28447a5eadf4b943759bc3cf3df145aacff7a122528438b2f542779ad8ac06ab6ab1da4567d2cebaeea6d8148b92a3c895b2d077c2c5bee1eaee1a966df2eb8e
7
- data.tar.gz: c0b443453bdfe6935f146fd7afa7b2377c239a189888660756406245746aba906a85bdb0c17e22c7d608b4e4fcc3e96901a05e9b8e54c543c1712fcd7bf8e224
6
+ metadata.gz: 33d4db4a5c49e09845ecdac04bdd35d88fa3ab1526eab8fbdd55bfbde786aee6adc1843e90e4f2bf0389c83570c005cb143e1dc831c18ec664fde6919a7feb6e
7
+ data.tar.gz: '05628c076ffc69365d0821f368118d0e078d7bbae5c946f4f59fafc485d8948d56b954338f0dfbdb4b8628212d48954b1a972fc937e4099985b97f67ca12ba9b'
@@ -25,7 +25,7 @@ module Riiif
25
25
  # @return the path of the file
26
26
  def path(id)
27
27
  search = pattern(id)
28
- Dir.glob(search).first || raise(ImageNotFoundError, search)
28
+ search && Dir.glob(search).first || raise(ImageNotFoundError, search)
29
29
  end
30
30
 
31
31
  def pattern(_id)
@@ -2,13 +2,28 @@ module Riiif
2
2
  class FileSystemFileResolver < AbstractFileSystemResolver
3
3
  attr_writer :input_types
4
4
 
5
+ # @return a string suitable for a globbing match
6
+ # e.g. /base/path/67352ccc-d1b0-11e1-89ae-279075081939.{jp2,tiff,png}
7
+ # or nil when the id is not valid
5
8
  def pattern(id)
6
- raise ArgumentError, "Invalid characters in id `#{id}`" unless id =~ /^[\w\-:]+$/
9
+ return unless validate_identifier(id: id)
7
10
  ::File.join(base_path, "#{id}.{#{input_types.join(',')}}")
8
11
  end
9
12
 
10
13
  private
11
14
 
15
+ # @return [Boolean] true if the id matches the regex
16
+ def validate_identifier(id:, regex: identifier_regex)
17
+ return true if id =~ regex
18
+ Rails.logger.warn "Invalid characters in id `#{id}`"
19
+ false
20
+ end
21
+
22
+ # Matches on word characters dashes and colons
23
+ def identifier_regex
24
+ /^[\w\-:]+$/
25
+ end
26
+
12
27
  def input_types
13
28
  @input_types ||= %w(png jpg tif tiff jp2)
14
29
  end
@@ -1,3 +1,3 @@
1
1
  module Riiif
2
- VERSION = '2.0.0.beta1'.freeze
2
+ VERSION = '2.0.0.beta2'.freeze
3
3
  end
@@ -21,6 +21,14 @@ describe Riiif::FileSystemFileResolver do
21
21
  expect(subject.path).to eq base_path + '/world.jp2'
22
22
  end
23
23
  end
24
+
25
+ context 'when pattern is not permitted' do
26
+ let(:id) { 'foo/bar' } # slashes are not permitted by default
27
+
28
+ it 'casts the error to a not found (required by the IIIF spec)' do
29
+ expect { subject.path }.to raise_error Riiif::ImageNotFoundError
30
+ end
31
+ end
24
32
  end
25
33
 
26
34
  describe '#input_types' do
@@ -63,5 +71,12 @@ describe Riiif::FileSystemFileResolver do
63
71
  expect { subject }.not_to raise_error
64
72
  end
65
73
  end
74
+
75
+ context 'with slashes (unallowed by default)' do
76
+ let(:id) { 'fo/baz' }
77
+ it 'returns nil' do
78
+ expect(subject).to be_nil
79
+ end
80
+ end
66
81
  end
67
82
  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: 2.0.0.beta1
4
+ version: 2.0.0.beta2
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-09-08 00:00:00.000000000 Z
11
+ date: 2017-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties