riiif 1.2.0 → 1.3.0

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: 8772e4a904c4e4a561352a0e1a449da790347522
4
- data.tar.gz: adffd5861fe1daa395c5d012936208a623b2829c
3
+ metadata.gz: 6b8dc5c1ffd5532b680b26ff6958a02261700d3e
4
+ data.tar.gz: 7719e41b21ee91d52eefe4cd5347fb87db25b47c
5
5
  SHA512:
6
- metadata.gz: d0498ffb73c9552a33819a7131ddfe0089525f95b273cd4eba70d8412ce1eb6598b4b8c9aee011b8cb43bb001f47ffeafc24b6a2ce3ae9a02e0a6190c338d0ff
7
- data.tar.gz: 20150a2e02553cbff87f5cacc20868245ff12418763f9c046625ec45df6bf0503e119447e7ad493903bf673b88c0939adf19710463a0ee6471a72b6618beacf4
6
+ metadata.gz: 453bd022c4fb48291f987625db7c22d6709a7997bb26d9123da975b6ab7537776d847a7d618369788e3e756e08770a99aa29496126540a75a9ed1516b0666814
7
+ data.tar.gz: 1b96e14965119ee2454f3a44a144b572643af01a00616eff0e5b76fd1a604b1b58ed6f2185d02c33ba811cd8975baa9c8f68ab9c09c2a4139fe4d8e520810342
@@ -23,7 +23,7 @@ module Riiif
23
23
  data = image.render(image_request_params)
24
24
  headers['Access-Control-Allow-Origin'] = '*'
25
25
  # Set a Cache-Control header
26
- expires_in cache_expires, public: false if status == :ok
26
+ expires_in cache_expires, public: public_cache? if status == :ok
27
27
  send_data data,
28
28
  status: status,
29
29
  type: Mime::Type.lookup_by_extension(params[:format]),
@@ -35,7 +35,7 @@ module Riiif
35
35
  if authorization_service.can?(:info, image)
36
36
  headers['Access-Control-Allow-Origin'] = '*'
37
37
  # Set a Cache-Control header
38
- expires_in cache_expires, public: false
38
+ expires_in cache_expires, public: public_cache?
39
39
  render json: image.info.to_h.merge(server_info), content_type: 'application/ld+json'
40
40
  else
41
41
  render json: { error: 'unauthorized' }, status: :unauthorized
@@ -33,21 +33,7 @@ module Riiif
33
33
 
34
34
  # @param [Transformation] transformation
35
35
  def extract(transformation)
36
- command = 'convert'
37
- command << " -crop #{transformation.crop}" if transformation.crop
38
- command << " -resize #{transformation.size}" if transformation.size
39
- if transformation.rotation
40
- command << " -virtual-pixel white +distort srt #{transformation.rotation}"
41
- end
42
-
43
- case transformation.quality
44
- when 'grey'
45
- command << ' -colorspace Gray'
46
- when 'bitonal'
47
- command << ' -colorspace Gray'
48
- command << ' -type Bilevel'
49
- end
50
- command << " #{path} #{transformation.format}:-"
36
+ command = command_factory.build(path, transformation)
51
37
  execute(command)
52
38
  end
53
39
 
@@ -57,5 +43,11 @@ module Riiif
57
43
 
58
44
  delegate :execute, to: Riiif::CommandRunner
59
45
  private :execute
46
+
47
+ private
48
+
49
+ def command_factory
50
+ ImagemagickCommandFactory
51
+ end
60
52
  end
61
53
  end
@@ -0,0 +1,52 @@
1
+ module Riiif
2
+ # Builds a command to run a transformation using Imagemagick
3
+ class ImagemagickCommandFactory
4
+ # A helper method to instantiate and invoke build
5
+ # @param [String] path the location of the file
6
+ # @param [Transformation] transformation
7
+ # @param [Integer] compression (85) the compression level to use (set 0 for no compression)
8
+ # @return [String] a command for running imagemagick to produce the requested output
9
+ def self.build(path, transformation, compression: 85)
10
+ new(path, transformation, compression: compression).build
11
+ end
12
+
13
+ # A helper method to instantiate and invoke build
14
+ # @param [String] path the location of the file
15
+ # @param [Transformation] transformation
16
+ # @param [Integer] compression the compression level to use (set 0 for no compression)
17
+ def initialize(path, transformation, compression:)
18
+ @path = path
19
+ @transformation = transformation
20
+ @compression = compression
21
+ end
22
+
23
+ attr_reader :path, :transformation, :compression
24
+
25
+ # @return [String] a command for running imagemagick to produce the requested output
26
+ def build
27
+ command = 'convert'
28
+ command << " -crop #{transformation.crop}" if transformation.crop
29
+ command << " -resize #{transformation.size}" if transformation.size
30
+ if transformation.rotation
31
+ command << " -virtual-pixel white +distort srt #{transformation.rotation}"
32
+ end
33
+
34
+ case transformation.quality
35
+ when 'grey'
36
+ command << ' -colorspace Gray'
37
+ when 'bitonal'
38
+ command << ' -colorspace Gray'
39
+ command << ' -type Bilevel'
40
+ end
41
+ command << " -quality #{compression}" if use_compression?
42
+ command << " #{path} #{transformation.format}:-"
43
+ command
44
+ end
45
+
46
+ private
47
+
48
+ def use_compression?
49
+ compression > 0 && transformation.format == 'jpg'
50
+ end
51
+ end
52
+ end
data/lib/riiif/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Riiif
2
- VERSION = '1.2.0'.freeze
2
+ VERSION = '1.3.0'.freeze
3
3
  end
@@ -6,7 +6,7 @@ RSpec.describe Riiif::Image do
6
6
  subject { described_class.new('world') }
7
7
  describe 'happy path' do
8
8
  before do
9
- expect(subject.image).to receive(:execute).with("convert #{filename} jpg:-").and_return('imagedata')
9
+ expect(subject.image).to receive(:execute).with("convert -quality 85 #{filename} jpg:-").and_return('imagedata')
10
10
  end
11
11
  it 'renders' do
12
12
  expect(subject.render('size' => 'full', format: 'jpg')).to eq 'imagedata'
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Riiif::ImagemagickCommandFactory do
4
+ let(:path) { 'foo.tiff' }
5
+
6
+ describe '.build' do
7
+ subject { described_class.build(path, transformation) }
8
+
9
+ let(:transformation) do
10
+ Riiif::Transformation.new('region',
11
+ 'size',
12
+ 'quality',
13
+ 'rotation',
14
+ format)
15
+ end
16
+
17
+ context "when it's a jpeg" do
18
+ let(:format) { 'jpg' }
19
+ it { is_expected.to match(/-quality 85/) }
20
+ end
21
+
22
+ context "when it's a tiff" do
23
+ let(:format) { 'tif' }
24
+ it { is_expected.not_to match(/-quality/) }
25
+ end
26
+ end
27
+ 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.2.0
4
+ version: 1.3.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: 2017-04-07 00:00:00.000000000 Z
11
+ date: 2017-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -150,6 +150,7 @@ files:
150
150
  - app/models/riiif/image.rb
151
151
  - app/services/riiif/command_runner.rb
152
152
  - app/services/riiif/image_magick_info_extractor.rb
153
+ - app/services/riiif/imagemagick_command_factory.rb
153
154
  - app/services/riiif/region/imagemagick/absolute_decoder.rb
154
155
  - app/services/riiif/region/imagemagick/full_decoder.rb
155
156
  - app/services/riiif/region/imagemagick/percentage_decoder.rb
@@ -179,6 +180,7 @@ files:
179
180
  - spec/models/riiif/image_spec.rb
180
181
  - spec/routing/redirect_spec.rb
181
182
  - spec/routing/resize_routes_spec.rb
183
+ - spec/services/riiif/imagemagick_command_factory_spec.rb
182
184
  - spec/spec_helper.rb
183
185
  - spec/test_app_templates/Gemfile.extra
184
186
  - spec/test_app_templates/lib/generators/test_app_generator.rb
@@ -214,6 +216,7 @@ test_files:
214
216
  - spec/models/riiif/image_spec.rb
215
217
  - spec/routing/redirect_spec.rb
216
218
  - spec/routing/resize_routes_spec.rb
219
+ - spec/services/riiif/imagemagick_command_factory_spec.rb
217
220
  - spec/spec_helper.rb
218
221
  - spec/test_app_templates/Gemfile.extra
219
222
  - spec/test_app_templates/lib/generators/test_app_generator.rb