1
1
require " ./base"
2
+ require " ../exceptions/page"
2
3
3
4
module Amber::Controller
4
5
class Error < Base
@@ -7,49 +8,46 @@ module Amber::Controller
7
8
@context .response.content_type = content_type
8
9
end
9
10
10
- def not_found
11
- response_format( @ex .message)
11
+ def bad_request
12
+ response_format
12
13
end
13
14
14
- def internal_server_error
15
- response_format( " ERROR: #{ internal_server_error_message } " )
15
+ def forbidden
16
+ response_format
16
17
end
17
18
18
- def forbidden
19
- response_format(@ex .message)
19
+ def not_found
20
+ response_format
21
+ end
22
+
23
+ def internal_server_error
24
+ response_format
20
25
end
21
26
22
27
private def content_type
23
28
if context.request.headers[" Accept" ]?
24
29
request.headers[" Accept" ].split(" ," ).first
25
30
else
26
- " text/html "
31
+ " text/plain "
27
32
end
28
33
end
29
34
30
- private def internal_server_error_message
31
- # IMPORTANT: #inspect_with_backtrace will fail in some situations which breaks the tests.
32
- # Even if you call @ex.callstack you'll notice that backtrace is nil.
33
- # #backtrace? is supposed to be safe but it exceptions anyway.
34
- # Please don't remove this without verifying that crystal core has been fixed first.
35
- @ex .inspect_with_backtrace
36
- rescue ex : IndexError
37
- @ex .message
38
- rescue ex
39
- <<-ERROR
40
- Original Error: #{ @ex .message}
41
- Error during 'inspect_with_backtrace': #{ ex.message }
42
- ERROR
43
- end
44
-
45
- private def response_format (message )
35
+ private def response_format
46
36
case content_type
47
37
when " application/json"
48
- {" error" : message}.to_json
38
+ {" error" : @ex . message}.to_json
49
39
when " text/html"
50
- " <html><body><pre>#{ message } </pre></body></html>"
40
+ html_response
41
+ else
42
+ @ex .message
43
+ end
44
+ end
45
+
46
+ private def html_response
47
+ if Amber .env.development?
48
+ Amber ::Exceptions ::Page .for_runtime_exception(context, @ex ).to_s
51
49
else
52
- message
50
+ " <html><body><pre> #{ @ex . message} </pre></body></html> "
53
51
end
54
52
end
55
53
end
0 commit comments