def call(*args)
      options = args[-1].is_a?(Hash) ? args.pop : {}
      warn "Passing whiny to MiniMagick::Tool#call is deprecated and will be removed in MiniMagick 5, use MiniMagick::Tool.new(whiny: false) instead." if args.any?
      whiny = args.fetch(0, @whiny)

      options[:whiny] = whiny
      options[:stderr] = false if block_given?

      shell = MiniMagick::Shell.new
      stdout, stderr, status = shell.run(command, options)
      yield stdout, stderr, status if block_given?

      stdout.chomp("\n")
    end
def call(*args)
      options = args[-1].is_a?(Hash) ? args.pop : {}
      warn "Passing whiny to MiniMagick::Tool#call is deprecated and will be removed in MiniMagick 5, use MiniMagick::Tool.new(whiny: false) instead." if args.any?
      whiny = args.fetch(0, @whiny)

      options[:whiny] = whiny
      options[:stderr] = false if block_given?

      shell = MiniMagick::Shell.new
      stdout, stderr, status = shell.run(command, options)
      yield stdout, stderr, status if block_given?

      stdout.chomp("\n")
    end
@param whiny [Boolean] Whether to raise errors on exit codes different
   than 0.
 @example
   MiniMagick::Tool::Identify.new(whiny: false) do |identify|
     identify.help # returns exit status 1, which would otherwise throw an error
   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`

 @example
   mogrify = MiniMagick::Tool::Mogrify.new
   # build the command
   mogrify.call do |stdout, stderr, status|
     # ...
   end

 @yield [Array] Optionally yields stdout, stderr, and exit status

 @return [String] Returns the output of the command