riiif 1.2.0 → 1.3.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: 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