imgproxy 1.0.6 → 2.0.1
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 +4 -4
- data/README.md +236 -92
- data/lib/imgproxy/builder.rb +54 -37
- data/lib/imgproxy/config.rb +96 -25
- data/lib/imgproxy/extensions/active_storage.rb +10 -0
- data/lib/imgproxy/extensions/shrine.rb +10 -0
- data/lib/imgproxy/options.rb +87 -72
- data/lib/imgproxy/options_aliases.rb +43 -0
- data/lib/imgproxy/options_casters/adjust.rb +22 -0
- data/lib/imgproxy/options_casters/array.rb +12 -0
- data/lib/imgproxy/options_casters/base64.rb +12 -0
- data/lib/imgproxy/options_casters/bool.rb +12 -0
- data/lib/imgproxy/options_casters/crop.rb +23 -0
- data/lib/imgproxy/options_casters/extend.rb +26 -0
- data/lib/imgproxy/options_casters/float.rb +16 -0
- data/lib/imgproxy/options_casters/gif_options.rb +21 -0
- data/lib/imgproxy/options_casters/gravity.rb +23 -0
- data/lib/imgproxy/options_casters/group.rb +21 -0
- data/lib/imgproxy/options_casters/integer.rb +10 -0
- data/lib/imgproxy/options_casters/jpeg_options.rb +26 -0
- data/lib/imgproxy/options_casters/png_options.rb +23 -0
- data/lib/imgproxy/options_casters/resize.rb +21 -0
- data/lib/imgproxy/options_casters/size.rb +24 -0
- data/lib/imgproxy/options_casters/string.rb +10 -0
- data/lib/imgproxy/options_casters/trim.rb +28 -0
- data/lib/imgproxy/options_casters/watermark.rb +30 -0
- data/lib/imgproxy/trim_array.rb +11 -0
- data/lib/imgproxy/url_adapters/active_storage.rb +25 -0
- data/lib/imgproxy/url_adapters/shrine.rb +15 -5
- data/lib/imgproxy/url_adapters.rb +0 -4
- data/lib/imgproxy/version.rb +1 -1
- data/lib/imgproxy.rb +78 -38
- metadata +69 -24
- data/lib/imgproxy/url_adapters/active_storage_gcs.rb +0 -31
- data/lib/imgproxy/url_adapters/active_storage_s3.rb +0 -23
- data/lib/imgproxy/url_adapters/shrine_s3.rb +0 -20
@@ -0,0 +1,23 @@
|
|
1
|
+
require "imgproxy/trim_array"
|
2
|
+
require "imgproxy/options_casters/float"
|
3
|
+
require "imgproxy/options_casters/gravity"
|
4
|
+
|
5
|
+
module Imgproxy
|
6
|
+
module OptionsCasters
|
7
|
+
# Casts crop option
|
8
|
+
module Crop
|
9
|
+
using TrimArray
|
10
|
+
|
11
|
+
def self.cast(raw)
|
12
|
+
return raw unless raw.is_a?(Hash)
|
13
|
+
return unless raw[:width] || raw[:height]
|
14
|
+
|
15
|
+
[
|
16
|
+
Imgproxy::OptionsCasters::Float.cast(raw[:width]) || 0,
|
17
|
+
Imgproxy::OptionsCasters::Float.cast(raw[:height]) || 0,
|
18
|
+
Imgproxy::OptionsCasters::Gravity.cast(raw[:gravity]),
|
19
|
+
].trim!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "imgproxy/options_casters/group"
|
2
|
+
require "imgproxy/options_casters/bool"
|
3
|
+
require "imgproxy/options_casters/gravity"
|
4
|
+
|
5
|
+
module Imgproxy
|
6
|
+
module OptionsCasters
|
7
|
+
# Casts extend option
|
8
|
+
module Extend
|
9
|
+
CASTER = Imgproxy::OptionsCasters::Group.new(
|
10
|
+
extend: Imgproxy::OptionsCasters::Bool,
|
11
|
+
gravity: Imgproxy::OptionsCasters::Gravity,
|
12
|
+
).freeze
|
13
|
+
|
14
|
+
def self.cast(raw)
|
15
|
+
# Allow extend to be just a boolean
|
16
|
+
return Imgproxy::OptionsCasters::Bool.cast(raw) if [true, false].include?(raw)
|
17
|
+
|
18
|
+
return raw unless raw.is_a?(Hash)
|
19
|
+
return if raw[:extend].nil?
|
20
|
+
|
21
|
+
values = CASTER.cast(raw)
|
22
|
+
values[0].zero? ? 0 : values
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Imgproxy
|
2
|
+
module OptionsCasters
|
3
|
+
# Casts float option
|
4
|
+
module Float
|
5
|
+
ZERO_RE = /\.0+/.freeze
|
6
|
+
|
7
|
+
def self.cast(raw)
|
8
|
+
raw&.to_f&.yield_self do |f|
|
9
|
+
# Convert integral value to Integer so to_s won't give us trailing zero
|
10
|
+
i = f.to_i
|
11
|
+
i == f ? i : f
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "imgproxy/options_casters/group"
|
2
|
+
require "imgproxy/options_casters/bool"
|
3
|
+
|
4
|
+
module Imgproxy
|
5
|
+
module OptionsCasters
|
6
|
+
# Casts gif_options option
|
7
|
+
module GifOptions
|
8
|
+
CASTER = Imgproxy::OptionsCasters::Group.new(
|
9
|
+
optimize_frames: Imgproxy::OptionsCasters::Bool,
|
10
|
+
optimize_transparency: Imgproxy::OptionsCasters::Bool,
|
11
|
+
).freeze
|
12
|
+
|
13
|
+
def self.cast(raw)
|
14
|
+
return raw unless raw.is_a?(Hash)
|
15
|
+
|
16
|
+
values = CASTER.cast(raw)
|
17
|
+
values.empty? ? nil : values
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "imgproxy/options_casters/group"
|
2
|
+
require "imgproxy/options_casters/string"
|
3
|
+
require "imgproxy/options_casters/float"
|
4
|
+
|
5
|
+
module Imgproxy
|
6
|
+
module OptionsCasters
|
7
|
+
# Casts gravity option
|
8
|
+
module Gravity
|
9
|
+
CASTER = Imgproxy::OptionsCasters::Group.new(
|
10
|
+
type: Imgproxy::OptionsCasters::String,
|
11
|
+
x_offset: Imgproxy::OptionsCasters::Float,
|
12
|
+
y_offset: Imgproxy::OptionsCasters::Float,
|
13
|
+
).freeze
|
14
|
+
|
15
|
+
def self.cast(raw)
|
16
|
+
return raw unless raw.is_a?(Hash)
|
17
|
+
return unless raw[:type]
|
18
|
+
|
19
|
+
CASTER.cast(raw)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "imgproxy/trim_array"
|
2
|
+
|
3
|
+
module Imgproxy
|
4
|
+
module OptionsCasters
|
5
|
+
# Casts group of options and trim nils from the end
|
6
|
+
class Group
|
7
|
+
using TrimArray
|
8
|
+
|
9
|
+
def initialize(extractors)
|
10
|
+
@extractors = extractors
|
11
|
+
end
|
12
|
+
|
13
|
+
def cast(raw)
|
14
|
+
values = @extractors.map do |key, extractor|
|
15
|
+
extractor.cast(raw[key])
|
16
|
+
end
|
17
|
+
values.trim!
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -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,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
|
@@ -15,8 +15,33 @@ 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://#{image.service.bucket.name}/#{image.key}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def use_s3_url(image)
|
31
|
+
config.use_s3_urls && image.service.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 && image.service.is_a?(::ActiveStorage::Service::GCSService)
|
40
|
+
end
|
41
|
+
|
42
|
+
def config
|
43
|
+
Imgproxy.config
|
44
|
+
end
|
20
45
|
end
|
21
46
|
end
|
22
47
|
end
|
@@ -8,19 +8,29 @@ 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] =
|
19
|
+
opts[:host] = Imgproxy.config.shrine_host if Imgproxy.config.shrine_host
|
22
20
|
image.url(opts)
|
23
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)
|
33
|
+
end
|
24
34
|
end
|
25
35
|
end
|
26
36
|
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.
|
data/lib/imgproxy/version.rb
CHANGED
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.
|
23
|
-
# config.
|
22
|
+
# config.key = "your_key"
|
23
|
+
# config.salt = "your_salt"
|
24
24
|
# config.use_short_options = true
|
25
25
|
# end
|
26
26
|
#
|
@@ -38,72 +38,112 @@ 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] :gravity
|
55
|
-
# @option options [
|
56
|
-
# @option options [
|
70
|
+
# @option options [Hash|Array|Boolean|String] :extend
|
71
|
+
# @option options [Hash|Array|String] :gravity
|
72
|
+
# @option options [Hash|Array|String] :crop
|
73
|
+
# @option options [Array] :padding
|
74
|
+
# @option options [Hash|Array|String] :trim
|
75
|
+
# @option options [Integer] :rotate
|
57
76
|
# @option options [Integer] :quality
|
58
|
-
# @option options [
|
77
|
+
# @option options [Integer] :max_bytes
|
78
|
+
# @option options [Array|String] :background
|
79
|
+
# @option options [Float] :background_alpha supported only by imgproxy pro
|
80
|
+
# @option options [Hash|Array|String] :adjust
|
81
|
+
# @option options [Integer] :brightness supported only by imgproxy pro
|
82
|
+
# @option options [Float] :contrast supported only by imgproxy pro
|
83
|
+
# @option options [Float] :saturation supported only by imgproxy pro
|
59
84
|
# @option options [Float] :blur
|
60
85
|
# @option options [Float] :sharpen
|
61
|
-
# @option options [
|
62
|
-
# @option options [String] :
|
63
|
-
# @option options [
|
64
|
-
# @option options [
|
65
|
-
# @option options [
|
86
|
+
# @option options [Integer] :pixelate supported only by imgproxy pro
|
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
|
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
|
66
96
|
# @option options [Array] :preset
|
67
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
|
68
102
|
# @option options [String] :format
|
69
103
|
# @option options [Boolean] :use_short_options
|
70
|
-
# @
|
71
|
-
#
|
104
|
+
# @option options [Boolean] :base64_encode_urls
|
105
|
+
# @option options [Boolean] :escape_plain_url
|
106
|
+
# @see https://docs.imgproxy.net/#/generating_the_url_advanced?id=processing-options
|
107
|
+
# Available imgproxy URL processing options and their arguments
|
72
108
|
def url_for(image, options = {})
|
73
109
|
Imgproxy::Builder.new(options).url_for(image)
|
74
110
|
end
|
75
111
|
|
76
|
-
#
|
77
|
-
# and adds URL adapters for ActiveStorage
|
112
|
+
# Genrates imgproxy info URL. Supported only by imgproxy pro
|
78
113
|
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
# @
|
82
|
-
# @param
|
83
|
-
|
84
|
-
|
85
|
-
|
114
|
+
# Imgproxy.info_url_for("http://images.example.com/images/image.jpg")
|
115
|
+
#
|
116
|
+
# @return [String] imgproxy info URL
|
117
|
+
# @param [String,URI, Object] image Source image URL or object applicable for
|
118
|
+
# the configured URL adapters
|
119
|
+
# @param [Hash] options Processing options
|
120
|
+
# @option options [Boolean] :base64_encode_urls
|
121
|
+
# @option options [Boolean] :escape_plain_url
|
122
|
+
def info_url_for(image, options = {})
|
123
|
+
Imgproxy::Builder.new(options).info_url_for(image)
|
124
|
+
end
|
86
125
|
|
87
|
-
|
126
|
+
# Extends +ActiveStorage::Blob+ with {Imgproxy::Extensions::ActiveStorage.imgproxy_url} method
|
127
|
+
# and adds URL adapters for ActiveStorage
|
128
|
+
def extend_active_storage!
|
129
|
+
return unless defined?(ActiveSupport) && ActiveSupport.respond_to?(:on_load)
|
88
130
|
|
89
|
-
|
90
|
-
|
91
|
-
url_adapters.add(Imgproxy::UrlAdapters::ActiveStorage.new)
|
131
|
+
ActiveSupport.on_load(:active_storage_blob) do
|
132
|
+
::ActiveStorage::Blob.include Imgproxy::Extensions::ActiveStorage
|
133
|
+
Imgproxy.config.url_adapters.add(Imgproxy::UrlAdapters::ActiveStorage.new)
|
92
134
|
end
|
93
135
|
end
|
94
136
|
|
95
|
-
# Extends Shrine::UploadedFile with {Imgproxy::Extensions::Shrine.imgproxy_url} method
|
137
|
+
# Extends +Shrine::UploadedFile+ with {Imgproxy::Extensions::Shrine.imgproxy_url} method
|
96
138
|
# and adds URL adapters for Shrine
|
97
|
-
|
98
|
-
|
99
|
-
# @param use_s3 [Boolean] enable Amazon S3 source URLs
|
100
|
-
def extend_shrine!(host: nil, use_s3: false)
|
101
|
-
::Shrine::UploadedFile.include Imgproxy::Extensions::Shrine
|
102
|
-
|
103
|
-
url_adapters = Imgproxy.config.url_adapters
|
139
|
+
def extend_shrine!
|
140
|
+
return unless defined?(::Shrine::UploadedFile)
|
104
141
|
|
105
|
-
|
106
|
-
url_adapters.add(Imgproxy::UrlAdapters::Shrine.new
|
142
|
+
::Shrine::UploadedFile.include Imgproxy::Extensions::Shrine
|
143
|
+
Imgproxy.config.url_adapters.add(Imgproxy::UrlAdapters::Shrine.new)
|
107
144
|
end
|
108
145
|
end
|
109
146
|
end
|
147
|
+
|
148
|
+
Imgproxy.extend_active_storage!
|
149
|
+
Imgproxy.extend_shrine!
|