module ImageProcessing::MiniMagick::Processor::Utils

def apply_define(magick, options)

Applies settings from the provided (nested) hash.
def apply_define(magick, options)
  options.each do |namespace, settings|
    namespace = namespace.to_s.tr("_", "-")
    settings.each do |key, value|
      key = key.to_s.tr("_", "-")
      magick.define "#{namespace}:#{key}=#{value}"
    end
  end
  magick
end

def apply_options(magick, define: {}, **options)

Applies options from the provided hash.
def apply_options(magick, define: {}, **options)
  options.each do |option, value|
    case value
    when true, nil then magick.send(option)
    when false     then magick.send(option).+
    else                magick.send(option, *value)
    end
  end
  apply_define(magick, define)
end

def disallow_split_layers!(destination_path)

We want to warn the user that this is probably not what they wanted.
format, ImageMagick will create multiple images, one for each layer.
When a multi-layer format is being converted into a single-layer
def disallow_split_layers!(destination_path)
  layers = Dir[destination_path.sub(/(\.\w+)?$/, '-*\0')]
  if layers.any?
    layers.each { |path| File.delete(path) }
    raise Error, "Source format is multi-layer, but destination format is single-layer. If you care only about the first layer, add `.loader(page: 0)` to your pipeline. If you want to process each layer, see https://github.com/janko/image_processing/wiki/Splitting-a-PDF-into-multiple-images or use `.saver(allow_splitting: true)`."
  end
end