From 3915a470d2b8898fdbc384d0f9f31e2ad8a2c899 Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Sat, 24 Feb 2018 15:27:53 -0500 Subject: [PATCH] Support varying ICO files Closes #32096. --- .../app/models/active_storage/variant.rb | 2 +- activestorage/lib/active_storage/engine.rb | 10 +++++++++- activestorage/test/fixtures/files/favicon.ico | Bin 0 -> 16958 bytes activestorage/test/models/variant_test.rb | 11 +++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 activestorage/test/fixtures/files/favicon.ico diff --git a/activestorage/app/models/active_storage/variant.rb b/activestorage/app/models/active_storage/variant.rb index e08a2271ec..a95a4bfd7c 100644 --- a/activestorage/app/models/active_storage/variant.rb +++ b/activestorage/app/models/active_storage/variant.rb @@ -115,7 +115,7 @@ class ActiveStorage::Variant def download_image require "mini_magick" - MiniMagick::Image.create { |file| download_blob_to(file) } + MiniMagick::Image.create(blob.filename.extension_with_delimiter) { |file| download_blob_to(file) } end def transform(image) diff --git a/activestorage/lib/active_storage/engine.rb b/activestorage/lib/active_storage/engine.rb index 8ba32490b1..9430dde028 100644 --- a/activestorage/lib/active_storage/engine.rb +++ b/activestorage/lib/active_storage/engine.rb @@ -18,7 +18,15 @@ module ActiveStorage config.active_storage.analyzers = [ ActiveStorage::Analyzer::ImageAnalyzer, ActiveStorage::Analyzer::VideoAnalyzer ] config.active_storage.paths = ActiveSupport::OrderedOptions.new - config.active_storage.variable_content_types = %w( image/png image/gif image/jpg image/jpeg image/vnd.adobe.photoshop ) + config.active_storage.variable_content_types = %w( + image/png + image/gif + image/jpg + image/jpeg + image/vnd.adobe.photoshop + image/vnd.microsoft.icon + ) + config.active_storage.content_types_to_serve_as_binary = %w( text/html text/javascript diff --git a/activestorage/test/fixtures/files/favicon.ico b/activestorage/test/fixtures/files/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..87192a8a07a7b4e40f1d6c987104aa118d66fee3 GIT binary patch literal 16958 zcmeHNS%@4}6n&kEnb9mGF0tc`=@wiPg1G!>G}2?-qM}iM6a<;X6*Za<#U<#piX!C0 z1=J{t1B&D$1ocA{g0x^<;Hu<9h@fT&q6txKiA$@UF3-JHZ|Y5TRad3EHj;kL>HGG3 z&#kIgZz-h;_>GMz{Fl{|l}asCN-Y79rK$kuOF-GWwKnXG{(s*CeGl|K;O7ClLn*RS z#D{)XWS2)6LR01cdOKGdf(_>b_XEeYmnWG+1?b!dq;(HG;j*FC(EA1Ouc5!}mZue? zEr$N2{eb692YSdyZ&{b7C+T({JCgFl6)rDY@1r*h{v{tflH$L@;D4K;_YcIM0WcP1 z5$IdPmZZ3Izh}DaXdG$H`#3j0ix_Q8iGSH;M~G9#ytOs*{z>w>>%LQdziED9l4jvr z{G7r)aCDd@*_G3ahdKY{hc|z|^XR*TeUPL3pH2eTdw^}gwf1vI6AAM_HoNCruJ3&C zdkpx}!*i>{e-!ymPnjOORS{ZvP;E*zv(T0d?Zwe@-xenhU)b2A9WGLOTQa zVb_oYT^3Lt2mecL9p*pHgFaph{Q`VqmLwCW4FUWx4seh)@izf=diBA$sE|Ke03B7} zH$&HtZh2BM!ZYZ*-aml+6K$<@b3mP5`9JEi^4)uBLGK*5PEs-2Zt!E??*Ukw@;s0O z%?5S@z4G<8pOo&W|Jugkzo7H@>Egs9bSL!e0iFaF`>Ub5QRcP3*EIHf%piMSy3ZZZ zx6~|6E-rg+M|AF=??d`NW*_WFf6hI|+GP&H_usR?U}t->D5aZVm%cu6$z?N{&{;Fn zc}mH;@T-`8aBH3zhTB3H#LWNgaGiOpL9fN=gMH}B7z6Ug)z2Qnx<%$^ag70Eep>RK zM>ocJ4{XXe*C6ZY&6s@fJNm)AKP&{zO~TqGRW5V(shE6lS7$2;Yeix|ozb~o+NE?J zY~uBDuVcXv=p$gRFKZN@pR$hk(`M+ek49jNvtLhZ9NT*J0p{4=z&hH_V^(-;rJJVf zVAHR_$AELq=y}9@<M*D`cC-bVuo|kQFX#n}SH+%NM7R?@g zoeJ>$!1U|&Zh4w98GnM#1+jkQ;CsDH+oQ(U+5JhM=b~R;CvjV6U(zj2Cl2j1s4s9jJ#?|m#c z`pkH*oGoE{i0v|MZXmq@@a!MRv+#kZuGub1oZt6YZ{;b_Rj^5)3DgijE!a946JP1k z2kh@v!8&vaKO3@dSJXMlN!bs*1^NonbP(otGrntza_!AJyeD*TXI=CX>TnxAx2|-q zn?)({IL>oClh?tD2?>RT3WypIA z&|}kQ*>Q}bnXZJbyMS)^a~mFio&ttuYNPqcTMI-OFJ`t(KSf8v&c}g2fo}c4&(rGk zZSO^+teG!zdysK^6L|0(s#`zcey1_F&%DOuERoNam?xhrW8Bh#_cmnTU(a>B@kI@N zTmnRVFKOLrNvgs&lNVp}jR5A%I>`Nj`9JOO)HU0M#reFJ-?SHdNRgitMn#bl{NH6T(A~`Qyg+3ktCV}n1ULeQ^7+bOqbUEz%8sN3f(u21~=1^s{ z)fj2-L%tz79d#(QA3EH^n8-M~ z8~3n@hr?R+%ljVad!X-uz6bgqU=LU!0h=qTggPu2Bf_!>*$R-DY^vgfWwBfY!Lnq^ zs*~2TW~UotwybGcM*0oQnu27#EQ>60+E*O5tUBZBFS z!jM5uPs^&4uBm|ooDbPxIi(79md~le)CA;^QZ>jXOC%e!m0AN?pQY5&MuRy}0^_+$Uqay7FR%=`haCWn(6z4bR*sf>{!X%{YgAG-H bYz$j9maS52Sgu>8Wizw1Y&vOFiW>e0=iGN5 literal 0 HcmV?d00001 diff --git a/activestorage/test/models/variant_test.rb b/activestorage/test/models/variant_test.rb index 0cf8a583bd..0f3ada25c0 100644 --- a/activestorage/test/models/variant_test.rb +++ b/activestorage/test/models/variant_test.rb @@ -50,6 +50,17 @@ class ActiveStorage::VariantTest < ActiveSupport::TestCase assert_equal 20, image.height end + test "resized variation of ICO blob" do + blob = create_file_blob(filename: "favicon.ico", content_type: "image/vnd.microsoft.icon") + variant = blob.variant(resize: "20x20").processed + assert_match(/icon\.png/, variant.service_url) + + image = read_image(variant) + assert_equal "PNG", image.type + assert_equal 20, image.width + assert_equal 20, image.height + end + test "optimized variation of GIF blob" do blob = create_file_blob(filename: "image.gif", content_type: "image/gif")