diff --git a/app/services/images/optimizer.rb b/app/services/images/optimizer.rb index 0bffe1f53..b114ed8d5 100644 --- a/app/services/images/optimizer.rb +++ b/app/services/images/optimizer.rb @@ -38,11 +38,20 @@ module Images }.freeze def self.imgproxy(img_src, **kwargs) - options = DEFAULT_IMGPROXY_OPTIONS.merge(kwargs).reject { |_, v| v.blank? } + translated_options = translate_cloudinary_options(kwargs) + options = DEFAULT_IMGPROXY_OPTIONS.merge(translated_options).reject { |_, v| v.blank? } Imgproxy.config.endpoint ||= get_imgproxy_endpoint Imgproxy.url_for(img_src, options) end + def self.translate_cloudinary_options(options) + if options[:crop] == "fill" + options[:resizing_type] = "fill" + end + + options + end + def self.imgproxy_enabled? Imgproxy.config.key.present? && Imgproxy.config.salt.present? end diff --git a/lib/data_update_scripts/20201026155851_resave_to_bust_cache_for_imgproxy.rb b/lib/data_update_scripts/20201026155851_resave_to_bust_cache_for_imgproxy.rb new file mode 100644 index 000000000..15198d11f --- /dev/null +++ b/lib/data_update_scripts/20201026155851_resave_to_bust_cache_for_imgproxy.rb @@ -0,0 +1,18 @@ +module DataUpdateScripts + class ResaveToBustCacheForImgproxy + def run + return unless ENV["FOREM_CONTEXT"] == "forem_cloud" + + User.find_each do |user| + CacheBuster.bust_user(user) + end + + Organization.find_each do |organization| + CacheBuster.bust_organization(organization, organization.slug) + end + + Article.find_each(&:save) + Comment.find_each(&:save) + end + end +end diff --git a/spec/services/images/optimizer_spec.rb b/spec/services/images/optimizer_spec.rb index bcf830438..5957b44cb 100644 --- a/spec/services/images/optimizer_spec.rb +++ b/spec/services/images/optimizer_spec.rb @@ -77,4 +77,11 @@ RSpec.describe Images::Optimizer, type: :service do expect(imgproxy_url).to match(%r{/s:500:500/aHR0cHM6Ly9pLmlt/Z3VyLmNvbS9mS1lL/Z280LnBuZw}) end end + + describe "#translate_cloudinary_options" do + it "Set resizing_type to fill if crop: fill is provided" do + options = { width: 100, height: 100, crop: "fill" } + expect(described_class.translate_cloudinary_options(options)).to include(resizing_type: "fill") + end + end end