class MiniMagick::Tool
Abstract class that wraps command-line tools. It shouldn't be used directly, but through one of its subclasses (e.g. {MiniMagick::Tool::Mogrify}). Use this class if you want to be closer to the metal and execute ImageMagick commands directly, but still with a nice Ruby interface.
@example
MiniMagick::Tool::Mogrify.new do |builder| builder.resize "500x500" builder << "path/to/image.jpg" end
Attributes
@private
@private
Public Class Methods
@private
# File lib/mini_magick/tool.rb, line 19 def self.inherited(child) child_name = child.name.split("::").last.downcase child.send :include, MiniMagick::Tool::OptionMethods.new(child_name) end
Aside from classic instantiation, it also accepts a block, and then executes the command in the end.
@example
version = MiniMagick::Tool::Identify.new { |b| b.version } puts version
@return [MiniMagick::Tool, String] If no block is given, returns an
instance of the tool, if block is given, returns the output of the command.
# File lib/mini_magick/tool.rb, line 36 def self.new(*args) instance = super(*args) if block_given? yield instance instance.call else instance end end
@param whiny [Boolean] Whether to raise errors on exit codes different
than 0.
@example
MiniMagick::Tool::Identify.new(false) do |identify| identify.help # returns exit status 1, which would otherwise throw an error end
# File lib/mini_magick/tool.rb, line 56 def initialize(name, whiny = MiniMagick.whiny) @name = name @whiny = whiny @args = [] end
Public Instance Methods
Changes the last operator to its “plus” form.
@example
MiniMagick::Tool::Mogrify.new do |mogrify| mogrify.antialias.+ mogrify.distort.+("Perspective", "0,0,4,5 89,0,45,46") end # executes `mogrify +antialias +distort Perspective '0,0,4,5 89,0,45,46'`
@return [self]
# File lib/mini_magick/tool.rb, line 148 def +(*values) args[-1] = args[-1].sub(/^-/, '+') self.merge!(values) self end
Appends raw options, useful for appending image paths.
@return [self]
# File lib/mini_magick/tool.rb, line 121 def <<(arg) args << arg.to_s self end
Executes the command that has been built up.
@example
mogrify = MiniMagick::Tool::Mogrify.new mogrify.resize("500x500") mogrify << "path/to/image.jpg" mogrify.call # executes `mogrify -resize 500x500 path/to/image.jpg`
@param whiny [Boolean] Whether you want an error to be raised when
ImageMagick returns an exit code of 1. You may want this because some ImageMagick's commands (`identify -help`) return exit code 1, even though no error happened.
@return [String] Output of the command
# File lib/mini_magick/tool.rb, line 78 def call(whiny = @whiny, options = {}) shell = MiniMagick::Shell.new shell.run(command, options.merge(whiny: whiny)).strip end
The currently built-up command.
@return [Array<String>]
@example
mogrify = MiniMagick::Tool::Mogrify.new mogrify.resize "500x500" mogrify.contrast mogrify.command #=> ["mogrify", "-resize", "500x500", "-contrast"]
# File lib/mini_magick/tool.rb, line 94 def command [*executable, *args] end
The executable used for this tool. Respects {MiniMagick::Configuration#cli} and {MiniMagick::Configuration#cli_path}.
@return [Array<String>]
@example
MiniMagick.configure { |config| config.cli = :graphicsmagick } identify = MiniMagick::Tool::Identify.new identify.executable #=> ["gm", "identify"]
# File lib/mini_magick/tool.rb, line 109 def executable exe = [name] exe.unshift "gm" if MiniMagick.graphicsmagick? exe.unshift File.join(MiniMagick.cli_path, exe.shift) if MiniMagick.cli_path exe end
Merges a list of raw options.
@return [self]
# File lib/mini_magick/tool.rb, line 131 def merge!(new_args) new_args.each { |arg| self << arg } self end
Create an ImageMagick stack in the command (surround.
@example
MiniMagick::Tool::Convert.new do |convert| convert << "wand.gif" convert.stack do |stack| stack << "wand.gif" stack.rotate(30) end convert.append.+ convert << "images.gif" end # executes `convert wand.gif \( wizard.gif -rotate 30 \) +append images.gif`
# File lib/mini_magick/tool.rb, line 169 def stack self << "(" yield self self << ")" end