File: nestedexception.rb

package info (click to toggle)
ruby-soap4r 2.0.5-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,032 kB
  • sloc: ruby: 52,729; xml: 266; sh: 42; javascript: 20; makefile: 13; perl: 10
file content (42 lines) | stat: -rw-r--r-- 1,163 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# SOAP4R - Nested exception implementation
# Copyright (C) 2000-2007  NAKAMURA, Hiroshi <nahi@ruby-lang.org>.

# This program is copyrighted free software by NAKAMURA, Hiroshi.  You can
# redistribute it and/or modify it under the same terms of Ruby's license;
# either the dual license version in 2003, or any later version.


module SOAP


module NestedException
  attr_reader :cause
  attr_reader :original_backtraace

  def initialize(msg = nil, cause = nil)
    super(msg)
    @cause = cause
    @original_backtrace = nil
  end

  def set_backtrace(backtrace)
    if @cause and @cause.respond_to?(:backtrace)
      @original_backtrace = backtrace
=begin
      # 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)
=end
      # 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
end


end