module SOAP::NestedException

Attributes

cause[R]
original_backtraace[R]

Public Class Methods

new(msg = nil, cause = nil) click to toggle source
Calls superclass method
# File lib/soap/nestedexception.rb, line 16
def initialize(msg = nil, cause = nil)
  super(msg)
  @cause = cause
  @original_backtrace = nil
end

Public Instance Methods

set_backtrace(backtrace) click to toggle source
Calls superclass method
# File lib/soap/nestedexception.rb, line 22
  def set_backtrace(backtrace)
    if @cause and @cause.respond_to?(:backtrace)
      @original_backtrace = backtrace
      # for agressive backtrace abstraction: 'here' only should not be good
      here = @original_backtrace[0]
      backtrace = Array[*@cause.backtrace]
      backtrace[0] = "#{backtrace[0]}: #{@cause} (#{@cause.class})"
      backtrace.unshift(here)
      # just join the nested backtrace at the tail of backtrace
      caused = Array[*@cause.backtrace]
      caused[0] = "#{caused[0]}: #{@cause} (#{@cause.class}) [NESTED]"
      backtrace += caused
    end
    super(backtrace)
  end