riiif 0.4.1 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30f471dbabbb6d626cbc8477de2490b0ed732b8e
4
- data.tar.gz: de3732ff0b0d71d96474e650fc1e72df8564e772
3
+ metadata.gz: 5cbaa7e8d7dc7e47f05b3ed955c3710c8775faac
4
+ data.tar.gz: 7a3564aee52673c50d30999b07aedf6543eaa854
5
5
  SHA512:
6
- metadata.gz: b704b4e3a0c8fbda79a78b040f1d6dec12db688932ccdbfdaa8ce7b74419aa1a152930d6e2e7eeec2dfbaa51d52b77853651381a4709cb4f50164428f60f5092
7
- data.tar.gz: 711c3a7639ac468462b88fbabe5840f0a6fe6c2bedd51a300bbd19404ff8dffca8a29d585a365a59cbe41db9fd4c453b4a91e84cf531a74172acab6fa11238c2
6
+ metadata.gz: ab9dbd8ff0384e995595dca5bba8a8feb17a71535664cc79b5dba36fd2b55940ffe1ff80f2cbe68080c8177d2c54d9aea8480a51f0dff623647ad5885c681a1e
7
+ data.tar.gz: ae18e3a8d769bb6f1f130b87b9ed9bc78af32887839d3e54cb60e770e8cd8e884b89f4ec629f9e725ab40dc5421cee31cc750f08a356ea7b02043428110f2d29
data/.rubocop_todo.yml CHANGED
@@ -1,7 +1,6 @@
1
- require: rubocop-rspec
2
1
  # This configuration was generated by
3
2
  # `rubocop --auto-gen-config`
4
- # on 2016-07-11 08:45:16 -0500 using RuboCop version 0.41.2.
3
+ # on 2017-01-24 17:33:24 -0500 using RuboCop version 0.47.0.
5
4
  # The point is for the user to remove these configuration records
6
5
  # one by one as the offenses are removed from the code base.
7
6
  # Note that changes in the inspected code, or installation of new
@@ -25,16 +24,26 @@ Lint/UselessAssignment:
25
24
  Exclude:
26
25
  - 'app/models/riiif/file.rb'
27
26
 
28
- # Offense count: 5
27
+ # Offense count: 4
29
28
  Metrics/AbcSize:
30
- Max: 28
29
+ Max: 38
30
+
31
+ # Offense count: 12
32
+ # Configuration parameters: CountComments, ExcludedMethods.
33
+ Metrics/BlockLength:
34
+ Max: 143
31
35
 
32
36
  # Offense count: 1
37
+ # Configuration parameters: CountComments.
38
+ Metrics/ClassLength:
39
+ Max: 103
40
+
41
+ # Offense count: 2
33
42
  Metrics/CyclomaticComplexity:
34
43
  Max: 8
35
44
 
36
- # Offense count: 65
37
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
45
+ # Offense count: 68
46
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
38
47
  # URISchemes: http, https
39
48
  Metrics/LineLength:
40
49
  Max: 160
@@ -42,9 +51,9 @@ Metrics/LineLength:
42
51
  # Offense count: 7
43
52
  # Configuration parameters: CountComments.
44
53
  Metrics/MethodLength:
45
- Max: 17
54
+ Max: 21
46
55
 
47
- # Offense count: 1
56
+ # Offense count: 2
48
57
  Metrics/PerceivedComplexity:
49
58
  Max: 9
50
59
 
@@ -54,26 +63,11 @@ Performance/RedundantMatch:
54
63
  Exclude:
55
64
  - 'lib/riiif/file_system_file_resolver.rb'
56
65
 
57
- # Offense count: 1
58
- RSpec/DescribeClass:
59
- Exclude:
60
- - 'spec/routing/resize_routes_spec.rb'
61
-
62
- # Offense count: 6
63
- # Configuration parameters: Max.
64
- RSpec/ExampleLength:
65
- Exclude:
66
- - 'spec/controllers/riiif/images_controller_spec.rb'
67
- - 'spec/models/riiif/http_file_resolver_spec.rb'
68
-
69
- # Offense count: 4
70
- RSpec/VerifiedDoubles:
71
- Exclude:
72
- - 'spec/controllers/riiif/images_controller_spec.rb'
73
-
74
66
  # Offense count: 3
75
67
  # Cop supports --auto-correct.
76
- # Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle, SupportedLastArgumentHashStyles.
68
+ # Configuration parameters: EnforcedHashRocketStyle, SupportedHashRocketStyles, EnforcedColonStyle, SupportedColonStyles, EnforcedLastArgumentHashStyle, SupportedLastArgumentHashStyles.
69
+ # SupportedHashRocketStyles: key, separator, table
70
+ # SupportedColonStyles: key, separator, table
77
71
  # SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
78
72
  Style/AlignHash:
79
73
  Exclude:
@@ -100,7 +94,7 @@ Style/ColonMethodCall:
100
94
  Exclude:
101
95
  - 'lib/riiif/http_file_resolver.rb'
102
96
 
103
- # Offense count: 13
97
+ # Offense count: 14
104
98
  Style/Documentation:
105
99
  Exclude:
106
100
  - 'spec/**/*'
@@ -109,6 +103,7 @@ Style/Documentation:
109
103
  - 'app/models/riiif/file.rb'
110
104
  - 'app/models/riiif/image.rb'
111
105
  - 'lib/riiif.rb'
106
+ - 'lib/riiif/abstract_file_system_resolver.rb'
112
107
  - 'lib/riiif/akubra_system_file_resolver.rb'
113
108
  - 'lib/riiif/engine.rb'
114
109
  - 'lib/riiif/file_system_file_resolver.rb'
@@ -117,26 +112,24 @@ Style/Documentation:
117
112
  - 'lib/riiif/rails/routes.rb'
118
113
  - 'lib/riiif/routes.rb'
119
114
 
120
- # Offense count: 3
115
+ # Offense count: 2
121
116
  # Cop supports --auto-correct.
122
117
  Style/EmptyLines:
123
118
  Exclude:
124
119
  - 'app/models/riiif/image.rb'
125
- - 'lib/riiif/file_system_file_resolver.rb'
126
120
  - 'lib/riiif/http_file_resolver.rb'
127
121
 
128
- # Offense count: 6
122
+ # Offense count: 5
129
123
  # Cop supports --auto-correct.
130
124
  # Configuration parameters: EnforcedStyle, SupportedStyles.
131
- # SupportedStyles: empty_lines, no_empty_lines
125
+ # SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines
132
126
  Style/EmptyLinesAroundClassBody:
133
127
  Exclude:
134
128
  - 'app/models/riiif/file.rb'
135
129
  - 'app/models/riiif/image.rb'
136
- - 'lib/riiif/file_system_file_resolver.rb'
137
130
  - 'lib/riiif/http_file_resolver.rb'
138
131
 
139
- # Offense count: 3
132
+ # Offense count: 5
140
133
  # Cop supports --auto-correct.
141
134
  Style/EmptyLinesAroundMethodBody:
142
135
  Exclude:
@@ -150,4 +143,3 @@ Style/EmptyLinesAroundMethodBody:
150
143
  Style/ExtraSpacing:
151
144
  Exclude:
152
145
  - 'lib/riiif/routes.rb'
153
-
data/.travis.yml CHANGED
@@ -1,8 +1,11 @@
1
1
  notifications:
2
2
  email: false
3
3
 
4
+ before_install:
5
+ - gem update --system
6
+
4
7
  rvm:
5
- - 2.2
8
+ - 2.4.0
6
9
 
7
10
  sudo: false
8
11
  language: ruby
data/README.md CHANGED
@@ -7,13 +7,13 @@ A Ruby IIIF image server as a rails engine
7
7
 
8
8
  RIIIF depends on Imagemagick so you must install that first. On a mac using Homebrew you can follow these instructions:
9
9
 
10
- ImageMagick (6.8.8) may be installed with a few options:
10
+ ImageMagick (7.0.4) may be installed with a few options:
11
11
  * `--with-ghostscript` Compile with Ghostscript for Postscript/PDF support
12
12
  * `--with-tiff` Compile with libtiff support for TIFF files
13
- * `--with-jp2` Compile with openjpeg2 support for jpeg2000
13
+ * `--with-openjpeg` Compile with openjpeg2 support for jpeg2000
14
14
 
15
15
  ```bash
16
- brew install imagemagick --with-ghostscript --with-tiff --with-jp2
16
+ brew install imagemagick --with-ghostscript --with-tiff --with-openjpeg
17
17
  ```
18
18
 
19
19
  ## Install the gem
@@ -1,9 +1,9 @@
1
1
  module Riiif
2
2
  class ImagesController < ::ApplicationController
3
- before_filter :link_header, only: [:show, :info]
3
+ before_action :link_header, only: [:show, :info]
4
4
 
5
5
  rescue_from Riiif::InvalidAttributeError do
6
- render nothing: true, status: 400
6
+ head 400
7
7
  end
8
8
 
9
9
  def show
@@ -20,7 +20,7 @@ module Riiif
20
20
 
21
21
  image = not_found_image unless status == :ok
22
22
 
23
- data = image.render(params.permit(:region, :size, :rotation, :quality, :format))
23
+ data = image.render(image_request_params)
24
24
  headers['Access-Control-Allow-Origin'] = '*'
25
25
  send_data data,
26
26
  status: status,
@@ -56,6 +56,12 @@ module Riiif
56
56
  params[:id]
57
57
  end
58
58
 
59
+ ##
60
+ # @return [ActiveSupport::HashWithIndifferentAccess]
61
+ def image_request_params
62
+ params.permit(:region, :size, :rotation, :quality, :format).to_h
63
+ end
64
+
59
65
  def authorization_service
60
66
  model.authorization_service.new(self)
61
67
  end
@@ -32,6 +32,8 @@ module Riiif
32
32
  @image ||= file_resolver.find(id)
33
33
  end
34
34
 
35
+ ##
36
+ # @param [ActiveSupport::HashWithIndifferentAccess] args
35
37
  def render(args)
36
38
  options = decode_options!(args)
37
39
  Rails.cache.fetch(Image.cache_key(id, options), compress: true, expires_in: Image.expires_in) do
@@ -58,8 +60,9 @@ module Riiif
58
60
 
59
61
  private
60
62
 
61
- def decode_options!(args)
62
- options = args.with_indifferent_access
63
+ ##
64
+ # @param [ActiveSupport::HashWithIndifferentAccess] options
65
+ def decode_options!(options)
63
66
  raise ArgumentError, 'You must provide a format' unless options[:format]
64
67
  options[:crop] = decode_region(options.delete(:region))
65
68
  options[:size] = decode_size(options.delete(:size))
@@ -18,9 +18,8 @@ module Riiif
18
18
  Dir.glob(search).first || raise(ImageNotFoundError, search)
19
19
  end
20
20
 
21
- def pattern(id)
21
+ def pattern(_id)
22
22
  raise NotImplementedError, "Implement `pattern(id)' in the concrete class"
23
23
  end
24
24
  end
25
25
  end
26
-
@@ -3,7 +3,7 @@ module Riiif
3
3
  attr_writer :input_types
4
4
 
5
5
  def pattern(id)
6
- raise ArgumentError, "Invalid characters in id `#{id}`" unless %r{^[\w\-:]+$}.match(id)
6
+ raise ArgumentError, "Invalid characters in id `#{id}`" unless /^[\w\-:]+$/.match(id)
7
7
  ::File.join(base_path, "#{id}.{#{input_types.join(',')}}")
8
8
  end
9
9
 
@@ -1,7 +1,6 @@
1
1
  module Riiif
2
2
  class NilAuthorizationService
3
- def initialize(_controller)
4
- end
3
+ def initialize(_controller); end
5
4
 
6
5
  def can?(_action, _object)
7
6
  true
data/lib/riiif/routes.rb CHANGED
@@ -26,7 +26,7 @@ module Riiif
26
26
 
27
27
  # This doesn't work presently
28
28
  # get "#{route_prefix}/:id", to: redirect("#{route_prefix}/%{id}/info.json")
29
- get "#{route_prefix}/:id" => 'riiif/images#redirect'
29
+ get "#{route_prefix}/:id" => 'riiif/images#redirect', as: [options[:as], 'base'].compact.join('_')
30
30
  end
31
31
  end
32
32
  end
data/lib/riiif/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Riiif
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
data/riiif.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'rails', '> 3.2.0'
21
+ spec.add_dependency 'railties', '>= 4.2', '<6'
22
22
  spec.add_development_dependency 'bundler', '~> 1.3'
23
23
  spec.add_development_dependency 'rake'
24
24
  spec.add_development_dependency 'engine_cart', '~> 0.8'
@@ -12,8 +12,8 @@ describe Riiif::ImagesController do
12
12
  expect(image).to receive(:render).with('region' => 'full', 'size' => 'full',
13
13
  'rotation' => '0', 'quality' => 'default',
14
14
  'format' => 'jpg').and_return('IMAGEDATA')
15
- get :show, id: 'abcd1234', action: 'show', region: 'full', size: 'full',
16
- rotation: '0', quality: 'default', format: 'jpg'
15
+ get :show, params: { id: 'abcd1234', action: 'show', region: 'full', size: 'full',
16
+ rotation: '0', quality: 'default', format: 'jpg' }
17
17
  expect(response).to be_successful
18
18
  expect(response.body).to eq 'IMAGEDATA'
19
19
  expect(response.headers['Link']).to eq '<http://iiif.io/api/image/2/level1.json>;rel="profile"'
@@ -28,8 +28,8 @@ describe Riiif::ImagesController do
28
28
  allow(controller).to receive(:not_found_image).and_return(not_found_image)
29
29
  end
30
30
  it 'renders 401' do
31
- get :show, id: 'abcd1234', action: 'show', region: 'full', size: 'full',
32
- rotation: '0', quality: 'default', format: 'jpg'
31
+ get :show, params: { id: 'abcd1234', action: 'show', region: 'full', size: 'full',
32
+ rotation: '0', quality: 'default', format: 'jpg' }
33
33
  expect(response.body).to eq 'test data'
34
34
  expect(response.code).to eq '401'
35
35
  end
@@ -40,8 +40,8 @@ describe Riiif::ImagesController do
40
40
  image = double('an image')
41
41
  allow(image).to receive(:render).and_raise Riiif::InvalidAttributeError
42
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'
43
+ get :show, params: { id: 'abcd1234', action: 'show', region: '`szoW0', size: 'full',
44
+ rotation: '0', quality: 'default', format: 'jpg' }
45
45
  expect(response.code).to eq '400'
46
46
  end
47
47
  end
@@ -50,8 +50,8 @@ describe Riiif::ImagesController do
50
50
  it "errors when a default image isn't sent" do
51
51
  expect(Riiif::Image).to receive(:new).with('bad_id').and_raise(OpenURI::HTTPError.new('fail', StringIO.new))
52
52
  expect do
53
- get :show, id: 'bad_id', action: 'show', region: 'full', size: 'full',
54
- rotation: '0', quality: 'default', format: 'jpg'
53
+ get :show, params: { id: 'bad_id', action: 'show', region: 'full', size: 'full',
54
+ rotation: '0', quality: 'default', format: 'jpg' }
55
55
  end.to raise_error(StandardError)
56
56
  end
57
57
 
@@ -73,8 +73,8 @@ describe Riiif::ImagesController do
73
73
  'rotation' => '0', 'quality' => 'default',
74
74
  'format' => 'jpg').and_return('default-image-data')
75
75
 
76
- get :show, id: 'bad_id', action: 'show', region: 'full', size: 'full',
77
- rotation: '0', quality: 'default', format: 'jpg'
76
+ get :show, params: { id: 'bad_id', action: 'show', region: 'full', size: 'full',
77
+ rotation: '0', quality: 'default', format: 'jpg' }
78
78
  expect(response).to be_not_found
79
79
  expect(response.body).to eq 'default-image-data'
80
80
  end
@@ -89,8 +89,8 @@ describe Riiif::ImagesController do
89
89
  'rotation' => '0', 'quality' => 'default',
90
90
  'format' => 'jpg').and_return('default-image-data')
91
91
 
92
- get :show, id: 'bad_id', action: 'show', region: 'full', size: 'full',
93
- rotation: '0', quality: 'default', format: 'jpg'
92
+ get :show, params: { id: 'bad_id', action: 'show', region: 'full', size: 'full',
93
+ rotation: '0', quality: 'default', format: 'jpg' }
94
94
  expect(response).to be_not_found
95
95
  expect(response.body).to eq 'default-image-data'
96
96
  end
@@ -103,11 +103,11 @@ describe Riiif::ImagesController do
103
103
  image = double
104
104
  expect(Riiif::Image).to receive(:new).with('abcd1234').and_return(image)
105
105
  expect(image).to receive(:info).and_return(width: 6000, height: 4000)
106
- get :info, id: 'abcd1234', format: 'json'
106
+ get :info, params: { id: 'abcd1234', format: 'json' }
107
107
  expect(response).to be_successful
108
108
  json = JSON.parse(response.body)
109
109
  expect(json).to eq '@context' => 'http://iiif.io/api/image/2/context.json',
110
- '@id' => 'http://test.host/images/abcd1234',
110
+ '@id' => 'http://test.host/abcd1234',
111
111
  'width' => 6000,
112
112
  'height' => 4000,
113
113
  'profile' => ['http://iiif.io/api/image/2/level1.json', 'formats' => %w(jpg png)],
@@ -123,7 +123,7 @@ describe Riiif::ImagesController do
123
123
  allow(controller).to receive(:authorization_service).and_return(auth)
124
124
  end
125
125
  it 'renders 401' do
126
- get :info, id: 'abcd1234', format: 'json'
126
+ get :info, params: { id: 'abcd1234', format: 'json' }
127
127
  expect(response.body).to eq '{"error":"unauthorized"}'
128
128
  expect(response.code).to eq '401'
129
129
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riiif
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 1.0.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-07-29 00:00:00.000000000 Z
11
+ date: 2017-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 3.2.0
22
+ version: '6'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ">"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '4.2'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: 3.2.0
32
+ version: '6'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: bundler
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -184,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
190
  version: '0'
185
191
  requirements: []
186
192
  rubyforge_project:
187
- rubygems_version: 2.5.1
193
+ rubygems_version: 2.5.2
188
194
  signing_key:
189
195
  specification_version: 4
190
196
  summary: A rails engine that support IIIF requests