imgproxy 1.2.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +238 -113
  3. data/lib/imgproxy/builder.rb +47 -55
  4. data/lib/imgproxy/config.rb +96 -30
  5. data/lib/imgproxy/extensions/active_storage.rb +10 -0
  6. data/lib/imgproxy/extensions/shrine.rb +10 -0
  7. data/lib/imgproxy/options.rb +86 -120
  8. data/lib/imgproxy/options_aliases.rb +45 -0
  9. data/lib/imgproxy/options_casters/adjust.rb +22 -0
  10. data/lib/imgproxy/options_casters/array.rb +12 -0
  11. data/lib/imgproxy/options_casters/base64.rb +12 -0
  12. data/lib/imgproxy/options_casters/bool.rb +12 -0
  13. data/lib/imgproxy/options_casters/crop.rb +23 -0
  14. data/lib/imgproxy/options_casters/extend.rb +26 -0
  15. data/lib/imgproxy/options_casters/float.rb +16 -0
  16. data/lib/imgproxy/options_casters/gif_options.rb +21 -0
  17. data/lib/imgproxy/options_casters/gravity.rb +23 -0
  18. data/lib/imgproxy/options_casters/group.rb +21 -0
  19. data/lib/imgproxy/options_casters/integer.rb +10 -0
  20. data/lib/imgproxy/options_casters/jpeg_options.rb +26 -0
  21. data/lib/imgproxy/options_casters/png_options.rb +23 -0
  22. data/lib/imgproxy/options_casters/resize.rb +21 -0
  23. data/lib/imgproxy/options_casters/size.rb +24 -0
  24. data/lib/imgproxy/options_casters/string.rb +10 -0
  25. data/lib/imgproxy/options_casters/trim.rb +28 -0
  26. data/lib/imgproxy/options_casters/watermark.rb +30 -0
  27. data/lib/imgproxy/trim_array.rb +11 -0
  28. data/lib/imgproxy/url_adapters/active_storage.rb +35 -0
  29. data/lib/imgproxy/url_adapters/shrine.rb +16 -6
  30. data/lib/imgproxy/url_adapters.rb +0 -4
  31. data/lib/imgproxy/version.rb +1 -1
  32. data/lib/imgproxy.rb +72 -50
  33. metadata +69 -23
  34. data/lib/imgproxy/url_adapters/active_storage_gcs.rb +0 -31
  35. data/lib/imgproxy/url_adapters/active_storage_s3.rb +0 -23
  36. data/lib/imgproxy/url_adapters/shrine_s3.rb +0 -21
@@ -0,0 +1,26 @@
1
+ require "imgproxy/options_casters/group"
2
+ require "imgproxy/options_casters/bool"
3
+ require "imgproxy/options_casters/integer"
4
+
5
+ module Imgproxy
6
+ module OptionsCasters
7
+ # Casts jpeg_options option
8
+ module JpegOptions
9
+ CASTER = Imgproxy::OptionsCasters::Group.new(
10
+ progressive: Imgproxy::OptionsCasters::Bool,
11
+ no_subsample: Imgproxy::OptionsCasters::Bool,
12
+ trellis_quant: Imgproxy::OptionsCasters::Bool,
13
+ overshoot_deringing: Imgproxy::OptionsCasters::Bool,
14
+ optimize_scans: Imgproxy::OptionsCasters::Bool,
15
+ quant_table: Imgproxy::OptionsCasters::Integer,
16
+ ).freeze
17
+
18
+ def self.cast(raw)
19
+ return raw unless raw.is_a?(Hash)
20
+
21
+ values = CASTER.cast(raw)
22
+ values.empty? ? nil : values
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ require "imgproxy/options_casters/group"
2
+ require "imgproxy/options_casters/bool"
3
+ require "imgproxy/options_casters/integer"
4
+
5
+ module Imgproxy
6
+ module OptionsCasters
7
+ # Casts png_options option
8
+ module PngOptions
9
+ CASTER = Imgproxy::OptionsCasters::Group.new(
10
+ interlaced: Imgproxy::OptionsCasters::Bool,
11
+ quantize: Imgproxy::OptionsCasters::Bool,
12
+ quantization_colors: Imgproxy::OptionsCasters::Integer,
13
+ ).freeze
14
+
15
+ def self.cast(raw)
16
+ return raw unless raw.is_a?(Hash)
17
+
18
+ values = CASTER.cast(raw)
19
+ values.empty? ? nil : values
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ require "imgproxy/trim_array"
2
+ require "imgproxy/options_casters/string"
3
+ require "imgproxy/options_casters/size"
4
+
5
+ module Imgproxy
6
+ module OptionsCasters
7
+ # Casts resize option
8
+ module Resize
9
+ using TrimArray
10
+
11
+ def self.cast(raw)
12
+ return raw unless raw.is_a?(Hash)
13
+
14
+ [
15
+ Imgproxy::OptionsCasters::String.cast(raw[:resizing_type]) || "fit",
16
+ *Imgproxy::OptionsCasters::Size.cast(raw),
17
+ ].trim!
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require "imgproxy/trim_array"
2
+ require "imgproxy/options_casters/integer"
3
+ require "imgproxy/options_casters/bool"
4
+ require "imgproxy/options_casters/extend"
5
+
6
+ module Imgproxy
7
+ module OptionsCasters
8
+ # Casts size option
9
+ module Size
10
+ using TrimArray
11
+
12
+ def self.cast(raw)
13
+ return raw unless raw.is_a?(Hash)
14
+
15
+ [
16
+ Imgproxy::OptionsCasters::Integer.cast(raw[:width]) || 0,
17
+ Imgproxy::OptionsCasters::Integer.cast(raw[:height]) || 0,
18
+ Imgproxy::OptionsCasters::Bool.cast(raw[:enlarge]),
19
+ Imgproxy::OptionsCasters::Extend.cast(raw[:extend]),
20
+ ].trim!
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ module Imgproxy
2
+ module OptionsCasters
3
+ # Casts string option
4
+ module String
5
+ def self.cast(raw)
6
+ raw&.to_s
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,28 @@
1
+ require "imgproxy/options_casters/group"
2
+ require "imgproxy/options_casters/float"
3
+ require "imgproxy/options_casters/string"
4
+ require "imgproxy/options_casters/bool"
5
+
6
+ module Imgproxy
7
+ module OptionsCasters
8
+ # Casts trim option
9
+ module Trim
10
+ CASTER = Imgproxy::OptionsCasters::Group.new(
11
+ threshold: Imgproxy::OptionsCasters::Float,
12
+ color: Imgproxy::OptionsCasters::String,
13
+ equal_hor: Imgproxy::OptionsCasters::Bool,
14
+ equal_ver: Imgproxy::OptionsCasters::Bool,
15
+ ).freeze
16
+
17
+ def self.cast(raw)
18
+ # Allow trim to be just a numeric
19
+ return Imgproxy::OptionsCasters::Float.cast(raw) if raw.is_a?(Numeric)
20
+
21
+ return raw unless raw.is_a?(Hash)
22
+ return unless raw[:threshold]
23
+
24
+ CASTER.cast(raw)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ require "imgproxy/options_casters/group"
2
+ require "imgproxy/options_casters/float"
3
+ require "imgproxy/options_casters/string"
4
+ require "imgproxy/options_casters/integer"
5
+
6
+ module Imgproxy
7
+ module OptionsCasters
8
+ # Casts string option
9
+ module Watermark
10
+ CASTER = Imgproxy::OptionsCasters::Group.new(
11
+ opacity: Imgproxy::OptionsCasters::Float,
12
+ position: Imgproxy::OptionsCasters::String,
13
+ x_offset: Imgproxy::OptionsCasters::Integer,
14
+ y_offset: Imgproxy::OptionsCasters::Integer,
15
+ scale: Imgproxy::OptionsCasters::Float,
16
+ ).freeze
17
+
18
+ def self.cast(raw)
19
+ # Allow watermark to be just a numeric
20
+ return Imgproxy::OptionsCasters::Float.cast(raw) if raw.is_a?(Numeric)
21
+
22
+ return raw unless raw.is_a?(Hash)
23
+ return unless raw[:opacity]
24
+
25
+ values = CASTER.cast(raw)
26
+ values[0].zero? ? 0 : values
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ module Imgproxy
2
+ # `Array.trim!` refinement
3
+ module TrimArray
4
+ refine Array do
5
+ def trim!
6
+ delete_at(-1) while !empty? && last.nil?
7
+ self
8
+ end
9
+ end
10
+ end
11
+ end
@@ -15,8 +15,43 @@ module Imgproxy
15
15
  end
16
16
 
17
17
  def url(image)
18
+ return s3_url(image) if use_s3_url(image)
19
+ return gcs_url(image) if use_gcs_url(image)
20
+
18
21
  Rails.application.routes.url_helpers.url_for(image)
19
22
  end
23
+
24
+ private
25
+
26
+ def s3_url(image)
27
+ "s3://#{service(image).bucket.name}/#{image.key}"
28
+ end
29
+
30
+ def use_s3_url(image)
31
+ config.use_s3_urls && service(image).is_a?(::ActiveStorage::Service::S3Service)
32
+ end
33
+
34
+ def gcs_url(image)
35
+ "gs://#{config.gcs_bucket}/#{image.key}"
36
+ end
37
+
38
+ def use_gcs_url(image)
39
+ config.use_gcs_urls && service(image).is_a?(::ActiveStorage::Service::GCSService)
40
+ end
41
+
42
+ def service(image)
43
+ unwrap_service(image.service)
44
+ end
45
+
46
+ def unwrap_service(service)
47
+ return service unless defined?(::ActiveStorage::Service::MirrorService)
48
+ return service unless service.is_a?(::ActiveStorage::Service::MirrorService)
49
+ unwrap_service(service.primary)
50
+ end
51
+
52
+ def config
53
+ Imgproxy.config
54
+ end
20
55
  end
21
56
  end
22
57
  end
@@ -8,18 +8,28 @@ module Imgproxy
8
8
  #
9
9
  # Imgproxy.url_for(user.avatar)
10
10
  class Shrine
11
- def initialize(host: nil)
12
- @host = host
13
- end
14
-
15
11
  def applicable?(image)
16
12
  image.is_a?(::Shrine::UploadedFile)
17
13
  end
18
14
 
19
15
  def url(image)
16
+ return s3_url(image) if use_s3_url(image)
17
+
20
18
  opts = {}
21
- opts[:host] = @host if @host
22
- image.url(opts)
19
+ opts[:host] = Imgproxy.config.shrine_host if Imgproxy.config.shrine_host
20
+ image.url(**opts)
21
+ end
22
+
23
+ private
24
+
25
+ def s3_url(image)
26
+ path = [*image.storage.prefix, image.id].join("/")
27
+ "s3://#{image.storage.bucket.name}/#{path}"
28
+ end
29
+
30
+ def use_s3_url(image)
31
+ Imgproxy.config.use_s3_urls &&
32
+ image.storage.is_a?(::Shrine::Storage::S3)
23
33
  end
24
34
  end
25
35
  end
@@ -1,9 +1,5 @@
1
1
  require "imgproxy/url_adapters/active_storage"
2
- require "imgproxy/url_adapters/active_storage_s3"
3
- require "imgproxy/url_adapters/active_storage_gcs"
4
-
5
2
  require "imgproxy/url_adapters/shrine"
6
- require "imgproxy/url_adapters/shrine_s3"
7
3
 
8
4
  module Imgproxy
9
5
  # URL adapters config. Allows to use this gem with ActiveStorage, Shrine, etc.
@@ -1,3 +1,3 @@
1
1
  module Imgproxy
2
- VERSION = "1.2.0".freeze
2
+ VERSION = "2.1.0".freeze
3
3
  end
data/lib/imgproxy.rb CHANGED
@@ -19,8 +19,8 @@ module Imgproxy
19
19
  #
20
20
  # Imgproxy.configure do |config|
21
21
  # config.endpoint = "http://imgproxy.example.com"
22
- # config.hex_key = "your_key"
23
- # config.hex_salt = "your_salt"
22
+ # config.key = "your_key"
23
+ # config.salt = "your_salt"
24
24
  # config.use_short_options = true
25
25
  # end
26
26
  #
@@ -38,92 +38,114 @@ module Imgproxy
38
38
  # width: 500,
39
39
  # height: 400,
40
40
  # resizing_type: :fill,
41
- # sharpen: 0.5
41
+ # sharpen: 0.5,
42
+ # gravity: {
43
+ # type: :soea,
44
+ # x_offset: 10,
45
+ # y_offset: 5,
46
+ # },
47
+ # crop: {
48
+ # width: 2000,
49
+ # height: 1000,
50
+ # gravity: {
51
+ # type: :nowe,
52
+ # x_offset: 20,
53
+ # y_offset: 30,
54
+ # },
55
+ # },
42
56
  # )
43
57
  #
44
58
  # @return [String] imgproxy URL
45
59
  # @param [String,URI, Object] image Source image URL or object applicable for
46
60
  # the configured URL adapters
47
61
  # @param [Hash] options Processing options
62
+ # @option options [Hash|Array|String] :resize
63
+ # @option options [Hash|Array|String] :size
48
64
  # @option options [String] :resizing_type
65
+ # @option options [String] :resizing_algorithm supported only by imgproxy pro
49
66
  # @option options [Integer] :width
50
67
  # @option options [Integer] :height
51
68
  # @option options [Float] :dpr
52
69
  # @option options [Boolean] :enlarge
53
- # @option options [Boolean] :extend
54
- # @option options [String] :extend_gravity
55
- # @option options [Float] :extend_gravity_x
56
- # @option options [Float] :extend_gravity_y
57
- # @option options [String] :gravity
58
- # @option options [Float] :gravity_x
59
- # @option options [Float] :gravity_y
60
- # @option options [Integer] :crop_width
61
- # @option options [Integer] :crop_height
62
- # @option options [String] :crop_gravity
63
- # @option options [Float] :crop_gravity_x
64
- # @option options [Float] :crop_gravity_y
65
- # @option options [Integer] :trim_threshold
66
- # @option options [String] :trim_color
70
+ # @option options [Hash|Array|Boolean|String] :extend
71
+ # @option options [Hash|Array|String] :gravity
72
+ # @option options [Hash|Array|String] :crop
67
73
  # @option options [Array] :padding
68
- # @option options [Boolean] :trim_equal_hor
69
- # @option options [Boolean] :trim_equal_ver
74
+ # @option options [Hash|Array|String] :trim
75
+ # @option options [Integer] :rotate
70
76
  # @option options [Integer] :quality
71
77
  # @option options [Integer] :max_bytes
72
- # @option options [Array] :background
78
+ # @option options [Array|String] :background
79
+ # @option options [Float] :background_alpha supported only by imgproxy pro
80
+ # @option options [Hash|Array|String] :adjust
73
81
  # @option options [Integer] :brightness supported only by imgproxy pro
74
82
  # @option options [Float] :contrast supported only by imgproxy pro
75
83
  # @option options [Float] :saturation supported only by imgproxy pro
76
84
  # @option options [Float] :blur
77
85
  # @option options [Float] :sharpen
78
86
  # @option options [Integer] :pixelate supported only by imgproxy pro
79
- # @option options [Float] :watermark_opacity
80
- # @option options [String] :watermark_position
81
- # @option options [Integer] :watermark_x_offset
82
- # @option options [Integer] :watermark_y_offset
83
- # @option options [Float] :watermark_scale
87
+ # @option options [String] :unsharpening supported only by imgproxy pro
88
+ # @option options [Hash|Array|Float|String] :watermark
89
+ # @option options [String] :watermark_url supported only by imgproxy pro
84
90
  # @option options [String] :style supported only by imgproxy pro
91
+ # @option options [Hash|Array|String] :jpeg_options supported only by imgproxy pro
92
+ # @option options [Hash|Array|String] :png_options supported only by imgproxy pro
93
+ # @option options [Hash|Array|String] :gif_options supported only by imgproxy pro
94
+ # @option options [Integer] :page supported only by imgproxy pro
95
+ # @option options [Integer] :video_thumbnail_second supported only by imgproxy pro
85
96
  # @option options [Array] :preset
86
97
  # @option options [String] :cachebuster
98
+ # @option options [Boolean] :strip_metadata
99
+ # @option options [Boolean] :strip_color_profile
100
+ # @option options [Boolean] :auto_rotate
101
+ # @option options [String] :filename
87
102
  # @option options [String] :format
103
+ # @option options [Boolean] :return_attachment
104
+ # @option options [Integer] :expires
88
105
  # @option options [Boolean] :use_short_options
89
106
  # @option options [Boolean] :base64_encode_urls
90
- # @see https://github.com/DarthSim/imgproxy/blob/master/docs/generating_the_url_advanced.md
91
- # imgproxy URL format documentation
107
+ # @option options [Boolean] :escape_plain_url
108
+ # @see https://docs.imgproxy.net/#/generating_the_url_advanced?id=processing-options
109
+ # Available imgproxy URL processing options and their arguments
92
110
  def url_for(image, options = {})
93
111
  Imgproxy::Builder.new(options).url_for(image)
94
112
  end
95
113
 
96
- # Extends ActiveStorage::Blob with {Imgproxy::Extensions::ActiveStorage.imgproxy_url} method
97
- # and adds URL adapters for ActiveStorage
114
+ # Genrates imgproxy info URL. Supported only by imgproxy pro
98
115
  #
99
- # @return [void]
100
- # @param use_s3 [Boolean] enable Amazon S3 source URLs
101
- # @param use_gcs [Boolean] enable Google Cloud Storage source URLs
102
- # @param gcs_bucket [String] Google Cloud Storage bucket name
103
- def extend_active_storage!(use_s3: false, use_gcs: false, gcs_bucket: nil)
104
- ActiveSupport.on_load(:active_storage_blob) do
105
- ::ActiveStorage::Blob.include Imgproxy::Extensions::ActiveStorage
116
+ # Imgproxy.info_url_for("http://images.example.com/images/image.jpg")
117
+ #
118
+ # @return [String] imgproxy info URL
119
+ # @param [String,URI, Object] image Source image URL or object applicable for
120
+ # the configured URL adapters
121
+ # @param [Hash] options Processing options
122
+ # @option options [Boolean] :base64_encode_urls
123
+ # @option options [Boolean] :escape_plain_url
124
+ def info_url_for(image, options = {})
125
+ Imgproxy::Builder.new(options).info_url_for(image)
126
+ end
106
127
 
107
- url_adapters = Imgproxy.config.url_adapters
128
+ # Extends +ActiveStorage::Blob+ with {Imgproxy::Extensions::ActiveStorage.imgproxy_url} method
129
+ # and adds URL adapters for ActiveStorage
130
+ def extend_active_storage!
131
+ return unless defined?(ActiveSupport) && ActiveSupport.respond_to?(:on_load)
108
132
 
109
- url_adapters.add(Imgproxy::UrlAdapters::ActiveStorageS3.new) if use_s3
110
- url_adapters.add(Imgproxy::UrlAdapters::ActiveStorageGCS.new(gcs_bucket)) if use_gcs
111
- url_adapters.add(Imgproxy::UrlAdapters::ActiveStorage.new)
133
+ ActiveSupport.on_load(:active_storage_blob) do
134
+ ::ActiveStorage::Blob.include Imgproxy::Extensions::ActiveStorage
135
+ Imgproxy.config.url_adapters.add(Imgproxy::UrlAdapters::ActiveStorage.new)
112
136
  end
113
137
  end
114
138
 
115
- # Extends Shrine::UploadedFile with {Imgproxy::Extensions::Shrine.imgproxy_url} method
139
+ # Extends +Shrine::UploadedFile+ with {Imgproxy::Extensions::Shrine.imgproxy_url} method
116
140
  # and adds URL adapters for Shrine
117
- #
118
- # @return [void]
119
- # @param use_s3 [Boolean] enable Amazon S3 source URLs
120
- def extend_shrine!(host: nil, use_s3: false)
121
- ::Shrine::UploadedFile.include Imgproxy::Extensions::Shrine
122
-
123
- url_adapters = Imgproxy.config.url_adapters
141
+ def extend_shrine!
142
+ return unless defined?(::Shrine::UploadedFile)
124
143
 
125
- url_adapters.add(Imgproxy::UrlAdapters::ShrineS3.new) if use_s3
126
- url_adapters.add(Imgproxy::UrlAdapters::Shrine.new(host: host))
144
+ ::Shrine::UploadedFile.include Imgproxy::Extensions::Shrine
145
+ Imgproxy.config.url_adapters.add(Imgproxy::UrlAdapters::Shrine.new)
127
146
  end
128
147
  end
129
148
  end
149
+
150
+ Imgproxy.extend_active_storage!
151
+ Imgproxy.extend_shrine!
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imgproxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Alexandrovich
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-11 00:00:00.000000000 Z
11
+ date: 2022-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: anyway_config
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: benchmark-memory
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: pry-byebug
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -30,70 +58,70 @@ dependencies:
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: 3.9.0
61
+ version: 3.11.0
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: 3.9.0
68
+ version: 3.11.0
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rspec_junit_formatter
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: 0.4.1
75
+ version: 0.5.1
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: 0.4.1
82
+ version: 0.5.1
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rubocop
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: 0.83.0
89
+ version: 1.30.1
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: 0.83.0
96
+ version: 1.30.1
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rubocop-rspec
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: 1.38.1
103
+ version: 2.11.1
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: 1.38.1
110
+ version: 2.11.1
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: aws-sdk-s3
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: 1.64.0
117
+ version: '1.64'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: 1.64.0
124
+ version: '1.64'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: google-cloud-storage
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +142,14 @@ dependencies:
114
142
  requirements:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: '5.2'
145
+ version: 7.0.3
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: '5.2'
152
+ version: 7.0.3
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: shrine
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -164,18 +192,36 @@ files:
164
192
  - lib/imgproxy/extensions/active_storage.rb
165
193
  - lib/imgproxy/extensions/shrine.rb
166
194
  - lib/imgproxy/options.rb
195
+ - lib/imgproxy/options_aliases.rb
196
+ - lib/imgproxy/options_casters/adjust.rb
197
+ - lib/imgproxy/options_casters/array.rb
198
+ - lib/imgproxy/options_casters/base64.rb
199
+ - lib/imgproxy/options_casters/bool.rb
200
+ - lib/imgproxy/options_casters/crop.rb
201
+ - lib/imgproxy/options_casters/extend.rb
202
+ - lib/imgproxy/options_casters/float.rb
203
+ - lib/imgproxy/options_casters/gif_options.rb
204
+ - lib/imgproxy/options_casters/gravity.rb
205
+ - lib/imgproxy/options_casters/group.rb
206
+ - lib/imgproxy/options_casters/integer.rb
207
+ - lib/imgproxy/options_casters/jpeg_options.rb
208
+ - lib/imgproxy/options_casters/png_options.rb
209
+ - lib/imgproxy/options_casters/resize.rb
210
+ - lib/imgproxy/options_casters/size.rb
211
+ - lib/imgproxy/options_casters/string.rb
212
+ - lib/imgproxy/options_casters/trim.rb
213
+ - lib/imgproxy/options_casters/watermark.rb
214
+ - lib/imgproxy/trim_array.rb
167
215
  - lib/imgproxy/url_adapters.rb
168
216
  - lib/imgproxy/url_adapters/active_storage.rb
169
- - lib/imgproxy/url_adapters/active_storage_gcs.rb
170
- - lib/imgproxy/url_adapters/active_storage_s3.rb
171
217
  - lib/imgproxy/url_adapters/shrine.rb
172
- - lib/imgproxy/url_adapters/shrine_s3.rb
173
218
  - lib/imgproxy/version.rb
174
219
  homepage: https://github.com/imgproxy/imgproxy.rb
175
220
  licenses:
176
221
  - MIT
177
- metadata: {}
178
- post_install_message:
222
+ metadata:
223
+ rubygems_mfa_required: 'true'
224
+ post_install_message:
179
225
  rdoc_options: []
180
226
  require_paths:
181
227
  - lib
@@ -183,15 +229,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
229
  requirements:
184
230
  - - ">="
185
231
  - !ruby/object:Gem::Version
186
- version: '2.0'
232
+ version: '2.5'
187
233
  required_rubygems_version: !ruby/object:Gem::Requirement
188
234
  requirements:
189
235
  - - ">="
190
236
  - !ruby/object:Gem::Version
191
237
  version: '0'
192
238
  requirements: []
193
- rubygems_version: 3.0.3
194
- signing_key:
239
+ rubygems_version: 3.3.7
240
+ signing_key:
195
241
  specification_version: 4
196
242
  summary: imgproxy URL generator
197
243
  test_files: []