imgproxy 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +8 -0
  3. data/CHANGELOG.md +74 -0
  4. data/README.md +176 -135
  5. data/UPGRADE.md +136 -0
  6. data/docs/info_options.md +223 -0
  7. data/docs/processing_options.md +724 -0
  8. data/docs/yard/fix_pictures.rb +25 -0
  9. data/docs/yard/github_alerts.rb +16 -0
  10. data/docs/yard/relative_markdown_links.rb +31 -0
  11. data/lib/imgproxy/config.rb +96 -41
  12. data/lib/imgproxy/extensions/active_storage.rb +6 -4
  13. data/lib/imgproxy/extensions/shrine.rb +6 -4
  14. data/lib/imgproxy/option_aliases/info.rb +33 -0
  15. data/lib/imgproxy/option_aliases/processing.rb +74 -0
  16. data/lib/imgproxy/options_builders/base.rb +54 -0
  17. data/lib/imgproxy/options_builders/info.rb +52 -0
  18. data/lib/imgproxy/options_builders/processing.rb +150 -0
  19. data/lib/imgproxy/options_casters/adjust.rb +3 -1
  20. data/lib/imgproxy/options_casters/alpha.rb +27 -0
  21. data/lib/imgproxy/options_casters/array.rb +3 -1
  22. data/lib/imgproxy/options_casters/autoquality.rb +28 -0
  23. data/lib/imgproxy/options_casters/average.rb +27 -0
  24. data/lib/imgproxy/options_casters/background.rb +27 -0
  25. data/lib/imgproxy/options_casters/base64.rb +2 -0
  26. data/lib/imgproxy/options_casters/blur_detections.rb +28 -0
  27. data/lib/imgproxy/options_casters/blurhash.rb +21 -0
  28. data/lib/imgproxy/options_casters/bool.rb +3 -1
  29. data/lib/imgproxy/options_casters/crop.rb +3 -1
  30. data/lib/imgproxy/options_casters/dominant_colors.rb +27 -0
  31. data/lib/imgproxy/options_casters/draw_detections.rb +28 -0
  32. data/lib/imgproxy/options_casters/extend.rb +3 -1
  33. data/lib/imgproxy/options_casters/filename.rb +31 -0
  34. data/lib/imgproxy/options_casters/float.rb +3 -1
  35. data/lib/imgproxy/options_casters/format_quality.rb +19 -0
  36. data/lib/imgproxy/options_casters/gradient.rb +31 -0
  37. data/lib/imgproxy/options_casters/gravity.rb +20 -6
  38. data/lib/imgproxy/options_casters/group.rb +2 -0
  39. data/lib/imgproxy/options_casters/hashsum.rb +24 -0
  40. data/lib/imgproxy/options_casters/integer.rb +2 -0
  41. data/lib/imgproxy/options_casters/jpeg_options.rb +3 -1
  42. data/lib/imgproxy/options_casters/padding.rb +41 -0
  43. data/lib/imgproxy/options_casters/png_options.rb +3 -1
  44. data/lib/imgproxy/options_casters/resize.rb +3 -1
  45. data/lib/imgproxy/options_casters/size.rb +3 -1
  46. data/lib/imgproxy/options_casters/string.rb +2 -0
  47. data/lib/imgproxy/options_casters/trim.rb +3 -1
  48. data/lib/imgproxy/options_casters/unsharp_masking.rb +25 -0
  49. data/lib/imgproxy/options_casters/video_thumbnail_tile.rb +34 -0
  50. data/lib/imgproxy/options_casters/watermark.rb +5 -4
  51. data/lib/imgproxy/options_casters/watermark_size.rb +21 -0
  52. data/lib/imgproxy/options_casters/{gif_options.rb → webp_options.rb} +6 -5
  53. data/lib/imgproxy/options_casters/zoom.rb +27 -0
  54. data/lib/imgproxy/service_config.rb +111 -0
  55. data/lib/imgproxy/trim_array.rb +2 -0
  56. data/lib/imgproxy/url_adapters/active_storage.rb +2 -0
  57. data/lib/imgproxy/url_adapters/shrine.rb +8 -2
  58. data/lib/imgproxy/url_adapters.rb +3 -0
  59. data/lib/imgproxy/url_builders/base.rb +184 -0
  60. data/lib/imgproxy/url_builders/info.rb +44 -0
  61. data/lib/imgproxy/url_builders/processing.rb +59 -0
  62. data/lib/imgproxy/version.rb +3 -1
  63. data/lib/imgproxy.rb +19 -57
  64. data/logo/logo-dark.svg +22 -0
  65. data/logo/logo-light.svg +31 -0
  66. metadata +70 -32
  67. data/lib/imgproxy/builder.rb +0 -140
  68. data/lib/imgproxy/options.rb +0 -119
  69. data/lib/imgproxy/options_aliases.rb +0 -45
@@ -0,0 +1,31 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="266" height="100" fill="none">
2
+ <g clip-path="url(#a)">
3
+ <path fill="#000" d="M94.056 42.55v2.915h5.803v11.648h-5.803v2.915h14.733v-2.915h-5.69V42.549h-9.043Zm4.916-4.367c0 1.423.83 2.423 2.451 2.423 1.619 0 2.45-1 2.45-2.423 0-1.422-.831-2.422-2.45-2.422-1.62 0-2.451 1-2.451 2.422Zm14.479 4.366v17.465h3.239V48.746c0-2.507.859-3.633 2.775-3.633 1.915 0 2.774 1.14 2.774 3.633v11.268h3.24V48.746c0-2.535.859-3.633 2.775-3.633 1.915 0 2.774 1.112 2.774 3.633v11.268h3.24V47.845c0-3.465-2.099-5.76-5.24-5.76-1.648 0-3.155.732-4.014 1.915h-.591c-.86-1.225-2.155-1.916-3.747-1.916-1.648 0-2.887.578-3.563 1.634h-.409V42.55h-3.253Zm42.704 16.902V42.549h-3.24v1.578h-.887c-.831-1.226-2.676-2.043-4.662-2.043-4.662 0-7.774 3.437-7.774 8.62 0 5.099 3.126 8.507 7.774 8.507 1.916 0 3.775-.76 4.662-1.915h.887v1.859c0 2.676-1.887 4.253-5.07 4.253-2.535 0-4.422-1.042-5.07-2.788h-3.183c.183 3.436 3.478 5.704 8.253 5.704 5.155-.014 8.31-2.746 8.31-6.873Zm-13.324-8.747c0-3.465 1.944-5.591 5.127-5.591s5.127 2.126 5.127 5.591c0 3.465-1.944 5.592-5.127 5.592s-5.127-2.127-5.127-5.592Zm28.648-8.62c-2.127 0-4.071.874-4.887 2.212h-.888v-1.747h-3.239v23.296h3.239v-7.577h.888c.816 1.338 2.774 2.21 4.887 2.21 4.775 0 7.958-3.675 7.958-9.196s-3.183-9.197-7.958-9.197Zm-5.887 9.212c0-3.817 2-6.17 5.309-6.17 3.296 0 5.31 2.353 5.31 6.17 0 3.817-2 6.169-5.31 6.169-3.309 0-5.309-2.366-5.309-6.17Zm18.845-8.747v2.916h4.14v11.648h-4.14v2.915h13.746v-2.915h-6.366v-6.409c0-3.704 1.155-5.591 3.422-5.591 1.831 0 2.775 1.07 2.775 3.14v2.057h3.352v-2.521c0-3.55-1.915-5.705-5.07-5.705-1.676 0-3.071.634-3.831 1.803h-.888V42.55h-7.14Zm30.042 17.944c5.211 0 8.69-3.676 8.69-9.197 0-5.521-3.479-9.197-8.69-9.197-5.211 0-8.69 3.676-8.69 9.197 0 5.52 3.465 9.197 8.69 9.197Zm-5.451-9.197c0-3.817 2.071-6.17 5.451-6.17 3.394 0 5.451 2.353 5.451 6.17 0 3.817-2.057 6.169-5.451 6.169-3.394 0-5.451-2.366-5.451-6.17ZM227 60.028h3.718l4.127-6.056.324-.845h.296l.324.845 4.07 6.056h3.944l-5.747-8.591 6.099-8.888h-3.62l-4.62 6.705-.323.845h-.296l-.324-.845-4.423-6.705h-3.887l6.042 9.17-5.704 8.31Zm20.69-17.479 6.338 16.014h2.648l-1.056 2.972c-.535 1.31-1.057 1.86-2.028 1.86-1.057 0-1.62-.55-2.184-1.86h-2.943c.239 3.056 2.155 4.775 5.31 4.775 2.126 0 3.859-1.395 4.718-3.789l7.127-19.972h-3.296l-4.62 13.099h-1.267l-5.155-13.099h-3.592Z"/>
4
+ <mask id="b" width="94" height="79" x="0" y="22" maskUnits="userSpaceOnUse" style="mask-type:luminance">
5
+ <path fill="#fff" d="M.394 22.535h92.817v78.169H.394V22.535Z"/>
6
+ </mask>
7
+ <g mask="url(#b)">
8
+ <path fill="url(#c)" d="M78.493 32.732V22.535H68.31v2.831H44.535v-2.83H34.352v2.83H10.577v-2.83H.394v10.196h2.831v12.465H.395v10.197h2.83V67.86H.395v10.197h10.182v-2.845h23.775v2.831h10.183v-2.83H68.31v2.83h10.183V67.845h-2.831V55.38h2.83V45.183h-2.83V32.718h2.83v.014Zm-41.873-7.93h5.662v5.663H36.62v-5.662ZM2.662 30.466v-5.662h5.662v5.662H2.662Zm0 22.662v-5.662h5.662v5.662H2.662Zm5.662 22.648H2.662v-5.662h5.662v5.662Zm33.958 0H36.62v-5.662h5.662v5.662Zm26.028-5.099H44.535v-2.83H34.352v2.83H10.577v-2.83h-2.83V55.38h2.83V45.183h-2.83V32.718h2.83v-2.83h23.775v2.83h10.183v-2.83H68.31v2.83h2.83v12.465h-2.83V55.38h2.83v12.465h-2.83v2.831Zm7.93-.563v5.662h-5.663v-5.662h5.662Zm0-22.648v5.662h-5.663v-5.662h5.662Zm-5.663-17v-5.662h5.662v5.662h-5.662Z"/>
9
+ <path fill="#1960C4" d="M22.55 45.192v.864h.592a1.98 1.98 0 0 1 .8-.848 2.36 2.36 0 0 1 1.2-.304c.778 0 1.37.293 1.776.88.405.587.608 1.445.608 2.576v1.552h-2.544V48.68c0-.459-.086-.8-.256-1.024-.17-.235-.432-.352-.784-.352-.438 0-.763.197-.976.592-.203.395-.304.997-.304 1.808v3.072h2.8V55h-6.88v-2.224h1.664v-5.36h-1.872v-2.224h4.176ZM35.545 55v-9.808h2.496V55h-2.496Zm-3.44-4.192c0 .715.144 1.253.432 1.616.288.363.715.544 1.28.544.576 0 1.008-.181 1.296-.544.288-.363.432-.901.432-1.616h.368v3.312h-.96a2.293 2.293 0 0 1-.896.88c-.384.203-.827.304-1.328.304-.65 0-1.21-.155-1.68-.464-.459-.31-.816-.752-1.072-1.328-.245-.587-.368-1.28-.368-2.08v-6.24h2.496v5.616Zm14.019 4.448c-.49 0-.933-.107-1.328-.32a2.085 2.085 0 0 1-.88-.864h-.592V55h-2.496V41.432h2.496v4.672h.592c.192-.352.485-.635.88-.848.395-.213.837-.32 1.328-.32.79 0 1.477.213 2.064.64.597.416 1.056 1.013 1.376 1.792.32.768.48 1.68.48 2.736 0 1.045-.16 1.957-.48 2.736-.32.768-.779 1.365-1.376 1.792-.587.416-1.275.624-2.064.624Zm-2.944-5.168c0 .928.192 1.653.576 2.176.395.512.944.768 1.648.768s1.248-.256 1.632-.768c.395-.523.592-1.248.592-2.176 0-.928-.197-1.648-.592-2.16-.384-.512-.928-.768-1.632-.768-.704 0-1.253.261-1.648.784-.384.512-.576 1.227-.576 2.144Zm10.835-4.896 2.256 7.072h1.376L57.12 54.2h-2.704l-2.96-9.008h2.56Zm4.144 10.864c-.245.8-.624 1.408-1.136 1.824-.501.416-1.125.624-1.872.624-.928 0-1.659-.256-2.192-.768-.523-.512-.832-1.259-.928-2.24h2.192c.117.32.245.544.384.672a.715.715 0 0 0 .528.208.623.623 0 0 0 .496-.224c.139-.139.261-.373.368-.704l2.848-10.256h2.368L58.16 56.056Z"/>
10
+ <path fill="url(#d)" fill-rule="evenodd" d="M81.437 91.746h10.957L73.606 72.945l7.83 18.802Z" clip-rule="evenodd"/>
11
+ <path fill="url(#e)" fill-rule="evenodd" d="M73.606 72.944v26.62l7.817-7.832" clip-rule="evenodd"/>
12
+ </g>
13
+ </g>
14
+ <defs>
15
+ <linearGradient id="c" x1="39.445" x2="39.445" y1="78.046" y2="22.535" gradientUnits="userSpaceOnUse">
16
+ <stop stop-color="#1D40B2"/>
17
+ <stop offset="1" stop-color="#1680D6"/>
18
+ </linearGradient>
19
+ <linearGradient id="d" x1="76.587" x2="89.416" y1="84.063" y2="80.629" gradientUnits="userSpaceOnUse">
20
+ <stop stop-color="#1C1C1C"/>
21
+ <stop offset="1" stop-color="#3D3E3F"/>
22
+ </linearGradient>
23
+ <linearGradient id="e" x1="70.287" x2="79.541" y1="87.15" y2="84.673" gradientUnits="userSpaceOnUse">
24
+ <stop stop-color="#1C1C1C"/>
25
+ <stop offset="1" stop-color="#3D3E3F"/>
26
+ </linearGradient>
27
+ <clipPath id="a">
28
+ <path fill="#fff" d="M0 0h266v100H0z"/>
29
+ </clipPath>
30
+ </defs>
31
+ </svg>
metadata CHANGED
@@ -1,113 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imgproxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Sergey Alexandrovich
7
+ - Sergei Aleksandrovich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-14 00:00:00.000000000 Z
11
+ date: 2023-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anyway_config
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.0
19
+ version: '2.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.0
26
+ version: '2.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: benchmark-memory
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.0
33
+ version: '0.2'
34
34
  type: :development
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: 0.2.0
40
+ version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: pry-byebug
42
+ name: combustion
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 3.9.0
47
+ version: '1.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 3.9.0
54
+ version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 3.11.0
61
+ version: '3.12'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 3.11.0
68
+ version: '3.12'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec_junit_formatter
70
+ name: rspec-rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.5.1
75
+ version: '6.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.5.1
82
+ version: '6.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rubocop
84
+ name: rubocop-rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.30.1
89
+ version: '2.11'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.30.1
96
+ version: '2.11'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop-rspec
98
+ name: standard
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 2.11.1
103
+ version: '1.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 2.11.1
110
+ version: '1.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: aws-sdk-s3
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 7.0.3
145
+ version: '7.0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 7.0.3
152
+ version: '7.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: shrine
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -170,57 +170,95 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 1.4.1
173
+ version: '1.4'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 1.4.1
180
+ version: '1.4'
181
181
  description: A gem that easily generates imgproxy URLs for your images
182
182
  email: darthsim@gmail.com
183
183
  executables: []
184
184
  extensions: []
185
185
  extra_rdoc_files: []
186
186
  files:
187
+ - ".yardopts"
188
+ - CHANGELOG.md
187
189
  - LICENSE
188
190
  - README.md
191
+ - UPGRADE.md
192
+ - docs/info_options.md
193
+ - docs/processing_options.md
194
+ - docs/yard/fix_pictures.rb
195
+ - docs/yard/github_alerts.rb
196
+ - docs/yard/relative_markdown_links.rb
189
197
  - lib/imgproxy.rb
190
- - lib/imgproxy/builder.rb
191
198
  - lib/imgproxy/config.rb
192
199
  - lib/imgproxy/extensions/active_storage.rb
193
200
  - lib/imgproxy/extensions/shrine.rb
194
- - lib/imgproxy/options.rb
195
- - lib/imgproxy/options_aliases.rb
201
+ - lib/imgproxy/option_aliases/info.rb
202
+ - lib/imgproxy/option_aliases/processing.rb
203
+ - lib/imgproxy/options_builders/base.rb
204
+ - lib/imgproxy/options_builders/info.rb
205
+ - lib/imgproxy/options_builders/processing.rb
196
206
  - lib/imgproxy/options_casters/adjust.rb
207
+ - lib/imgproxy/options_casters/alpha.rb
197
208
  - lib/imgproxy/options_casters/array.rb
209
+ - lib/imgproxy/options_casters/autoquality.rb
210
+ - lib/imgproxy/options_casters/average.rb
211
+ - lib/imgproxy/options_casters/background.rb
198
212
  - lib/imgproxy/options_casters/base64.rb
213
+ - lib/imgproxy/options_casters/blur_detections.rb
214
+ - lib/imgproxy/options_casters/blurhash.rb
199
215
  - lib/imgproxy/options_casters/bool.rb
200
216
  - lib/imgproxy/options_casters/crop.rb
217
+ - lib/imgproxy/options_casters/dominant_colors.rb
218
+ - lib/imgproxy/options_casters/draw_detections.rb
201
219
  - lib/imgproxy/options_casters/extend.rb
220
+ - lib/imgproxy/options_casters/filename.rb
202
221
  - lib/imgproxy/options_casters/float.rb
203
- - lib/imgproxy/options_casters/gif_options.rb
222
+ - lib/imgproxy/options_casters/format_quality.rb
223
+ - lib/imgproxy/options_casters/gradient.rb
204
224
  - lib/imgproxy/options_casters/gravity.rb
205
225
  - lib/imgproxy/options_casters/group.rb
226
+ - lib/imgproxy/options_casters/hashsum.rb
206
227
  - lib/imgproxy/options_casters/integer.rb
207
228
  - lib/imgproxy/options_casters/jpeg_options.rb
229
+ - lib/imgproxy/options_casters/padding.rb
208
230
  - lib/imgproxy/options_casters/png_options.rb
209
231
  - lib/imgproxy/options_casters/resize.rb
210
232
  - lib/imgproxy/options_casters/size.rb
211
233
  - lib/imgproxy/options_casters/string.rb
212
234
  - lib/imgproxy/options_casters/trim.rb
235
+ - lib/imgproxy/options_casters/unsharp_masking.rb
236
+ - lib/imgproxy/options_casters/video_thumbnail_tile.rb
213
237
  - lib/imgproxy/options_casters/watermark.rb
238
+ - lib/imgproxy/options_casters/watermark_size.rb
239
+ - lib/imgproxy/options_casters/webp_options.rb
240
+ - lib/imgproxy/options_casters/zoom.rb
241
+ - lib/imgproxy/service_config.rb
214
242
  - lib/imgproxy/trim_array.rb
215
243
  - lib/imgproxy/url_adapters.rb
216
244
  - lib/imgproxy/url_adapters/active_storage.rb
217
245
  - lib/imgproxy/url_adapters/shrine.rb
246
+ - lib/imgproxy/url_builders/base.rb
247
+ - lib/imgproxy/url_builders/info.rb
248
+ - lib/imgproxy/url_builders/processing.rb
218
249
  - lib/imgproxy/version.rb
250
+ - logo/logo-dark.svg
251
+ - logo/logo-light.svg
219
252
  homepage: https://github.com/imgproxy/imgproxy.rb
220
253
  licenses:
221
254
  - MIT
222
255
  metadata:
223
256
  rubygems_mfa_required: 'true'
257
+ bug_tracker_uri: http://github.com/imgproxy/imgproxy.rb/issues
258
+ changelog_uri: https://github.com/imgproxy/imgproxy.rb/blob/master/CHANGELOG.md
259
+ documentation_uri: http://github.com/imgproxy/imgproxy.rb
260
+ homepage_uri: http://github.com/imgproxy/imgproxy.rb
261
+ source_code_uri: http://github.com/imgproxy/imgproxy.rb
224
262
  post_install_message:
225
263
  rdoc_options: []
226
264
  require_paths:
@@ -236,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
236
274
  - !ruby/object:Gem::Version
237
275
  version: '0'
238
276
  requirements: []
239
- rubygems_version: 3.3.7
277
+ rubygems_version: 3.4.10
240
278
  signing_key:
241
279
  specification_version: 4
242
280
  summary: imgproxy URL generator
@@ -1,140 +0,0 @@
1
- require "openssl"
2
- require "base64"
3
- require "erb"
4
-
5
- require "imgproxy/options"
6
- require "imgproxy/options_aliases"
7
-
8
- module Imgproxy
9
- # Builds imgproxy URL
10
- #
11
- # builder = Imgproxy::Builder.new(
12
- # width: 500,
13
- # height: 400,
14
- # resizing_type: :fill,
15
- # sharpen: 0.5
16
- # )
17
- #
18
- # builder.url_for("http://images.example.com/images/image1.jpg")
19
- # builder.url_for("http://images.example.com/images/image2.jpg")
20
- class Builder
21
- # @param [Hash] options Processing options
22
- # @see Imgproxy.url_for
23
- def initialize(options = {})
24
- options = options.dup
25
-
26
- extract_builder_options(options)
27
-
28
- @options = Imgproxy::Options.new(options)
29
- @format = @options.delete(:format)
30
- end
31
-
32
- # Genrates imgproxy URL
33
- #
34
- # @return [String] imgproxy URL
35
- # @param [String,URI, Object] image Source image URL or object applicable for
36
- # the configured URL adapters
37
- # @see Imgproxy.url_for
38
- def url_for(image)
39
- path = [*processing_options, url(image, ext: @format)].join("/")
40
- signature = sign_path(path)
41
-
42
- File.join(Imgproxy.config.endpoint.to_s, signature, path)
43
- end
44
-
45
- # Genrates imgproxy info URL
46
- #
47
- # @return [String] imgproxy info URL
48
- # @param [String,URI, Object] image Source image URL or object applicable for
49
- # the configured URL adapters
50
- # @see Imgproxy.info_url_for
51
- def info_url_for(image)
52
- path = url(image)
53
- signature = sign_path(path)
54
-
55
- File.join(Imgproxy.config.endpoint.to_s, "info", signature, path)
56
- end
57
-
58
- private
59
-
60
- NEED_ESCAPE_RE = /[@?% ]|[^\p{Ascii}]/.freeze
61
-
62
- def extract_builder_options(options)
63
- @use_short_options = not_nil_or(options.delete(:use_short_options), config.use_short_options)
64
- @base64_encode_url = not_nil_or(options.delete(:base64_encode_url), config.base64_encode_urls)
65
- @escape_plain_url =
66
- not_nil_or(options.delete(:escape_plain_url), config.always_escape_plain_urls)
67
- end
68
-
69
- def processing_options
70
- @processing_options ||= @options.map do |key, value|
71
- [option_alias(key), value].join(":")
72
- end
73
- end
74
-
75
- def url(image, ext: nil)
76
- url = config.url_adapters.url_of(image)
77
-
78
- @base64_encode_url ? base64_url_for(url, ext: ext) : plain_url_for(url, ext: ext)
79
- end
80
-
81
- def plain_url_for(url, ext: nil)
82
- escaped_url = need_escape_url?(url) ? ERB::Util.url_encode(url) : url
83
-
84
- ext ? "plain/#{escaped_url}@#{ext}" : "plain/#{escaped_url}"
85
- end
86
-
87
- def base64_url_for(url, ext: nil)
88
- encoded_url = Base64.urlsafe_encode64(url).tr("=", "").scan(/.{1,16}/).join("/")
89
-
90
- ext ? "#{encoded_url}.#{ext}" : encoded_url
91
- end
92
-
93
- def need_escape_url?(url)
94
- @escape_plain_url || url.match?(NEED_ESCAPE_RE)
95
- end
96
-
97
- def option_alias(name)
98
- return name unless @use_short_options
99
-
100
- Imgproxy::OPTIONS_ALIASES.fetch(name, name)
101
- end
102
-
103
- def sign_path(path)
104
- return "unsafe" unless ready_to_sign?
105
-
106
- digest = OpenSSL::HMAC.digest(
107
- OpenSSL::Digest.new("sha256"),
108
- signature_key,
109
- "#{signature_salt}/#{path}",
110
- )[0, signature_size]
111
-
112
- Base64.urlsafe_encode64(digest).tr("=", "")
113
- end
114
-
115
- def ready_to_sign?
116
- !(signature_key.nil? || signature_salt.nil? ||
117
- signature_key.empty? || signature_salt.empty?)
118
- end
119
-
120
- def signature_key
121
- config.raw_key
122
- end
123
-
124
- def signature_salt
125
- config.raw_salt
126
- end
127
-
128
- def signature_size
129
- config.signature_size
130
- end
131
-
132
- def config
133
- Imgproxy.config
134
- end
135
-
136
- def not_nil_or(value, fallback)
137
- value.nil? ? fallback : value
138
- end
139
- end
140
- end
@@ -1,119 +0,0 @@
1
- require "imgproxy/trim_array"
2
- require "imgproxy/options_casters/string"
3
- require "imgproxy/options_casters/integer"
4
- require "imgproxy/options_casters/float"
5
- require "imgproxy/options_casters/bool"
6
- require "imgproxy/options_casters/array"
7
- require "imgproxy/options_casters/base64"
8
- require "imgproxy/options_casters/resize"
9
- require "imgproxy/options_casters/size"
10
- require "imgproxy/options_casters/extend"
11
- require "imgproxy/options_casters/gravity"
12
- require "imgproxy/options_casters/crop"
13
- require "imgproxy/options_casters/trim"
14
- require "imgproxy/options_casters/adjust"
15
- require "imgproxy/options_casters/watermark"
16
- require "imgproxy/options_casters/jpeg_options"
17
- require "imgproxy/options_casters/png_options"
18
- require "imgproxy/options_casters/gif_options"
19
-
20
- module Imgproxy
21
- # Formats and regroups processing options
22
- class Options < Hash
23
- using TrimArray
24
-
25
- CASTERS = {
26
- resize: Imgproxy::OptionsCasters::Resize,
27
- size: Imgproxy::OptionsCasters::Size,
28
- resizing_type: Imgproxy::OptionsCasters::String,
29
- resizing_algorithm: Imgproxy::OptionsCasters::String,
30
- width: Imgproxy::OptionsCasters::Integer,
31
- height: Imgproxy::OptionsCasters::Integer,
32
- dpr: Imgproxy::OptionsCasters::Float,
33
- enlarge: Imgproxy::OptionsCasters::Bool,
34
- extend: Imgproxy::OptionsCasters::Extend,
35
- gravity: Imgproxy::OptionsCasters::Gravity,
36
- crop: Imgproxy::OptionsCasters::Crop,
37
- padding: Imgproxy::OptionsCasters::Array,
38
- trim: Imgproxy::OptionsCasters::Trim,
39
- rotate: Imgproxy::OptionsCasters::Integer,
40
- quality: Imgproxy::OptionsCasters::Integer,
41
- max_bytes: Imgproxy::OptionsCasters::Integer,
42
- background: Imgproxy::OptionsCasters::Array,
43
- background_alpha: Imgproxy::OptionsCasters::Float,
44
- adjust: Imgproxy::OptionsCasters::Adjust,
45
- brightness: Imgproxy::OptionsCasters::Integer,
46
- contrast: Imgproxy::OptionsCasters::Float,
47
- saturation: Imgproxy::OptionsCasters::Float,
48
- blur: Imgproxy::OptionsCasters::Float,
49
- sharpen: Imgproxy::OptionsCasters::Float,
50
- pixelate: Imgproxy::OptionsCasters::Integer,
51
- unsharpening: Imgproxy::OptionsCasters::String,
52
- watermark: Imgproxy::OptionsCasters::Watermark,
53
- watermark_url: Imgproxy::OptionsCasters::Base64,
54
- style: Imgproxy::OptionsCasters::Base64,
55
- jpeg_options: Imgproxy::OptionsCasters::JpegOptions,
56
- png_options: Imgproxy::OptionsCasters::PngOptions,
57
- gif_options: Imgproxy::OptionsCasters::GifOptions,
58
- page: Imgproxy::OptionsCasters::Integer,
59
- video_thumbnail_second: Imgproxy::OptionsCasters::Integer,
60
- preset: Imgproxy::OptionsCasters::Array,
61
- cachebuster: Imgproxy::OptionsCasters::String,
62
- strip_metadata: Imgproxy::OptionsCasters::Bool,
63
- strip_color_profile: Imgproxy::OptionsCasters::Bool,
64
- auto_rotate: Imgproxy::OptionsCasters::Bool,
65
- filename: Imgproxy::OptionsCasters::String,
66
- format: Imgproxy::OptionsCasters::String,
67
- return_attachment: Imgproxy::OptionsCasters::Bool,
68
- expires: Imgproxy::OptionsCasters::Integer,
69
- }.freeze
70
-
71
- META = %i[size resize adjust].freeze
72
-
73
- # @param options [Hash] raw processing options
74
- def initialize(options)
75
- super()
76
-
77
- # Options order hack: initialize known and meta options with nil value to preserve order
78
- CASTERS.each_key { |n| self[n] = nil if options.key?(n) || META.include?(n) }
79
-
80
- options.each do |name, value|
81
- caster = CASTERS[name]
82
- self[name] = caster ? caster.cast(value) : unwrap_hash(value)
83
- end
84
-
85
- group_resizing_opts
86
- group_adjust_opts
87
-
88
- compact!
89
- end
90
-
91
- private
92
-
93
- def unwrap_hash(raw)
94
- return raw unless raw.is_a?(Hash)
95
-
96
- raw.flat_map do |_key, val|
97
- unwrap_hash(val)
98
- end
99
- end
100
-
101
- def group_resizing_opts
102
- return unless self[:width] && self[:height] && !self[:size] && !self[:resize]
103
-
104
- self[:size] = extract_and_trim_nils(:width, :height, :enlarge, :extend)
105
- self[:resize] = [delete(:resizing_type), *delete(:size)] if self[:resizing_type]
106
- end
107
-
108
- def group_adjust_opts
109
- return if self[:adjust]
110
- return unless values_at(:brightness, :contrast, :saturation).count { |o| o } > 1
111
-
112
- self[:adjust] = extract_and_trim_nils(:brightness, :contrast, :saturation)
113
- end
114
-
115
- def extract_and_trim_nils(*keys)
116
- keys.map { |k| delete(k) }.trim!
117
- end
118
- end
119
- end
@@ -1,45 +0,0 @@
1
- module Imgproxy
2
- OPTIONS_ALIASES = {
3
- resize: :rs,
4
- size: :s,
5
- resizing_type: :rt,
6
- resizing_algorithm: :ra,
7
- width: :w,
8
- height: :h,
9
- enlarge: :el,
10
- extend: :ex,
11
- gravity: :g,
12
- crop: :c,
13
- padding: :pd,
14
- trim: :t,
15
- rotate: :rot,
16
- quality: :q,
17
- max_bytes: :mb,
18
- background: :bg,
19
- background_alpha: :bga,
20
- adjust: :a,
21
- brightness: :br,
22
- contrast: :co,
23
- saturation: :sa,
24
- blur: :bl,
25
- sharpen: :sh,
26
- pixelate: :pix,
27
- unsharpening: :ush,
28
- watermark: :wm,
29
- watermark_url: :wmu,
30
- style: :st,
31
- jpeg_options: :jpego,
32
- png_options: :pngo,
33
- gif_options: :gifo,
34
- page: :pg,
35
- video_thumbnail_second: :vts,
36
- preset: :pr,
37
- cachebuster: :cb,
38
- strip_metadata: :sm,
39
- strip_color_profile: :scp,
40
- auto_rotate: :ar,
41
- filename: :fn,
42
- return_attachment: :att,
43
- expires: :exp,
44
- }.freeze
45
- end