aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage/lib/active_storage/transformers/mini_magick_transformer.rb
diff options
context:
space:
mode:
authorGeorge Claghorn <george.claghorn@gmail.com>2018-08-10 12:10:13 -0400
committerGeorge Claghorn <george.claghorn@gmail.com>2018-08-10 12:42:14 -0400
commit697f4a93ad386f9fb7795f0ba68f815f16ebad0f (patch)
tree57576c80df328be9b910dade1b21faddf8798629 /activestorage/lib/active_storage/transformers/mini_magick_transformer.rb
parent924f44371697c5fe1509a749e1187ad2c9257ab9 (diff)
downloadrails-697f4a93ad386f9fb7795f0ba68f815f16ebad0f.tar.gz
rails-697f4a93ad386f9fb7795f0ba68f815f16ebad0f.tar.bz2
rails-697f4a93ad386f9fb7795f0ba68f815f16ebad0f.zip
Extract transformers
Diffstat (limited to 'activestorage/lib/active_storage/transformers/mini_magick_transformer.rb')
-rw-r--r--activestorage/lib/active_storage/transformers/mini_magick_transformer.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/activestorage/lib/active_storage/transformers/mini_magick_transformer.rb b/activestorage/lib/active_storage/transformers/mini_magick_transformer.rb
new file mode 100644
index 0000000000..e8e99cea9e
--- /dev/null
+++ b/activestorage/lib/active_storage/transformers/mini_magick_transformer.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require "mini_magick"
+
+module ActiveStorage
+ module Transformers
+ class MiniMagickTransformer < Transformer
+ private
+ def process(file, format:)
+ image = MiniMagick::Image.new(file.path, file)
+
+ transformations.each do |name, argument_or_subtransformations|
+ image.mogrify do |command|
+ if name.to_s == "combine_options"
+ argument_or_subtransformations.each do |subtransformation_name, subtransformation_argument|
+ pass_transform_argument(command, subtransformation_name, subtransformation_argument)
+ end
+ else
+ pass_transform_argument(command, name, argument_or_subtransformations)
+ end
+ end
+ end
+
+ image.format(format) if format
+
+ image.tempfile.tap(&:open)
+ end
+
+ def pass_transform_argument(command, method, argument)
+ if argument == true
+ command.public_send(method)
+ elsif argument.present?
+ command.public_send(method, argument)
+ end
+ end
+ end
+ end
+end