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.message } (#{ 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}: #{message}\n #{backtrace.join("\n ")}\n LOGGED FROM: #{caller[0]}} else %{#{self.class.name}: #{message}\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 |