Some helper methods for throwing errors.
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
Throw a dev error.
# File lib/puppet/util/errors.rb, line 4 def devfail(msg) self.fail(Puppet::DevError, msg) end
# 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
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
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