Exception: Exception
- Defined in:
- lib/core/facets/exception/detail.rb,
lib/core/facets/exception/raised.rb,
lib/core/facets/exception/suppress.rb,
lib/core/facets/exception/error_print.rb,
lib/core/facets/exception/set_message.rb
Direct Known Subclasses
Class Method Summary collapse
-
.error_print(e) ⇒ Object
Formats the Exception so that it looks familiar, i.e.
-
.raised? ⇒ Boolean
Does a block raise an a given
exception
. -
.suppress(*exception_classes) ⇒ Object
Supress errors while executing a block, with execptions.
Instance Method Summary collapse
-
#detail ⇒ Object
Pretty string output of exception/error object useful for helpful debug messages.
-
#error_print ⇒ Object
Formats the Exception so that it looks familiar, i.e.
-
#set_message(string) ⇒ Object
See exception message.
Class Method Details
.error_print(e) ⇒ Object
Formats the Exception so that it looks familiar, i.e. exactly like your interpreter does it.
Port of MRI native ‘error_print` function.
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/core/facets/exception/error_print.rb', line 10 def self.error_print(e) warn_print = "" backtrace = e.backtrace backtrace = [ backtrace ] if backtrace.is_a?(String) # 1.9 returns single String for SystemStackError warn_print << backtrace[0] if e.is_a?(RuntimeError) && e..empty? warn_print << ": unhandled exception\n" else if e..empty? warn_print << ": #{ e.class.name }\n" else = e..split("\n") warn_print << ": " if .size == 1 warn_print << "#{ e. } (#{ e.class.name })\n" else warn_print << [0] warn_print << " (#{ e.class.name })\n" warn_print << [1..-1].join("\n").chomp << "\n" end end end len = backtrace.size ## int skip = eclass == rb_eSysStackError; skip = e.is_a?(SystemStackError) ## #define TRACE_MAX (TRACE_HEAD+TRACE_TAIL+5) ## #define TRACE_HEAD 8 ## #define TRACE_TAIL 5 trace_head = 8 trace_tail = 5 trace_max = (trace_head + trace_tail + 5) ## ## for (i = 1; i < len; i++) { i = 1 while i < len ## if (TYPE(ptr[i]) == T_STRING) { ## warn_printf("\tfrom %s\n", RSTRING_PTR(ptr[i])); ## } warn_print << "\tfrom %s\n" % e.backtrace[i] ## if (skip && i == TRACE_HEAD && len > TRACE_MAX) { if skip && i == trace_head && len > trace_max ## warn_printf("\t ... %ld levels...\n", ## len - TRACE_HEAD - TRACE_TAIL); warn_print << "\t ... %d levels...\n" % (len - trace_head - trace_tail) ## i = len - TRACE_TAIL; i = len - trace_tail ## } end ## } i += 1 end warn_print end |
.raised? ⇒ Boolean
Does a block raise an a given exception
.
5 6 7 8 9 10 11 12 |
# File 'lib/core/facets/exception/raised.rb', line 5 def self.raised? #:yeild: begin yield false rescue self true end end |
.suppress(*exception_classes) ⇒ Object
Supress errors while executing a block, with execptions.
CREDIT: David Heinemeier Hansson, Thomas Sawyer
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/core/facets/exception/suppress.rb', line 7 def self.suppress(*exception_classes) exception_classes.each do |e| unless e < self raise ArgumentError, "exception #{e} not a subclass of #{self}" end end exception_classes = [self] | exception_classes begin yield rescue Exception => e raise unless exception_classes.any? { |cls| e.kind_of?(cls) } end end |
Instance Method Details
#detail ⇒ Object
Pretty string output of exception/error object useful for helpful debug messages.
8 9 10 11 12 13 14 |
# File 'lib/core/facets/exception/detail.rb', line 8 def detail if backtrace %{#{self.class.name}: #{}\n #{backtrace.join("\n ")}\n LOGGED FROM: #{caller[0]}} else %{#{self.class.name}: #{}\n LOGGED FROM: #{caller[0]}} end end |
#error_print ⇒ Object
Anyone have a better name for this method?
Formats the Exception so that it looks familiar, i.e. exactly like your interpreter does it.
75 76 77 |
# File 'lib/core/facets/exception/error_print.rb', line 75 def error_print Exception.error_print(self) end |
#set_message(string) ⇒ Object
See exception message.
5 6 7 |
# File 'lib/core/facets/exception/set_message.rb', line 5 def (string) @mesg = string.to_s end |