riiif 1.6.0 → 1.7.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: c0bb1c35a0544e1cf55ab8af94b47ba48edcb6de
4
- data.tar.gz: a591cfb9fe134db6b9ab8e68ca20b4d6008e859d
3
+ metadata.gz: 47aafb94ed533ae1769ddcd23095d428079b28df
4
+ data.tar.gz: 9aaec28c8c55fd8e936b4d192e31bbe66a39f228
5
5
  SHA512:
6
- metadata.gz: 69e0af123b2b0d0bf47f7c8c156bb58f88fa48f8534ce3b15a3b30c24b214acbfc832d238fbf7bf7afbd71b3df6898d91d0756ecb462f45d7cc6e032c28e0a5a
7
- data.tar.gz: 9fe0ca382348abcb23fc7f5b684a125b14116d96a98fdfc62e13b11644c7907f69e1035c90ef2735c1c9ef8a8bc79fc0f81c95a4349a2bc56d6935c0c14eb039
6
+ metadata.gz: 7b034b617360e62f487907b1395bef2641f130678729461d23410f48106674516d674a08e1d2a9a814d72d64ec2bcccdefa21a5099f8e6baee93bb304b714cd1
7
+ data.tar.gz: ed2a2ce3187f8c4f8227cdfcded3d177614d07bdeea331a125737180ed56f0fb0fbaa23e881b02d05a845b65b0638844d6fe265e3a31acc628332a346522b272
data/.rubocop_todo.yml CHANGED
@@ -11,7 +11,7 @@
11
11
  Lint/AssignmentInCondition:
12
12
  Exclude:
13
13
  - 'app/models/riiif/file.rb'
14
- - 'app/models/riiif/image.rb'
14
+ - 'app/services/riiif/option_decoder.rb'
15
15
  - 'lib/riiif/http_file_resolver.rb'
16
16
 
17
17
  # Offense count: 1
@@ -120,7 +120,7 @@ module Riiif
120
120
  CONTEXT => CONTEXT_URI,
121
121
  ID => request.original_url.sub('/info.json', ''),
122
122
  PROTOCOL => PROTOCOL_URI,
123
- PROFILE => [LEVEL1, 'formats' => model::OUTPUT_FORMATS]
123
+ PROFILE => [LEVEL1, 'formats' => OptionDecoder::OUTPUT_FORMATS]
124
124
  }
125
125
  end
126
126
  end
@@ -17,7 +17,6 @@ require_dependency 'riiif/size/imagemagick/percent_decoder'
17
17
  require_dependency 'riiif/size/imagemagick/width_decoder'
18
18
 
19
19
  module Riiif
20
- # rubocop:disable Metrics/ClassLength
21
20
  class Image
22
21
  extend Deprecation
23
22
 
@@ -37,8 +36,6 @@ module Riiif
37
36
  end
38
37
  end
39
38
 
40
- OUTPUT_FORMATS = %w(jpg png).freeze
41
-
42
39
  attr_reader :id
43
40
 
44
41
  # @param [String] id The identifier of the file to be looked up.
@@ -62,7 +59,7 @@ module Riiif
62
59
  key = Image.cache_key(id, cache_opts)
63
60
 
64
61
  cache.fetch(key, compress: true, expires_in: Image.expires_in) do
65
- file.extract(decode_options!(args))
62
+ file.extract(OptionDecoder.decode(args, info))
66
63
  end
67
64
  end
68
65
 
@@ -89,75 +86,5 @@ module Riiif
89
86
  'riiif:' + Digest::MD5.hexdigest(str)
90
87
  end
91
88
  end
92
-
93
- private
94
-
95
- ##
96
- # @param [ActiveSupport::HashWithIndifferentAccess] options
97
- # @return [Transformation]
98
- def decode_options!(options)
99
- raise ArgumentError, "You must provide a format. You provided #{options}" unless options[:format]
100
- validate_format!(options[:format])
101
- Riiif::Transformation.new(decode_region(options.delete(:region)),
102
- decode_size(options.delete(:size)),
103
- decode_quality(options[:quality]),
104
- decode_rotation(options[:rotation]),
105
- options[:format])
106
- end
107
-
108
- def decode_quality(quality)
109
- return if quality.nil? || %w(default color).include?(quality)
110
- return quality if %w(bitonal grey).include?(quality)
111
- raise InvalidAttributeError, "Unsupported quality: #{quality}"
112
- end
113
-
114
- def decode_rotation(rotation)
115
- return if rotation.nil? || rotation == '0'
116
- begin
117
- Float(rotation)
118
- rescue ArgumentError
119
- raise InvalidAttributeError, "Unsupported rotation: #{rotation}"
120
- end
121
- end
122
-
123
- def validate_format!(format)
124
- raise InvalidAttributeError, "Unsupported format: #{format}" unless OUTPUT_FORMATS.include?(format)
125
- end
126
-
127
- def decode_region(region)
128
- if region.nil? || region == 'full'
129
- Riiif::Region::Imagemagick::FullDecoder.new.decode
130
- elsif md = /^pct:(\d+),(\d+),(\d+),(\d+)$/.match(region)
131
- Riiif::Region::Imagemagick::PercentageDecoder
132
- .new(info, md[1], md[2], md[3], md[4]).decode
133
- elsif md = /^(\d+),(\d+),(\d+),(\d+)$/.match(region)
134
- Riiif::Region::Imagemagick::AbsoluteDecoder.new(md[1], md[2], md[3], md[4]).decode
135
- elsif region == 'square'
136
- Riiif::Region::Imagemagick::SquareDecoder.new(info).decode
137
- else
138
- raise InvalidAttributeError, "Invalid region: #{region}"
139
- end
140
- end
141
-
142
- # rubocop:disable Metrics/PerceivedComplexity
143
- def decode_size(size)
144
- if size.nil? || size == 'full'
145
- Riiif::Size::Imagemagick::FullDecoder.new.decode
146
- elsif md = /^,(\d+)$/.match(size)
147
- Riiif::Size::Imagemagick::HeightDecoder.new(md[1]).decode
148
- elsif md = /^(\d+),$/.match(size)
149
- Riiif::Size::Imagemagick::WidthDecoder.new(md[1]).decode
150
- elsif md = /^pct:(\d+(.\d+)?)$/.match(size)
151
- Riiif::Size::Imagemagick::PercentDecoder.new(md[1]).decode
152
- elsif md = /^(\d+),(\d+)$/.match(size)
153
- Riiif::Size::Imagemagick::AbsoluteDecoder.new(md[1], md[2]).decode
154
- elsif md = /^!(\d+),(\d+)$/.match(size)
155
- Riiif::Size::Imagemagick::BestFitDecoder.new(md[1], md[2]).decode
156
- else
157
- raise InvalidAttributeError, "Invalid size: #{size}"
158
- end
159
- end
160
- # rubocop:enable Metrics/PerceivedComplexity
161
89
  end
162
- # rubocop:enable Metrics/ClassLength
163
90
  end
@@ -1,5 +1,3 @@
1
- require 'deprecation'
2
-
3
1
  module Riiif
4
2
  # This is the result of calling the Riiif.image_info service. It stores the height & width
5
3
  class ImageInformation
@@ -0,0 +1,88 @@
1
+ module Riiif
2
+ # Decodes the URL parameters into a Transformation object
3
+ class OptionDecoder
4
+ OUTPUT_FORMATS = %w(jpg png).freeze
5
+
6
+ # a helper method for instantiating the OptionDecoder
7
+ # @param [ActiveSupport::HashWithIndifferentAccess] options
8
+ # @param [ImageInformation] image_info
9
+ def self.decode(options, image_info)
10
+ new(options, image_info).decode
11
+ end
12
+
13
+ # @param [ActiveSupport::HashWithIndifferentAccess] options
14
+ # @param [ImageInformation] image_info
15
+ def initialize(options, image_info)
16
+ @options = options
17
+ @image_info = image_info
18
+ end
19
+
20
+ attr_reader :image_info
21
+
22
+ ##
23
+ # @return [Transformation]
24
+ def decode
25
+ raise ArgumentError, "You must provide a format. You provided #{@options}" unless @options[:format]
26
+ validate_format!(@options[:format])
27
+ Riiif::Transformation.new(decode_region(@options.delete(:region)),
28
+ decode_size(@options.delete(:size)),
29
+ decode_quality(@options[:quality]),
30
+ decode_rotation(@options[:rotation]),
31
+ @options[:format])
32
+ end
33
+
34
+ def decode_quality(quality)
35
+ return if quality.nil? || %w(default color).include?(quality)
36
+ return quality if %w(bitonal grey).include?(quality)
37
+ raise InvalidAttributeError, "Unsupported quality: #{quality}"
38
+ end
39
+
40
+ def decode_rotation(rotation)
41
+ return if rotation.nil? || rotation == '0'
42
+ begin
43
+ Float(rotation)
44
+ rescue ArgumentError
45
+ raise InvalidAttributeError, "Unsupported rotation: #{rotation}"
46
+ end
47
+ end
48
+
49
+ def validate_format!(format)
50
+ raise InvalidAttributeError, "Unsupported format: #{format}" unless OUTPUT_FORMATS.include?(format)
51
+ end
52
+
53
+ def decode_region(region)
54
+ if region.nil? || region == 'full'
55
+ Riiif::Region::Imagemagick::FullDecoder.new.decode
56
+ elsif md = /^pct:(\d+),(\d+),(\d+),(\d+)$/.match(region)
57
+ Riiif::Region::Imagemagick::PercentageDecoder
58
+ .new(image_info, md[1], md[2], md[3], md[4]).decode
59
+ elsif md = /^(\d+),(\d+),(\d+),(\d+)$/.match(region)
60
+ Riiif::Region::Imagemagick::AbsoluteDecoder.new(md[1], md[2], md[3], md[4]).decode
61
+ elsif region == 'square'
62
+ Riiif::Region::Imagemagick::SquareDecoder.new(image_info).decode
63
+ else
64
+ raise InvalidAttributeError, "Invalid region: #{region}"
65
+ end
66
+ end
67
+
68
+ # rubocop:disable Metrics/PerceivedComplexity
69
+ def decode_size(size)
70
+ if size.nil? || size == 'full'
71
+ Riiif::Size::Imagemagick::FullDecoder.new.decode
72
+ elsif md = /^,(\d+)$/.match(size)
73
+ Riiif::Size::Imagemagick::HeightDecoder.new(md[1]).decode
74
+ elsif md = /^(\d+),$/.match(size)
75
+ Riiif::Size::Imagemagick::WidthDecoder.new(md[1]).decode
76
+ elsif md = /^pct:(\d+(.\d+)?)$/.match(size)
77
+ Riiif::Size::Imagemagick::PercentDecoder.new(md[1]).decode
78
+ elsif md = /^(\d+),(\d+)$/.match(size)
79
+ Riiif::Size::Imagemagick::AbsoluteDecoder.new(md[1], md[2]).decode
80
+ elsif md = /^!(\d+),(\d+)$/.match(size)
81
+ Riiif::Size::Imagemagick::BestFitDecoder.new(md[1], md[2]).decode
82
+ else
83
+ raise InvalidAttributeError, "Invalid size: #{size}"
84
+ end
85
+ end
86
+ # rubocop:enable Metrics/PerceivedComplexity
87
+ end
88
+ end
@@ -1,4 +1,3 @@
1
- require 'deprecation'
2
1
  module Riiif
3
2
  class AbstractFileSystemResolver
4
3
  extend Deprecation
data/lib/riiif/engine.rb CHANGED
@@ -4,5 +4,9 @@ module Riiif
4
4
 
5
5
  # How long to cache the tiles for.
6
6
  config.cache_duration_in_days = 3
7
+
8
+ config.action_dispatch.rescue_responses.merge!(
9
+ 'Riiif::ImageNotFoundError' => :not_found
10
+ )
7
11
  end
8
12
  end
data/lib/riiif/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Riiif
2
- VERSION = '1.6.0'.freeze
2
+ VERSION = '1.7.0'.freeze
3
3
  end
data/lib/riiif.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'riiif/version'
2
+ require 'deprecation'
2
3
  require 'riiif/engine'
3
4
  module Riiif
4
5
  extend ActiveSupport::Autoload
@@ -72,14 +72,14 @@ RSpec.describe Riiif::Image do
72
72
  end
73
73
 
74
74
  describe '#render' do
75
+ before do
76
+ allow(Riiif::CommandRunner).to receive(:execute)
77
+ .with("identify -format %hx%w #{filename}[0]").and_return('131x175')
78
+ end
79
+
75
80
  describe 'region' do
76
81
  subject(:render) { image.render(region: region, format: 'png') }
77
82
 
78
- before do
79
- allow(Riiif::CommandRunner).to receive(:execute)
80
- .with("identify -format %hx%w #{filename}[0]").and_return('131x175')
81
- end
82
-
83
83
  context 'when specifing full size' do
84
84
  let(:region) { 'full' }
85
85
 
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.6.0
4
+ version: 1.7.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-09-07 00:00:00.000000000 Z
11
+ date: 2017-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -180,6 +180,7 @@ files:
180
180
  - app/services/riiif/command_runner.rb
181
181
  - app/services/riiif/image_magick_info_extractor.rb
182
182
  - app/services/riiif/imagemagick_command_factory.rb
183
+ - app/services/riiif/option_decoder.rb
183
184
  - app/services/riiif/region/imagemagick/absolute_decoder.rb
184
185
  - app/services/riiif/region/imagemagick/full_decoder.rb
185
186
  - app/services/riiif/region/imagemagick/percentage_decoder.rb