imgproxy 2.0.1 → 3.0.0

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.
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 -133
  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 +4 -2
  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 +15 -3
  57. data/lib/imgproxy/url_adapters/shrine.rb +9 -3
  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 -55
  64. data/logo/logo-dark.svg +22 -0
  65. data/logo/logo-light.svg +31 -0
  66. metadata +74 -35
  67. data/lib/imgproxy/builder.rb +0 -140
  68. data/lib/imgproxy/options.rb +0 -115
  69. data/lib/imgproxy/options_aliases.rb +0 -43
@@ -0,0 +1,22 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="266" height="100" fill="none">
2
+ <g clip-path="url(#a)">
3
+ <path fill="#fff" 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="#fff" fill-rule="evenodd" d="M81.437 91.746h10.957L73.606 72.945l7.83 18.802Zm-7.831-18.802v26.62l7.817-7.832" clip-rule="evenodd"/>
11
+ </g>
12
+ </g>
13
+ <defs>
14
+ <linearGradient id="c" x1="39.445" x2="39.445" y1="78.046" y2="22.535" gradientUnits="userSpaceOnUse">
15
+ <stop stop-color="#1D40B2"/>
16
+ <stop offset="1" stop-color="#1680D6"/>
17
+ </linearGradient>
18
+ <clipPath id="a">
19
+ <path fill="#fff" d="M0 0h266v100H0z"/>
20
+ </clipPath>
21
+ </defs>
22
+ </svg>
@@ -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,127 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imgproxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
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: 2021-08-23 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.1.2
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.1.2
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.9.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.9.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.4.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.4.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: 0.83.0
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: 0.83.0
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: 1.38.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: 1.38.1
110
+ version: '1.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: aws-sdk-s3
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.64.0
117
+ version: '1.64'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.64.0
124
+ version: '1.64'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: google-cloud-storage
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '5.2'
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: '5.2'
152
+ version: '7.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: shrine
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -170,56 +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
- metadata: {}
255
+ metadata:
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
223
262
  post_install_message:
224
263
  rdoc_options: []
225
264
  require_paths:
@@ -235,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
274
  - !ruby/object:Gem::Version
236
275
  version: '0'
237
276
  requirements: []
238
- rubygems_version: 3.0.3
277
+ rubygems_version: 3.4.10
239
278
  signing_key:
240
279
  specification_version: 4
241
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,115 +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
- }.freeze
68
-
69
- META = %i[size resize adjust].freeze
70
-
71
- # @param options [Hash] raw processing options
72
- def initialize(options)
73
- # Options order hack: initialize known and meta options with nil value to preserve order
74
- CASTERS.each_key { |n| self[n] = nil if options.key?(n) || META.include?(n) }
75
-
76
- options.each do |name, value|
77
- caster = CASTERS[name]
78
- self[name] = caster ? caster.cast(value) : unwrap_hash(value)
79
- end
80
-
81
- group_resizing_opts
82
- group_adjust_opts
83
-
84
- compact!
85
- end
86
-
87
- private
88
-
89
- def unwrap_hash(raw)
90
- return raw unless raw.is_a?(Hash)
91
-
92
- raw.flat_map do |_key, val|
93
- unwrap_hash(val)
94
- end
95
- end
96
-
97
- def group_resizing_opts
98
- return unless self[:width] && self[:height] && !self[:size] && !self[:resize]
99
-
100
- self[:size] = extract_and_trim_nils(:width, :height, :enlarge, :extend)
101
- self[:resize] = [delete(:resizing_type), *delete(:size)] if self[:resizing_type]
102
- end
103
-
104
- def group_adjust_opts
105
- return if self[:adjust]
106
- return unless values_at(:brightness, :contrast, :saturation).count { |o| o } > 1
107
-
108
- self[:adjust] = extract_and_trim_nils(:brightness, :contrast, :saturation)
109
- end
110
-
111
- def extract_and_trim_nils(*keys)
112
- keys.map { |k| delete(k) }.trim!
113
- end
114
- end
115
- end
@@ -1,43 +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
- }.freeze
43
- end