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

args[R]

@private

name[R]

@private

Public Class Methods

inherited(child) click to toggle source

@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
new(*args) { |instance| ... } click to toggle source

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.
Calls superclass method
# 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
new(name, whiny = MiniMagick.whiny) click to toggle source

@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

+(*values) click to toggle source

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
<<(arg) click to toggle source

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
call(whiny = @whiny, options = {}) click to toggle source

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
command() click to toggle source

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
executable() click to toggle source

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
merge!(new_args) click to toggle source

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
stack() { |self| ... } click to toggle source

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