image_vise 0.8.2 → 1.0.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
  SHA256:
3
- metadata.gz: 448a0d9a3decdcb6af4a3c0dc52fbed811bca85a8ba1df2775916ee164dffdcf
4
- data.tar.gz: 3bb7300d2622d442ebe559195276e1ab753a9f1268b955fe2427362041f35036
3
+ metadata.gz: db4e835de55f61d43df27411213d6b121bd586c3cd3e25c09010d02afc58ba27
4
+ data.tar.gz: 5d5235feae9b5310f7c35f8ebbbc582efc7f191dfe686cc8dda2de8c3fe948f8
5
5
  SHA512:
6
- metadata.gz: c71485f40a843adfc42887ef0d3766df61c83457bb3cbc92763e1c172c82a74ba7b1aba8472f9f16e79a2a35469648d361e7f6a0c85f5bfddba2f8f662283b5d
7
- data.tar.gz: 6863b83f51d044589e20c6cf40ff6e6843f148374cea3a8c036a9af8fef99f626f6ef941a83bd80a44159eaed2a1a85122c7a2444510a006fddf8825f3195954
6
+ metadata.gz: 5d1b4d6d6b62344c2cdc2073dca78ba16a485e9d7dca852f249313194d33c29df857460291db1531ff526adbcfb4353243aa2b777f482673916a607dc23c7608
7
+ data.tar.gz: 9909a197b5488f6e1c348e6fb57b5d12c43b22dc98e9841c9b0ee98c801f8073813ad979bf1af3860e2872f07a6ef23b30095014bb491eec5c0559b3dc790302
data/.travis.yml CHANGED
@@ -1,8 +1,7 @@
1
+ language: ruby
1
2
  rvm:
2
- - 2.4.4
3
- - 2.5.1
4
- - 2.6.2
5
- sudo: false
3
+ - 2.5
4
+ - 3.0.2
6
5
  cache: bundler
7
6
  env:
8
7
  global:
data/CHANGELOG.md CHANGED
@@ -1,2 +1,7 @@
1
+ ## 1.0.0
2
+ * Add support for Ruby 2.6 and newer (including Ruby 3.0)
3
+ * Minimum supported Ruby is now 2.5
4
+ * Remove `ks` dependency
5
+
1
6
  ## 0.8.2
2
7
  * Change format_parser required version to allow > 0.24
data/DEVELOPMENT.md CHANGED
@@ -62,9 +62,9 @@ path access using the glob whitelist)
62
62
  class PicFetcher < ImageVise::FetcherFile
63
63
  def self.fetch_uri_to_tempfile(uri_object)
64
64
  # Convert an internal "pic://sites/uploads/abcdef.jpg" to a full path URL
65
- partial_path = URI.decode(uri_object.path)
66
- full_path = File.join(Mappe::ROOT, 'sites', partial_path)
67
- full_path_uri = URI('file://' + URI.encode(full_path))
65
+ partial_path = decode_file_uri_path(uri_object.path)
66
+ full_filesystem_path = File.join(Mappe::ROOT, 'sites', partial_path)
67
+ full_path_uri = URI(file_url_for(full_filesystem_path))
68
68
  super(full_path_uri)
69
69
  end
70
70
  ImageVise.register_fetcher 'pic', self
data/README.md CHANGED
@@ -95,7 +95,7 @@ end
95
95
 
96
96
  If you want to grab a local file, compose a `file://` URL (mind the endcoding!)
97
97
 
98
- src_url = 'file://' + URI.encode(File.expand_path(my_pic))
98
+ src_url = 'file://' + ImageVise::FetcherFile.encode_file_uri_path(File.expand_path(my_pic))
99
99
 
100
100
  Note that you need to permit certain glob patterns as sources before this will work, see below.
101
101
 
data/image_vise.gemspec CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |spec|
22
22
  raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
23
  end
24
24
 
25
+ spec.required_ruby_version = ">= 2.5"
26
+
25
27
  spec.files = `git ls-files -z`.split("\x0")
26
28
  spec.bindir = "exe"
27
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -29,18 +31,16 @@ Gem::Specification.new do |spec|
29
31
 
30
32
  spec.add_dependency 'patron', '~> 0.9'
31
33
  spec.add_dependency 'rmagick', '~> 3'
32
- spec.add_dependency 'ks'
33
34
  spec.add_dependency 'rack', '>= 1', '< 3'
34
35
  spec.add_dependency 'format_parser', '~> 0.25'
35
36
  spec.add_dependency 'measurometer', '~> 1'
36
37
 
37
38
  spec.add_development_dependency 'magic_bytes', '~> 1'
38
- spec.add_development_dependency "bundler"
39
39
  spec.add_development_dependency "rake", "~> 12.2"
40
40
  spec.add_development_dependency "rack-test"
41
41
  spec.add_development_dependency "rspec", "~> 3"
42
- spec.add_development_dependency "addressable"
43
42
  spec.add_development_dependency "strenv"
44
43
  spec.add_development_dependency "simplecov"
45
44
  spec.add_development_dependency "pry"
45
+ spec.add_development_dependency "webrick"
46
46
  end
data/lib/image_vise.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'ks'
2
1
  require 'json'
3
2
  require 'patron'
4
3
  require 'rmagick'
@@ -21,8 +21,20 @@ class ImageVise::FetcherFile
21
21
  raise e
22
22
  end
23
23
 
24
+ def self.decode_file_uri_path(path_with_percent_encoded_components)
25
+ path_with_percent_encoded_components.split('/').map { |component| URI.decode_www_form_component(component) }.join('/')
26
+ end
27
+
28
+ def self.file_url_for(path)
29
+ "file://#{encode_file_uri_path(path)}"
30
+ end
31
+
32
+ def self.encode_file_uri_path(path)
33
+ path.split('/').map { |component| URI.encode_www_form_component(component) }.join('/')
34
+ end
35
+
24
36
  def self.uri_to_path(uri)
25
- File.expand_path(URI.decode(uri.path))
37
+ File.expand_path(decode_file_uri_path(uri.path))
26
38
  end
27
39
 
28
40
  def self.verify_filesystem_access!(path_on_filesystem)
@@ -1,6 +1,6 @@
1
1
  require 'openssl'
2
2
 
3
- class ImageVise::ImageRequest < Ks.strict(:src_url, :pipeline)
3
+ class ImageVise::ImageRequest < Struct.new(:src_url, :pipeline, keyword_init: true)
4
4
  class InvalidRequest < ArgumentError; end
5
5
  class SignatureError < InvalidRequest; end
6
6
  class URLError < InvalidRequest; end
@@ -2,7 +2,7 @@
2
2
  # Can handle most 'word' colors and hex color codes but not RGB values.
3
3
  #
4
4
  # The corresponding Pipeline method is `background_fill`.
5
- class ImageVise::BackgroundFill < Ks.strict(:color)
5
+ class ImageVise::BackgroundFill < Struct.new(:color, keyword_init: true)
6
6
  def initialize(*)
7
7
  super
8
8
  self.color = color.to_s
@@ -2,7 +2,7 @@
2
2
  # of ImageMagick gravity parameters (see GRAVITY_PARAMS)
3
3
  #
4
4
  # The corresponding Pipeline method is `crop`.
5
- class ImageVise::Crop < Ks.strict(:width, :height, :gravity)
5
+ class ImageVise::Crop < Struct.new(:width, :height, :gravity, keyword_init: true)
6
6
  GRAVITY_PARAMS = {
7
7
  'nw' => Magick::NorthWestGravity,
8
8
  'n' => Magick::NorthGravity,
@@ -1,7 +1,7 @@
1
1
  # Overrides the cache lifetime set in the output headers of the RenderEngine.
2
2
  # Can be used to permit the requester to set the caching lifetime, instead
3
3
  # of it being a configuration variable in the service performing the rendering
4
- class ImageVise::ExpireAfter < Ks.strict(:seconds)
4
+ class ImageVise::ExpireAfter < Struct.new(:seconds, keyword_init: true)
5
5
  def initialize(seconds:)
6
6
  unless seconds.is_a?(Integer) && seconds > 0
7
7
  raise ArgumentError, "the :seconds parameter must be an Integer and must be above 0, but was %s" % seconds.inspect
@@ -3,7 +3,7 @@
3
3
  # gravity parameter defines the crop gravity (on corners, sides, or in the middle).
4
4
  #
5
5
  # The corresponding Pipeline method is `fit_crop`.
6
- class ImageVise::FitCrop < Ks.strict(:width, :height, :gravity)
6
+ class ImageVise::FitCrop < Struct.new(:width, :height, :gravity, keyword_init: true)
7
7
  GRAVITY_PARAMS = {
8
8
  'nw' => Magick::NorthWestGravity,
9
9
  'n' => Magick::NorthGravity,
@@ -1,7 +1,7 @@
1
1
  # Forces the output format to be JPEG and specifies the quality factor to use when saving
2
2
  #
3
3
  # The corresponding Pipeline method is `force_jpg_out`.
4
- class ImageVise::ForceJPGOut < Ks.strict(:quality)
4
+ class ImageVise::ForceJPGOut < Struct.new(:quality, keyword_init: true)
5
5
  def initialize(quality:)
6
6
  unless (0..100).cover?(quality)
7
7
  raise ArgumentError, "the :quality setting must be within 0..100, but was %d" % quality
@@ -1,7 +1,7 @@
1
1
  # Applies a transformation using an ImageMagick geometry string
2
2
  #
3
3
  # The corresponding Pipeline method is `geom`.
4
- class ImageVise::Geom < Ks.strict(:geometry_string)
4
+ class ImageVise::Geom < Struct.new(:geometry_string, keyword_init: true)
5
5
  def initialize(*)
6
6
  super
7
7
  self.geometry_string = geometry_string.to_s
@@ -1,7 +1,7 @@
1
1
  # Applies a sharpening filter to the image.
2
2
  #
3
3
  # The corresponding Pipeline method is `sharpen`.
4
- class ImageVise::Sharpen < Ks.strict(:radius, :sigma)
4
+ class ImageVise::Sharpen < Struct.new(:radius, :sigma, keyword_init: true)
5
5
  def initialize(*)
6
6
  super
7
7
  self.radius = radius.to_f
@@ -27,11 +27,16 @@ class ImageVise::Pipeline
27
27
  @ops.empty?
28
28
  end
29
29
 
30
- def method_missing(method_name, *a, &blk)
30
+ def method_missing(method_name, args = {}, &blk)
31
31
  operator_builder = ImageVise.operator_from(method_name)
32
- self << operator_builder.new(*a)
32
+
33
+ if args.empty? # TODO: remove conditional after dropping Ruby 2.6 support
34
+ self << operator_builder.new
35
+ else
36
+ self << operator_builder.new(**args)
37
+ end
33
38
  end
34
-
39
+
35
40
  def respond_to_missing?(method_name, *a)
36
41
  ImageVise.defined_operators.include?(method_name.to_s)
37
42
  end
@@ -1,3 +1,3 @@
1
1
  class ImageVise
2
- VERSION = '0.8.2'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -1,4 +1,4 @@
1
- class ImageVise::JPGWriter < Ks.strict(:quality)
1
+ class ImageVise::JPGWriter < Struct.new(:quality, keyword_init: true)
2
2
  JPG_EXT = 'jpg'
3
3
 
4
4
  def write_image!(magick_image, _, render_to_path)
@@ -8,13 +8,13 @@ describe ImageVise::FetcherFile do
8
8
  it 'is registered as a fetcher for file://' do
9
9
  expect(ImageVise.fetcher_for('file')).to eq(ImageVise::FetcherFile)
10
10
  end
11
-
11
+
12
12
  it 'returns a Tempfile containing this test suite' do
13
13
  path = File.expand_path(__FILE__)
14
14
  ruby_files_in_this_directory = __dir__ + '/*.rb'
15
15
  ImageVise.allow_filesystem_source! ruby_files_in_this_directory
16
-
17
- uri = URI('file://' + URI.encode(path))
16
+
17
+ uri = URI('file://' + ImageVise::FetcherFile.encode_file_uri_path(path))
18
18
  fetched = ImageVise::FetcherFile.fetch_uri_to_tempfile(uri)
19
19
 
20
20
  expect(fetched).to be_kind_of(Tempfile)
@@ -27,7 +27,7 @@ describe ImageVise::FetcherFile do
27
27
 
28
28
  ImageVise.deny_filesystem_sources!
29
29
 
30
- uri = URI('file://' + URI.encode(path))
30
+ uri = URI('file://' + ImageVise::FetcherFile.encode_file_uri_path(path))
31
31
  expect {
32
32
  ImageVise::FetcherFile.fetch_uri_to_tempfile(uri)
33
33
  }.to raise_error(ImageVise::FetcherFile::AccessError)
@@ -40,7 +40,7 @@ describe ImageVise::FetcherFile do
40
40
  ImageVise.deny_filesystem_sources!
41
41
  ImageVise.allow_filesystem_source! text_files_in_this_directory
42
42
 
43
- uri = URI('file://' + URI.encode(path))
43
+ uri = URI('file://' + ImageVise::FetcherFile.encode_file_uri_path(path))
44
44
  expect {
45
45
  ImageVise::FetcherFile.fetch_uri_to_tempfile(uri)
46
46
  }.to raise_error(ImageVise::FetcherFile::AccessError)
@@ -51,7 +51,7 @@ describe ImageVise::FetcherFile do
51
51
  ruby_files_in_this_directory = __dir__ + '/*.rb'
52
52
  ImageVise.allow_filesystem_source! ruby_files_in_this_directory
53
53
 
54
- uri = URI('file://' + URI.encode(path))
54
+ uri = URI('file://' + ImageVise::FetcherFile.encode_file_uri_path(path))
55
55
  expect(ImageVise::FetcherFile).to receive(:maximum_source_file_size_bytes).and_return(1)
56
56
 
57
57
  expect {
@@ -33,7 +33,7 @@ describe ImageVise::RenderEngine do
33
33
 
34
34
  context 'when requesting an image' do
35
35
  before :each do
36
- parsed_url = Addressable::URI.parse(public_url)
36
+ parsed_url = URI.parse(public_url)
37
37
  ImageVise.add_allowed_host!(parsed_url.host)
38
38
  end
39
39
 
@@ -43,7 +43,7 @@ describe ImageVise::RenderEngine do
43
43
  end
44
44
 
45
45
  it 'halts with 400 when the requested image cannot be opened by ImageMagick' do
46
- uri = Addressable::URI.parse(public_url)
46
+ uri = URI.parse(public_url)
47
47
  ImageVise.add_allowed_host!(uri.host)
48
48
  ImageVise.add_secret_key!('l33tness')
49
49
  uri.path = '/___nonexistent_image.jpg'
@@ -76,7 +76,7 @@ describe ImageVise::RenderEngine do
76
76
  end
77
77
 
78
78
  it 'responds with 403 when upstream returns it, and includes the URL in the error message' do
79
- uri = Addressable::URI.parse(public_url)
79
+ uri = URI.parse(public_url)
80
80
  ImageVise.add_allowed_host!(uri.host)
81
81
  ImageVise.add_secret_key!('l33tness')
82
82
  uri.path = '/forbidden'
@@ -93,7 +93,7 @@ describe ImageVise::RenderEngine do
93
93
  end
94
94
 
95
95
  it 'replays upstream error response codes that are selected to be replayed to the requester' do
96
- uri = Addressable::URI.parse(public_url)
96
+ uri = URI.parse(public_url)
97
97
  ImageVise.add_allowed_host!(uri.host)
98
98
  ImageVise.add_secret_key!('l33tness')
99
99
 
@@ -118,7 +118,7 @@ describe ImageVise::RenderEngine do
118
118
  end
119
119
 
120
120
  it 'sets very far caching headers and an ETag, and returns a 304 if any ETag is set' do
121
- uri = Addressable::URI.parse(public_url)
121
+ uri = URI.parse(public_url)
122
122
  ImageVise.add_allowed_host!(uri.host)
123
123
  ImageVise.add_secret_key!('l33tness')
124
124
 
@@ -142,7 +142,7 @@ describe ImageVise::RenderEngine do
142
142
  end
143
143
 
144
144
  it 'allows for setting a custom cache lifetime' do
145
- uri = Addressable::URI.parse(public_url)
145
+ uri = URI.parse(public_url)
146
146
  ImageVise.add_allowed_host!(uri.host)
147
147
  ImageVise.add_secret_key!('l33tness')
148
148
 
@@ -158,7 +158,7 @@ describe ImageVise::RenderEngine do
158
158
  end
159
159
 
160
160
  it 'uses the correct default cache lifetime if one is not specified' do
161
- uri = Addressable::URI.parse(public_url)
161
+ uri = URI.parse(public_url)
162
162
  ImageVise.add_allowed_host!(uri.host)
163
163
  ImageVise.add_secret_key!('l33tness')
164
164
 
@@ -173,7 +173,7 @@ describe ImageVise::RenderEngine do
173
173
  end
174
174
 
175
175
  it 'responds with an image that passes through all the processing steps' do
176
- uri = Addressable::URI.parse(public_url)
176
+ uri = URI.parse(public_url)
177
177
  ImageVise.add_allowed_host!(uri.host)
178
178
  ImageVise.add_secret_key!('l33tness')
179
179
 
@@ -216,7 +216,7 @@ describe ImageVise::RenderEngine do
216
216
  end
217
217
 
218
218
  it 'calls all of the internal methods during execution' do
219
- uri = Addressable::URI.parse(public_url)
219
+ uri = URI.parse(public_url)
220
220
  ImageVise.add_allowed_host!(uri.host)
221
221
  ImageVise.add_secret_key!('l33tness')
222
222
 
@@ -249,7 +249,7 @@ describe ImageVise::RenderEngine do
249
249
  it 'URI-decodes the path in a file:// URL for a file with a Unicode path' do
250
250
  utf8_file_path = File.dirname(test_image_path) + '/картинка.jpg'
251
251
  FileUtils.cp_r(test_image_path, utf8_file_path)
252
- uri = 'file://' + URI.encode(utf8_file_path)
252
+ uri = 'file://' + ImageVise::FetcherFile.encode_file_uri_path(utf8_file_path)
253
253
 
254
254
  ImageVise.allow_filesystem_source!(File.dirname(test_image_path) + '/*.*')
255
255
  ImageVise.add_secret_key!('l33tness')
@@ -264,7 +264,7 @@ describe ImageVise::RenderEngine do
264
264
  end
265
265
 
266
266
  it 'forbids a request with an extra GET param' do
267
- uri = 'file://' + URI.encode(test_image_path)
267
+ uri = 'file://' + ImageVise::FetcherFile.encode_file_uri_path(test_image_path)
268
268
 
269
269
  p = ImageVise::Pipeline.new.fit_crop(width: 10, height: 10, gravity: 'c')
270
270
  image_request = ImageVise::ImageRequest.new(src_url: uri.to_s, pipeline: p)
@@ -275,7 +275,7 @@ describe ImageVise::RenderEngine do
275
275
  end
276
276
 
277
277
  it 'returns the processed JPEG image as a PNG if it had to get an alpha channel during processing' do
278
- uri = Addressable::URI.parse(public_url)
278
+ uri = URI.parse(public_url)
279
279
  ImageVise.add_allowed_host!(uri.host)
280
280
  ImageVise.add_secret_key!('l33tness')
281
281
 
@@ -292,7 +292,7 @@ describe ImageVise::RenderEngine do
292
292
  end
293
293
 
294
294
  it 'permits a PSD file by default' do
295
- uri = Addressable::URI.parse(public_url_psd)
295
+ uri = URI.parse(public_url_psd)
296
296
  ImageVise.add_allowed_host!(uri.host)
297
297
  ImageVise.add_secret_key!('l33tness')
298
298
 
@@ -304,7 +304,7 @@ describe ImageVise::RenderEngine do
304
304
  end
305
305
 
306
306
  it 'destroys all the loaded PSD layers' do
307
- uri = Addressable::URI.parse(public_url_psd_multilayer)
307
+ uri = URI.parse(public_url_psd_multilayer)
308
308
  ImageVise.add_allowed_host!(uri.host)
309
309
  ImageVise.add_secret_key!('l33tness')
310
310
 
@@ -324,7 +324,7 @@ describe ImageVise::RenderEngine do
324
324
  end
325
325
 
326
326
  it 'outputs a converted TIFF file as a PNG' do
327
- uri = Addressable::URI.parse(public_url_tif)
327
+ uri = URI.parse(public_url_tif)
328
328
  ImageVise.add_allowed_host!(uri.host)
329
329
  ImageVise.add_secret_key!('l33tness')
330
330
 
@@ -341,7 +341,7 @@ describe ImageVise::RenderEngine do
341
341
  end
342
342
 
343
343
  it 'processes a 1.5mb PSD with a forced conversion to JPEG' do
344
- uri = Addressable::URI.parse(public_url_psd)
344
+ uri = URI.parse(public_url_psd)
345
345
  ImageVise.add_allowed_host!(uri.host)
346
346
  ImageVise.add_secret_key!('1337ness')
347
347
 
@@ -357,7 +357,7 @@ describe ImageVise::RenderEngine do
357
357
  end
358
358
 
359
359
  it 'sets a customized Expires: cache lifetime set via the pipeline' do
360
- uri = Addressable::URI.parse(public_url_psd)
360
+ uri = URI.parse(public_url_psd)
361
361
  ImageVise.add_allowed_host!(uri.host)
362
362
  ImageVise.add_secret_key!('1337ness')
363
363
 
@@ -370,7 +370,7 @@ describe ImageVise::RenderEngine do
370
370
  end
371
371
 
372
372
  it 'converts a PNG into a JPG applying a background fill' do
373
- uri = Addressable::URI.parse(public_url_png_transparency)
373
+ uri = URI.parse(public_url_png_transparency)
374
374
  ImageVise.add_allowed_host!(uri.host)
375
375
  ImageVise.add_secret_key!('h00ray')
376
376
 
data/spec/spec_helper.rb CHANGED
@@ -8,7 +8,6 @@ Bundler.require
8
8
 
9
9
  require 'tmpdir'
10
10
  require 'securerandom'
11
- require 'addressable/uri'
12
11
  require 'strenv'
13
12
  require 'pry'
14
13
  require 'magic_bytes'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_vise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-30 00:00:00.000000000 Z
11
+ date: 2021-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: patron
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3'
41
- - !ruby/object:Gem::Dependency
42
- name: ks
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rack
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -114,20 +100,6 @@ dependencies:
114
100
  - - "~>"
115
101
  - !ruby/object:Gem::Version
116
102
  version: '1'
117
- - !ruby/object:Gem::Dependency
118
- name: bundler
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: '0'
131
103
  - !ruby/object:Gem::Dependency
132
104
  name: rake
133
105
  requirement: !ruby/object:Gem::Requirement
@@ -171,7 +143,7 @@ dependencies:
171
143
  - !ruby/object:Gem::Version
172
144
  version: '3'
173
145
  - !ruby/object:Gem::Dependency
174
- name: addressable
146
+ name: strenv
175
147
  requirement: !ruby/object:Gem::Requirement
176
148
  requirements:
177
149
  - - ">="
@@ -185,7 +157,7 @@ dependencies:
185
157
  - !ruby/object:Gem::Version
186
158
  version: '0'
187
159
  - !ruby/object:Gem::Dependency
188
- name: strenv
160
+ name: simplecov
189
161
  requirement: !ruby/object:Gem::Requirement
190
162
  requirements:
191
163
  - - ">="
@@ -199,7 +171,7 @@ dependencies:
199
171
  - !ruby/object:Gem::Version
200
172
  version: '0'
201
173
  - !ruby/object:Gem::Dependency
202
- name: simplecov
174
+ name: pry
203
175
  requirement: !ruby/object:Gem::Requirement
204
176
  requirements:
205
177
  - - ">="
@@ -213,7 +185,7 @@ dependencies:
213
185
  - !ruby/object:Gem::Version
214
186
  version: '0'
215
187
  - !ruby/object:Gem::Dependency
216
- name: pry
188
+ name: webrick
217
189
  requirement: !ruby/object:Gem::Requirement
218
190
  requirements:
219
191
  - - ">="
@@ -303,7 +275,7 @@ licenses:
303
275
  - MIT
304
276
  metadata:
305
277
  allowed_push_host: https://rubygems.org
306
- post_install_message:
278
+ post_install_message:
307
279
  rdoc_options: []
308
280
  require_paths:
309
281
  - lib
@@ -311,15 +283,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
311
283
  requirements:
312
284
  - - ">="
313
285
  - !ruby/object:Gem::Version
314
- version: '0'
286
+ version: '2.5'
315
287
  required_rubygems_version: !ruby/object:Gem::Requirement
316
288
  requirements:
317
289
  - - ">="
318
290
  - !ruby/object:Gem::Version
319
291
  version: '0'
320
292
  requirements: []
321
- rubygems_version: 3.1.2
322
- signing_key:
293
+ rubygems_version: 3.2.22
294
+ signing_key:
323
295
  specification_version: 4
324
296
  summary: Runtime thumbnailing proxy
325
297
  test_files: []