image_vise 0.7.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +3 -7
- data/CHANGELOG.md +7 -0
- data/DEVELOPMENT.md +3 -3
- data/README.md +1 -1
- data/image_vise.gemspec +6 -6
- data/lib/image_vise.rb +0 -1
- data/lib/image_vise/fetchers/fetcher_file.rb +13 -1
- data/lib/image_vise/image_request.rb +1 -1
- data/lib/image_vise/operators/background_fill.rb +1 -1
- data/lib/image_vise/operators/crop.rb +1 -1
- data/lib/image_vise/operators/expire_after.rb +1 -1
- data/lib/image_vise/operators/fit_crop.rb +1 -1
- data/lib/image_vise/operators/force_jpg_out.rb +1 -1
- data/lib/image_vise/operators/geom.rb +1 -1
- data/lib/image_vise/operators/sharpen.rb +1 -1
- data/lib/image_vise/pipeline.rb +8 -3
- data/lib/image_vise/render_engine.rb +2 -1
- data/lib/image_vise/version.rb +1 -1
- data/lib/image_vise/writers/jpeg_writer.rb +1 -1
- data/spec/image_vise/fetcher_file_spec.rb +6 -6
- data/spec/image_vise/render_engine_spec.rb +22 -18
- data/spec/spec_helper.rb +0 -1
- metadata +18 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db4e835de55f61d43df27411213d6b121bd586c3cd3e25c09010d02afc58ba27
|
4
|
+
data.tar.gz: 5d5235feae9b5310f7c35f8ebbbc582efc7f191dfe686cc8dda2de8c3fe948f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d1b4d6d6b62344c2cdc2073dca78ba16a485e9d7dca852f249313194d33c29df857460291db1531ff526adbcfb4353243aa2b777f482673916a607dc23c7608
|
7
|
+
data.tar.gz: 9909a197b5488f6e1c348e6fb57b5d12c43b22dc98e9841c9b0ee98c801f8073813ad979bf1af3860e2872f07a6ef23b30095014bb491eec5c0559b3dc790302
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
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 =
|
66
|
-
|
67
|
-
full_path_uri = URI(
|
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://' +
|
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
@@ -21,26 +21,26 @@ Gem::Specification.new do |spec|
|
|
21
21
|
else
|
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) }
|
28
30
|
spec.require_paths = ["lib"]
|
29
31
|
|
30
32
|
spec.add_dependency 'patron', '~> 0.9'
|
31
|
-
spec.add_dependency 'rmagick', '~>
|
32
|
-
spec.add_dependency 'ks'
|
33
|
+
spec.add_dependency 'rmagick', '~> 3'
|
33
34
|
spec.add_dependency 'rack', '>= 1', '< 3'
|
34
|
-
spec.add_dependency 'format_parser', '
|
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", "~> 1.7"
|
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
@@ -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(
|
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 <
|
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 <
|
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 <
|
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 <
|
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 <
|
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 <
|
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 <
|
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 <
|
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
|
data/lib/image_vise/pipeline.rb
CHANGED
@@ -27,11 +27,16 @@ class ImageVise::Pipeline
|
|
27
27
|
@ops.empty?
|
28
28
|
end
|
29
29
|
|
30
|
-
def method_missing(method_name,
|
30
|
+
def method_missing(method_name, args = {}, &blk)
|
31
31
|
operator_builder = ImageVise.operator_from(method_name)
|
32
|
-
|
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
|
data/lib/image_vise/version.rb
CHANGED
@@ -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://' +
|
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://' +
|
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://' +
|
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://' +
|
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 =
|
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 =
|
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 =
|
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 =
|
96
|
+
uri = URI.parse(public_url)
|
97
97
|
ImageVise.add_allowed_host!(uri.host)
|
98
98
|
ImageVise.add_secret_key!('l33tness')
|
99
99
|
|
@@ -110,13 +110,15 @@ describe ImageVise::RenderEngine do
|
|
110
110
|
expect(last_response.headers['Cache-Control']).to match(/public/)
|
111
111
|
|
112
112
|
expect(last_response.headers['Content-Type']).to eq('application/json')
|
113
|
+
expect(last_response['X-Content-Type-Options']).to eq('nosniff')
|
114
|
+
|
113
115
|
parsed = JSON.load(last_response.body)
|
114
116
|
expect(parsed['errors'].to_s).to include("Unfortunate upstream response")
|
115
117
|
end
|
116
118
|
end
|
117
119
|
|
118
120
|
it 'sets very far caching headers and an ETag, and returns a 304 if any ETag is set' do
|
119
|
-
uri =
|
121
|
+
uri = URI.parse(public_url)
|
120
122
|
ImageVise.add_allowed_host!(uri.host)
|
121
123
|
ImageVise.add_secret_key!('l33tness')
|
122
124
|
|
@@ -140,7 +142,7 @@ describe ImageVise::RenderEngine do
|
|
140
142
|
end
|
141
143
|
|
142
144
|
it 'allows for setting a custom cache lifetime' do
|
143
|
-
uri =
|
145
|
+
uri = URI.parse(public_url)
|
144
146
|
ImageVise.add_allowed_host!(uri.host)
|
145
147
|
ImageVise.add_secret_key!('l33tness')
|
146
148
|
|
@@ -156,7 +158,7 @@ describe ImageVise::RenderEngine do
|
|
156
158
|
end
|
157
159
|
|
158
160
|
it 'uses the correct default cache lifetime if one is not specified' do
|
159
|
-
uri =
|
161
|
+
uri = URI.parse(public_url)
|
160
162
|
ImageVise.add_allowed_host!(uri.host)
|
161
163
|
ImageVise.add_secret_key!('l33tness')
|
162
164
|
|
@@ -171,7 +173,7 @@ describe ImageVise::RenderEngine do
|
|
171
173
|
end
|
172
174
|
|
173
175
|
it 'responds with an image that passes through all the processing steps' do
|
174
|
-
uri =
|
176
|
+
uri = URI.parse(public_url)
|
175
177
|
ImageVise.add_allowed_host!(uri.host)
|
176
178
|
ImageVise.add_secret_key!('l33tness')
|
177
179
|
|
@@ -182,6 +184,8 @@ describe ImageVise::RenderEngine do
|
|
182
184
|
expect(last_response.status).to eq(200)
|
183
185
|
|
184
186
|
expect(last_response.headers['Content-Type']).to eq('image/jpeg')
|
187
|
+
expect(last_response['X-Content-Type-Options']).to eq('nosniff')
|
188
|
+
|
185
189
|
expect(last_response.headers).to have_key('Content-Length')
|
186
190
|
parsed_image = Magick::Image.from_blob(last_response.body)[0]
|
187
191
|
expect(parsed_image.columns).to eq(10)
|
@@ -212,7 +216,7 @@ describe ImageVise::RenderEngine do
|
|
212
216
|
end
|
213
217
|
|
214
218
|
it 'calls all of the internal methods during execution' do
|
215
|
-
uri =
|
219
|
+
uri = URI.parse(public_url)
|
216
220
|
ImageVise.add_allowed_host!(uri.host)
|
217
221
|
ImageVise.add_secret_key!('l33tness')
|
218
222
|
|
@@ -245,7 +249,7 @@ describe ImageVise::RenderEngine do
|
|
245
249
|
it 'URI-decodes the path in a file:// URL for a file with a Unicode path' do
|
246
250
|
utf8_file_path = File.dirname(test_image_path) + '/картинка.jpg'
|
247
251
|
FileUtils.cp_r(test_image_path, utf8_file_path)
|
248
|
-
uri = 'file://' +
|
252
|
+
uri = 'file://' + ImageVise::FetcherFile.encode_file_uri_path(utf8_file_path)
|
249
253
|
|
250
254
|
ImageVise.allow_filesystem_source!(File.dirname(test_image_path) + '/*.*')
|
251
255
|
ImageVise.add_secret_key!('l33tness')
|
@@ -260,7 +264,7 @@ describe ImageVise::RenderEngine do
|
|
260
264
|
end
|
261
265
|
|
262
266
|
it 'forbids a request with an extra GET param' do
|
263
|
-
uri = 'file://' +
|
267
|
+
uri = 'file://' + ImageVise::FetcherFile.encode_file_uri_path(test_image_path)
|
264
268
|
|
265
269
|
p = ImageVise::Pipeline.new.fit_crop(width: 10, height: 10, gravity: 'c')
|
266
270
|
image_request = ImageVise::ImageRequest.new(src_url: uri.to_s, pipeline: p)
|
@@ -271,7 +275,7 @@ describe ImageVise::RenderEngine do
|
|
271
275
|
end
|
272
276
|
|
273
277
|
it 'returns the processed JPEG image as a PNG if it had to get an alpha channel during processing' do
|
274
|
-
uri =
|
278
|
+
uri = URI.parse(public_url)
|
275
279
|
ImageVise.add_allowed_host!(uri.host)
|
276
280
|
ImageVise.add_secret_key!('l33tness')
|
277
281
|
|
@@ -288,7 +292,7 @@ describe ImageVise::RenderEngine do
|
|
288
292
|
end
|
289
293
|
|
290
294
|
it 'permits a PSD file by default' do
|
291
|
-
uri =
|
295
|
+
uri = URI.parse(public_url_psd)
|
292
296
|
ImageVise.add_allowed_host!(uri.host)
|
293
297
|
ImageVise.add_secret_key!('l33tness')
|
294
298
|
|
@@ -300,7 +304,7 @@ describe ImageVise::RenderEngine do
|
|
300
304
|
end
|
301
305
|
|
302
306
|
it 'destroys all the loaded PSD layers' do
|
303
|
-
uri =
|
307
|
+
uri = URI.parse(public_url_psd_multilayer)
|
304
308
|
ImageVise.add_allowed_host!(uri.host)
|
305
309
|
ImageVise.add_secret_key!('l33tness')
|
306
310
|
|
@@ -320,7 +324,7 @@ describe ImageVise::RenderEngine do
|
|
320
324
|
end
|
321
325
|
|
322
326
|
it 'outputs a converted TIFF file as a PNG' do
|
323
|
-
uri =
|
327
|
+
uri = URI.parse(public_url_tif)
|
324
328
|
ImageVise.add_allowed_host!(uri.host)
|
325
329
|
ImageVise.add_secret_key!('l33tness')
|
326
330
|
|
@@ -337,7 +341,7 @@ describe ImageVise::RenderEngine do
|
|
337
341
|
end
|
338
342
|
|
339
343
|
it 'processes a 1.5mb PSD with a forced conversion to JPEG' do
|
340
|
-
uri =
|
344
|
+
uri = URI.parse(public_url_psd)
|
341
345
|
ImageVise.add_allowed_host!(uri.host)
|
342
346
|
ImageVise.add_secret_key!('1337ness')
|
343
347
|
|
@@ -353,7 +357,7 @@ describe ImageVise::RenderEngine do
|
|
353
357
|
end
|
354
358
|
|
355
359
|
it 'sets a customized Expires: cache lifetime set via the pipeline' do
|
356
|
-
uri =
|
360
|
+
uri = URI.parse(public_url_psd)
|
357
361
|
ImageVise.add_allowed_host!(uri.host)
|
358
362
|
ImageVise.add_secret_key!('1337ness')
|
359
363
|
|
@@ -366,7 +370,7 @@ describe ImageVise::RenderEngine do
|
|
366
370
|
end
|
367
371
|
|
368
372
|
it 'converts a PNG into a JPG applying a background fill' do
|
369
|
-
uri =
|
373
|
+
uri = URI.parse(public_url_png_transparency)
|
370
374
|
ImageVise.add_allowed_host!(uri.host)
|
371
375
|
ImageVise.add_secret_key!('h00ray')
|
372
376
|
|
data/spec/spec_helper.rb
CHANGED
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.
|
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:
|
11
|
+
date: 2021-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: patron
|
@@ -30,28 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
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'
|
40
|
+
version: '3'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rack
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -76,22 +62,16 @@ dependencies:
|
|
76
62
|
name: format_parser
|
77
63
|
requirement: !ruby/object:Gem::Requirement
|
78
64
|
requirements:
|
79
|
-
- - "
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: 0.14.0
|
82
|
-
- - "<"
|
65
|
+
- - "~>"
|
83
66
|
- !ruby/object:Gem::Version
|
84
|
-
version: '
|
67
|
+
version: '0.25'
|
85
68
|
type: :runtime
|
86
69
|
prerelease: false
|
87
70
|
version_requirements: !ruby/object:Gem::Requirement
|
88
71
|
requirements:
|
89
|
-
- - "
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: 0.14.0
|
92
|
-
- - "<"
|
72
|
+
- - "~>"
|
93
73
|
- !ruby/object:Gem::Version
|
94
|
-
version: '
|
74
|
+
version: '0.25'
|
95
75
|
- !ruby/object:Gem::Dependency
|
96
76
|
name: measurometer
|
97
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,20 +100,6 @@ dependencies:
|
|
120
100
|
- - "~>"
|
121
101
|
- !ruby/object:Gem::Version
|
122
102
|
version: '1'
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: bundler
|
125
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
-
requirements:
|
127
|
-
- - "~>"
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: '1.7'
|
130
|
-
type: :development
|
131
|
-
prerelease: false
|
132
|
-
version_requirements: !ruby/object:Gem::Requirement
|
133
|
-
requirements:
|
134
|
-
- - "~>"
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: '1.7'
|
137
103
|
- !ruby/object:Gem::Dependency
|
138
104
|
name: rake
|
139
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,7 +143,7 @@ dependencies:
|
|
177
143
|
- !ruby/object:Gem::Version
|
178
144
|
version: '3'
|
179
145
|
- !ruby/object:Gem::Dependency
|
180
|
-
name:
|
146
|
+
name: strenv
|
181
147
|
requirement: !ruby/object:Gem::Requirement
|
182
148
|
requirements:
|
183
149
|
- - ">="
|
@@ -191,7 +157,7 @@ dependencies:
|
|
191
157
|
- !ruby/object:Gem::Version
|
192
158
|
version: '0'
|
193
159
|
- !ruby/object:Gem::Dependency
|
194
|
-
name:
|
160
|
+
name: simplecov
|
195
161
|
requirement: !ruby/object:Gem::Requirement
|
196
162
|
requirements:
|
197
163
|
- - ">="
|
@@ -205,7 +171,7 @@ dependencies:
|
|
205
171
|
- !ruby/object:Gem::Version
|
206
172
|
version: '0'
|
207
173
|
- !ruby/object:Gem::Dependency
|
208
|
-
name:
|
174
|
+
name: pry
|
209
175
|
requirement: !ruby/object:Gem::Requirement
|
210
176
|
requirements:
|
211
177
|
- - ">="
|
@@ -219,7 +185,7 @@ dependencies:
|
|
219
185
|
- !ruby/object:Gem::Version
|
220
186
|
version: '0'
|
221
187
|
- !ruby/object:Gem::Dependency
|
222
|
-
name:
|
188
|
+
name: webrick
|
223
189
|
requirement: !ruby/object:Gem::Requirement
|
224
190
|
requirements:
|
225
191
|
- - ">="
|
@@ -241,6 +207,7 @@ extra_rdoc_files: []
|
|
241
207
|
files:
|
242
208
|
- ".gitignore"
|
243
209
|
- ".travis.yml"
|
210
|
+
- CHANGELOG.md
|
244
211
|
- DEVELOPMENT.md
|
245
212
|
- Gemfile
|
246
213
|
- LICENSE.txt
|
@@ -308,7 +275,7 @@ licenses:
|
|
308
275
|
- MIT
|
309
276
|
metadata:
|
310
277
|
allowed_push_host: https://rubygems.org
|
311
|
-
post_install_message:
|
278
|
+
post_install_message:
|
312
279
|
rdoc_options: []
|
313
280
|
require_paths:
|
314
281
|
- lib
|
@@ -316,16 +283,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
316
283
|
requirements:
|
317
284
|
- - ">="
|
318
285
|
- !ruby/object:Gem::Version
|
319
|
-
version: '
|
286
|
+
version: '2.5'
|
320
287
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
321
288
|
requirements:
|
322
289
|
- - ">="
|
323
290
|
- !ruby/object:Gem::Version
|
324
291
|
version: '0'
|
325
292
|
requirements: []
|
326
|
-
|
327
|
-
|
328
|
-
signing_key:
|
293
|
+
rubygems_version: 3.2.22
|
294
|
+
signing_key:
|
329
295
|
specification_version: 4
|
330
296
|
summary: Runtime thumbnailing proxy
|
331
297
|
test_files: []
|