Class: ActionDispatch::ExceptionWrapper
- Inherits:
-
Object
- Object
- ActionDispatch::ExceptionWrapper
show all
- Defined in:
- lib/action_dispatch/middleware/exception_wrapper.rb
Defined Under Namespace
Classes: SourceMapLocation
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(backtrace_cleaner, exception) ⇒ ExceptionWrapper
Returns a new instance of ExceptionWrapper.
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 51
def initialize(backtrace_cleaner, exception)
@backtrace_cleaner = backtrace_cleaner
@exception_class_name = exception.class.name
@wrapped_causes = wrapped_causes_for(exception, backtrace_cleaner)
@exception = exception
if exception.is_a?(SyntaxError)
@exception = ActiveSupport::SyntaxErrorProxy.new(exception)
end
@backtrace = build_backtrace
end
|
Instance Attribute Details
#backtrace_cleaner ⇒ Object
Returns the value of attribute backtrace_cleaner.
49
50
51
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 49
def backtrace_cleaner
@backtrace_cleaner
end
|
#exception ⇒ Object
Returns the value of attribute exception.
49
50
51
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 49
def exception
@exception
end
|
#exception_class_name ⇒ Object
Returns the value of attribute exception_class_name.
49
50
51
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 49
def exception_class_name
@exception_class_name
end
|
#wrapped_causes ⇒ Object
Returns the value of attribute wrapped_causes.
49
50
51
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 49
def wrapped_causes
@wrapped_causes
end
|
Class Method Details
.status_code_for_exception(class_name) ⇒ Object
181
182
183
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 181
def self.status_code_for_exception(class_name)
ActionDispatch::Response.rack_status_code(@@rescue_responses[class_name])
end
|
Instance Method Details
#actions ⇒ Object
102
103
104
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 102
def actions
ActiveSupport::ActionableError.actions(@exception)
end
|
#annotated_source_code ⇒ Object
114
115
116
117
118
119
120
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 114
def annotated_source_code
if exception.respond_to?(:annotated_source_code)
exception.annotated_source_code
else
[]
end
end
|
#application_trace ⇒ Object
136
137
138
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 136
def application_trace
clean_backtrace(:silent)
end
|
#corrections ⇒ Object
90
91
92
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 90
def corrections
@exception.corrections
end
|
#exception_id ⇒ Object
234
235
236
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 234
def exception_id
exception.object_id
end
|
#exception_inspect ⇒ Object
230
231
232
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 230
def exception_inspect
exception.inspect
end
|
#exception_name ⇒ Object
222
223
224
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 222
def exception_name
exception.cause.class.to_s
end
|
#exception_trace ⇒ Object
130
131
132
133
134
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 130
def exception_trace
trace = application_trace
trace = framework_trace if trace.empty? && !silent_exceptions.include?(@exception_class_name)
trace
end
|
#failures ⇒ Object
78
79
80
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 78
def failures
@exception.failures
end
|
#file_name ⇒ Object
94
95
96
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 94
def file_name
@exception.file_name
end
|
#framework_trace ⇒ Object
140
141
142
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 140
def framework_trace
clean_backtrace(:noise)
end
|
#full_trace ⇒ Object
144
145
146
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 144
def full_trace
clean_backtrace(:all)
end
|
#has_cause? ⇒ Boolean
74
75
76
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 74
def has_cause?
@exception.cause
end
|
#has_corrections? ⇒ Boolean
82
83
84
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 82
def has_corrections?
@exception.respond_to?(:original_message) && @exception.respond_to?(:corrections)
end
|
#line_number ⇒ Object
98
99
100
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 98
def line_number
@exception.line_number
end
|
#message ⇒ Object
226
227
228
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 226
def message
exception.message
end
|
#original_message ⇒ Object
86
87
88
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 86
def original_message
@exception.original_message
end
|
#rescue_response? ⇒ Boolean
200
201
202
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 200
def rescue_response?
@@rescue_responses.key?(exception.class.name)
end
|
#rescue_template ⇒ Object
122
123
124
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 122
def rescue_template
@@rescue_templates[@exception_class_name]
end
|
#routing_error? ⇒ Boolean
62
63
64
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 62
def routing_error?
@exception.is_a?(ActionController::RoutingError)
end
|
#show?(request) ⇒ Boolean
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 185
def show?(request)
config = request.("action_dispatch.show_exceptions")
case config
when :none
false
when :rescuable
rescue_response?
else
true
end
end
|
204
205
206
207
208
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 204
def
backtrace.map do |trace|
(trace).merge(trace: trace)
end
end
|
#source_to_show_id ⇒ Object
218
219
220
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 218
def source_to_show_id
(traces[trace_to_show].first || {})[:id]
end
|
#status_code ⇒ Object
126
127
128
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 126
def status_code
self.class.status_code_for_exception(unwrapped_exception.class.name)
end
|
#sub_template_message ⇒ Object
70
71
72
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 70
def sub_template_message
@exception.sub_template_message
end
|
#template_error? ⇒ Boolean
66
67
68
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 66
def template_error?
@exception.is_a?(ActionView::Template::Error)
end
|
#trace_to_show ⇒ Object
210
211
212
213
214
215
216
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 210
def trace_to_show
if traces["Application Trace"].empty? && rescue_template != "routing_error"
"Full Trace"
else
"Application Trace"
end
end
|
#traces ⇒ Object
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 148
def traces
application_trace_with_ids = []
framework_trace_with_ids = []
full_trace_with_ids = []
application_traces = application_trace.map(&:to_s)
full_trace = backtrace_cleaner&.clean_locations(backtrace, :all).presence || backtrace
full_trace.each_with_index do |trace, idx|
filtered_trace = backtrace_cleaner&.clean_frame(trace, :all) || trace
trace_with_id = {
exception_object_id: @exception.object_id,
id: idx,
trace: trace,
filtered_trace: filtered_trace,
}
if application_traces.include?(filtered_trace.to_s)
application_trace_with_ids << trace_with_id
else
framework_trace_with_ids << trace_with_id
end
full_trace_with_ids << trace_with_id
end
{
"Application Trace" => application_trace_with_ids,
"Framework Trace" => framework_trace_with_ids,
"Full Trace" => full_trace_with_ids
}
end
|
#unwrapped_exception ⇒ Object
106
107
108
109
110
111
112
|
# File 'lib/action_dispatch/middleware/exception_wrapper.rb', line 106
def unwrapped_exception
if wrapper_exceptions.include?(@exception_class_name)
@exception.cause
else
@exception
end
end
|