module Puppet::Util::Errors

Some helper methods for throwing errors.

Public Instance Methods

adderrorcontext(error, other = nil) click to toggle source

Add line and file info if available and appropriate.

# File lib/puppet/util/errors.rb, line 9
def adderrorcontext(error, other = nil)
  error.line ||= self.line if error.respond_to?(:line=) and self.respond_to?(:line) and self.line
  error.file ||= self.file if error.respond_to?(:file=) and self.respond_to?(:file) and self.file

  error.set_backtrace(other.backtrace) if other and other.respond_to?(:backtrace)

  error
end
devfail(msg) click to toggle source

Throw a dev error.

# File lib/puppet/util/errors.rb, line 4
def devfail(msg)
  self.fail(Puppet::DevError, msg)
end
error_context() click to toggle source
# File lib/puppet/util/errors.rb, line 18
def error_context
  if file and line
    " at #{file}:#{line}"
  elsif line
    " at line #{line}"
  elsif file
    " in #{file}"
  else
    ""
  end
end
exceptwrap(options = {}) { || ... } click to toggle source

Wrap a call in such a way that we always throw the right exception and keep as much context as possible.

# File lib/puppet/util/errors.rb, line 32
def exceptwrap(options = {})
  options[:type] ||= Puppet::DevError
  begin
    return yield
  rescue Puppet::Error => detail
    raise adderrorcontext(detail)
  rescue => detail
    message = options[:message] || "#{self.class} failed with error #{detail.class}: #{detail}"

    error = options[:type].new(message)
    # We can't use self.fail here because it always expects strings,
    # not exceptions.
    raise adderrorcontext(error, detail)
  end

  retval
end
fail(*args) click to toggle source

Throw an error, defaulting to a Puppet::Error.

# File lib/puppet/util/errors.rb, line 51
def fail(*args)
  if args[0].is_a?(Class)
    type = args.shift
  else
    type = Puppet::Error
  end

  error = adderrorcontext(type.new(args.join(" ")))

  raise error
end