module Deltacloud::Exceptions

Public Class Methods

exception_from_status(code, message) click to toggle source
# File lib/deltacloud/drivers/exceptions.rb, line 169
def self.exception_from_status(code, message)
  ExceptionDef.new(nil) { status code}.handler(StandardError.new(message))
end
exceptions(&block) click to toggle source
# File lib/deltacloud/drivers/exceptions.rb, line 187
def self.exceptions(&block)
  @definitions ||= []
  @definitions = Exceptions.new(&block).exception_definitions if block_given?
  @definitions
end
included(klass) click to toggle source
# File lib/deltacloud/drivers/exceptions.rb, line 206
def self.included(klass)
  klass.extend(DSL)
end
logger(logger=nil) click to toggle source
# File lib/deltacloud/drivers/exceptions.rb, line 201
def self.logger(logger=nil)
  @logger = logger
  @logger ||= ::Logger.new($stderr)
end

Public Instance Methods

safely(&block) click to toggle source
# File lib/deltacloud/drivers/exceptions.rb, line 210
def safely(&block)
  begin
    block.call
  rescue => e
    self.class.exceptions.each do |definitions|
      next unless definitions.any? e
      if (new_exception = definitions.handler(e)) and new_exception.message
        message = new_exception.message
      end
      message ||= e.message
      raise definitions.handler(e) unless new_exception.nil?
    end
    raise BackendError.new(e, "Unhandled exception or status code (#{e.message})")
  end
end