From ba30289c7cdf792692702b7c5024f204ea5e8725 Mon Sep 17 00:00:00 2001 From: Luke Rodgers Date: Mon, 10 Feb 2025 16:37:53 -0500 Subject: [PATCH] Upgrade minimagick 5 (#132) * Add gemfiles for multi-gem version testing * Permit mini_magic v5 in gemspec * Support valid image check for minimagic5 * Use a shim to simplify support for minimagick 4 and 5 --- .gitignore | 1 + gemfiles/mini_magick4.gemfile | 7 +++++++ gemfiles/mini_magick5.gemfile | 7 +++++++ image_processing.gemspec | 2 +- lib/image_processing/mini_magick.rb | 12 ++++++++++-- test/mini_magick_test.rb | 12 ++++++------ 6 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 gemfiles/mini_magick4.gemfile create mode 100644 gemfiles/mini_magick5.gemfile diff --git a/.gitignore b/.gitignore index 9b47b5a..2ec5434 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ Gemfile.lock +gemfiles/*.lock pkg/ .DS_Store diff --git a/gemfiles/mini_magick4.gemfile b/gemfiles/mini_magick4.gemfile new file mode 100644 index 0000000..35db2e8 --- /dev/null +++ b/gemfiles/mini_magick4.gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +gemspec :path => '../' + +gem 'pry' + +gem 'mini_magick', '~> 4.9' diff --git a/gemfiles/mini_magick5.gemfile b/gemfiles/mini_magick5.gemfile new file mode 100644 index 0000000..2ce196f --- /dev/null +++ b/gemfiles/mini_magick5.gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +gemspec :path => '../' + +gem 'pry' + +gem 'mini_magick', '~> 5.0' diff --git a/image_processing.gemspec b/image_processing.gemspec index cf93460..25fd62f 100644 --- a/image_processing.gemspec +++ b/image_processing.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |spec| spec.metadata = { "changelog_uri" => spec.homepage + "/blob/master/CHANGELOG.md", "rubygems_mfa_required" => "true" } - spec.add_dependency "mini_magick", ">= 4.9.5", "< 5" + spec.add_dependency "mini_magick", ">= 4.9.5", "< 6" spec.add_dependency "ruby-vips", ">= 2.0.17", "< 3" spec.add_development_dependency "rake" diff --git a/lib/image_processing/mini_magick.rb b/lib/image_processing/mini_magick.rb index 079f257..24b9efa 100644 --- a/lib/image_processing/mini_magick.rb +++ b/lib/image_processing/mini_magick.rb @@ -5,9 +5,17 @@ module ImageProcessing module MiniMagick extend Chainable + def self.convert_shim(&block) + if ::MiniMagick.respond_to?(:convert) + ::MiniMagick.convert(&block) + else + ::MiniMagick::Tool::Convert.new(&block) + end + end + # Returns whether the given image file is processable. def self.valid_image?(file) - ::MiniMagick::Tool::Convert.new do |convert| + convert_shim do |convert| convert << file.path convert << "null:" end @@ -30,7 +38,7 @@ def self.load_image(path_or_magick, loader: nil, page: nil, geometry: nil, auto_ magick = path_or_magick else source_path = path_or_magick - magick = ::MiniMagick::Tool::Convert.new + magick = ::ImageProcessing::MiniMagick.convert_shim Utils.apply_options(magick, **options) diff --git a/test/mini_magick_test.rb b/test/mini_magick_test.rb index b899b89..36f2c24 100644 --- a/test/mini_magick_test.rb +++ b/test/mini_magick_test.rb @@ -14,7 +14,7 @@ it "applies imagemagick operations" do actual = ImageProcessing::MiniMagick.flip.call(@portrait) expected = Tempfile.new(["result", ".jpg"], binmode: true).tap do |tempfile| - MiniMagick::Tool::Convert.new do |cmd| + ImageProcessing::MiniMagick.convert_shim do |cmd| cmd << @portrait.path cmd.flip cmd << tempfile.path @@ -37,7 +37,7 @@ it "applies macro operations" do actual = ImageProcessing::MiniMagick.resize_to_limit(400, 400).call(@portrait) expected = Tempfile.new(["result", ".jpg"], binmode: true).tap do |tempfile| - MiniMagick::Tool::Convert.new do |cmd| + ImageProcessing::MiniMagick.convert_shim do |cmd| cmd << @portrait.path cmd.resize("400x400") cmd << tempfile.path @@ -55,7 +55,7 @@ it "accepts page" do tiff = Tempfile.new(["file", ".tiff"]) - MiniMagick::Tool::Convert.new do |convert| + ImageProcessing::MiniMagick.convert_shim do |convert| convert.merge! [@portrait.path, @portrait.path, @portrait.path] convert << tiff.path end @@ -70,7 +70,7 @@ it "disallows split layers by default" do tiff = Tempfile.new(["file", ".tiff"]) - MiniMagick::Tool::Convert.new do |convert| + ImageProcessing::MiniMagick.convert_shim do |convert| convert.merge! [@portrait.path, @portrait.path, @portrait.path] convert << tiff.path end @@ -168,7 +168,7 @@ end it "accepts magick object as source" do - magick = MiniMagick::Tool::Convert.new + magick = ImageProcessing::MiniMagick.convert_shim magick << fixture_image("rotated.jpg").path result = ImageProcessing::MiniMagick.source(magick).call assert_dimensions [600, 800], result @@ -568,7 +568,7 @@ it "appends CLI arguments" do actual = ImageProcessing::MiniMagick.append("-resize", "400x400").call(@portrait) expected = Tempfile.new(["result", ".jpg"], binmode: true).tap do |tempfile| - MiniMagick::Tool::Convert.new do |cmd| + ImageProcessing::MiniMagick.convert_shim do |cmd| cmd << @portrait.path cmd.resize("400x400") cmd << tempfile.path