blob: 8fe8a1e7ebe8d06ed7c5b12abf8206e26bc92c98 (
plain)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
module OpenToxError
attr_accessor :http_code, :message, :cause
def initialize message=nil
message = message.to_s.gsub(/\A"|"\Z/, '') if message # remove quotes
super message
@http_code ||= 500
@message = message.to_s
@cause = cut_backtrace(caller)
$logger.error("\n"+JSON.pretty_generate({
:http_code => @http_code,
:message => @message,
:cause => @cause
}))
end
def cut_backtrace(trace)
if trace.is_a?(Array)
cut_index = trace.find_index{|line| line.match(/sinatra|minitest/)}
cut_index ||= trace.size
cut_index -= 1
cut_index = trace.size-1 if cut_index < 0
trace[0..cut_index]
else
trace
end
end
end
class RuntimeError
include OpenToxError
end
# clutters log file with library errors
#class NoMethodError
#include OpenToxError
#end
module OpenTox
class Error < RuntimeError
include OpenToxError
def initialize(code, message=nil)
@http_code = code
super message
end
end
# OpenTox errors
RestClientWrapper.known_errors.each do |error|
# create error classes
c = Class.new Error do
define_method :initialize do |message=nil|
super error[:code], message
end
end
OpenTox.const_set error[:class],c
# define global methods for raising errors, eg. bad_request_error
Object.send(:define_method, error[:method]) do |message,uri=nil,cause=nil|
raise c.new(message)
end
end
end
|