wrangler 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
|
|
1
1
|
module Wrangler
|
2
2
|
|
3
|
-
#
|
4
|
-
# should only be called once by the Config class and you can get/set
|
5
|
-
# returns a mapping from exception classes to http status codes
|
3
|
+
# A utility method that should only be used internal to wrangler. don't call
|
4
|
+
# this; it should only be called once by the Config class and you can get/set
|
5
|
+
# it there. returns a mapping from exception classes to http status codes
|
6
6
|
#-----------------------------------------------------------------------------
|
7
7
|
def self.codes_for_exception_classes
|
8
8
|
classes = {
|
@@ -36,11 +36,11 @@ module Wrangler
|
|
36
36
|
|
37
37
|
# class that holds configuration for the exception handling logic. may also
|
38
38
|
# include a helper method or two, but the main interaction with
|
39
|
-
# ExceptionHandler is setting and getting config, e.g.
|
39
|
+
# +ExceptionHandler+ is setting and getting config, e.g.
|
40
40
|
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
41
|
+
# Wrangler::ExceptionHandler.configure do |handler_config|
|
42
|
+
# handler_config.merge! :key => value
|
43
|
+
# end
|
44
44
|
#-----------------------------------------------------------------------------
|
45
45
|
class ExceptionHandler
|
46
46
|
|
@@ -100,7 +100,7 @@ module Wrangler
|
|
100
100
|
|
101
101
|
cattr_accessor :config
|
102
102
|
|
103
|
-
#
|
103
|
+
# Allows for overriding default configuration settings.
|
104
104
|
# in your environment.rb or environments/<env name>.rb, use a block that
|
105
105
|
# accepts one argument
|
106
106
|
# * recommend against naming it 'config' as you will probably be calling it
|
@@ -111,23 +111,23 @@ module Wrangler
|
|
111
111
|
# overwriting the arrays/hashes completely unless you don't want to
|
112
112
|
# take advantage of lots of out-of-the-box config
|
113
113
|
#
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
#
|
118
|
-
#
|
119
|
-
#
|
114
|
+
# Wrangler::ExceptionHandler.configure do |handler_config|
|
115
|
+
# handler_config[:key1] = value1
|
116
|
+
# handler_config[:key2] = value2
|
117
|
+
# handler_config[:key_for_a_hash].merge! :subkey => value
|
118
|
+
# handler_config[:key_for_an_array] << another_value
|
119
|
+
# end
|
120
120
|
#
|
121
121
|
# OR
|
122
122
|
#
|
123
|
-
#
|
124
|
-
#
|
125
|
-
#
|
126
|
-
#
|
127
|
-
#
|
128
|
-
#
|
123
|
+
# Wrangler::ExceptionHandler.configure do |handler_config|
|
124
|
+
# handler_config.merge! :key1 => value1,
|
125
|
+
# :key2 => value2,
|
126
|
+
# handler_config[:key_for_a_hash].merge! :subkey => value
|
127
|
+
# handler_config[:key_for_an_array] << another_value
|
128
|
+
# end
|
129
129
|
#
|
130
|
-
# NOTE
|
130
|
+
# *NOTE*: sure, you can change this configuration on the fly in your app, but
|
131
131
|
# we don't recommend it. plus, if you do and you're using delayed_job, there
|
132
132
|
# may end up being configuration differences between the rails process and
|
133
133
|
# the delayed_job process, resulting in unexpected behavior. so recommend
|
@@ -164,17 +164,27 @@ module Wrangler
|
|
164
164
|
# execute the code block passed as an argument, and follow notification
|
165
165
|
# rules if an exception bubbles out of the block.
|
166
166
|
#
|
167
|
-
#
|
168
|
-
#
|
169
|
-
#
|
170
|
-
#
|
167
|
+
# == arguments
|
168
|
+
# [proc_name] a name for the chunk of code you're running, included in logs
|
169
|
+
# and in the email notifications' subject line. optional, default
|
170
|
+
# is nil (nothing will be displayed).
|
171
|
+
# [message] a message to include in any logs regarding exceptions thrown.
|
172
|
+
# useful to explain what the context of the code was to help
|
173
|
+
# diagnose. optional, default is nil (no message will be displayed
|
174
|
+
# other than the exception's own message).
|
175
|
+
#
|
176
|
+
# == return value
|
177
|
+
# * if an exception bubbles out of the block, the exception is re-raised to
|
178
|
+
# calling code.
|
179
|
+
# * otherwise, returns nil
|
171
180
|
#-----------------------------------------------------------------------------
|
172
|
-
def notify_on_error(proc_name = nil, &block)
|
181
|
+
def notify_on_error(proc_name = nil, message = nil, &block)
|
173
182
|
begin
|
174
183
|
yield
|
175
184
|
rescue => exception
|
176
185
|
options = {}
|
177
186
|
options.merge! :proc_name => proc_name unless proc_name.nil?
|
187
|
+
options.merge! :error_messages => message unless message.nil?
|
178
188
|
handle_exception(exception, options)
|
179
189
|
end
|
180
190
|
|
@@ -192,13 +202,14 @@ module Wrangler
|
|
192
202
|
# the error condition will get logged and may result in notification,
|
193
203
|
# according to configuration see notify_on_exception?
|
194
204
|
#
|
195
|
-
# arguments
|
196
|
-
#
|
197
|
-
#
|
198
|
-
#
|
199
|
-
#
|
205
|
+
# == arguments
|
206
|
+
# [error_messages] a message or array of messages (each gets logged on
|
207
|
+
# separate log call) capturing the error condition that
|
208
|
+
# occurred. this will get logged AND sent in any
|
209
|
+
# notifications sent
|
200
210
|
#
|
201
|
-
#
|
211
|
+
# == options
|
212
|
+
# also, any of the options accepted by handle_exception
|
202
213
|
#-----------------------------------------------------------------------------
|
203
214
|
def handle_error(error_messages, options = {})
|
204
215
|
options.merge! :error_messages => error_messages
|
@@ -209,21 +220,21 @@ module Wrangler
|
|
209
220
|
# the main exception-handling method. decides whether to notify or not,
|
210
221
|
# whether to render an error page or not, and to make it happen.
|
211
222
|
#
|
212
|
-
# arguments
|
213
|
-
#
|
214
|
-
#
|
215
|
-
#
|
223
|
+
# == arguments
|
224
|
+
# [exception] the exception that was caught. can be nil, but should
|
225
|
+
# only be nil if notifications should always be sent,
|
226
|
+
# as notification rules are bypassed this case
|
216
227
|
#
|
217
|
-
# options
|
218
|
-
#
|
219
|
-
#
|
220
|
-
#
|
221
|
-
#
|
222
|
-
#
|
223
|
-
#
|
224
|
-
#
|
225
|
-
#
|
226
|
-
#
|
228
|
+
# == options
|
229
|
+
# [error_messages] any additional message to log and send in notification.
|
230
|
+
# can also be an array of messages (each gets logged
|
231
|
+
# separately)
|
232
|
+
# [request] the request object (if any) that resulted in the exception
|
233
|
+
# [render_errors] boolean indicating if an error page should be rendered
|
234
|
+
# or not (Rails only). default => false
|
235
|
+
# [proc_name] a string representation of the process/app that was running
|
236
|
+
# when the exception was raised. default value is
|
237
|
+
# Wrangler::ExceptionHandler.config[:app_name].
|
227
238
|
#-----------------------------------------------------------------------------
|
228
239
|
def handle_exception(exception, options = {})
|
229
240
|
request = options[:request]
|
@@ -237,18 +248,22 @@ module Wrangler
|
|
237
248
|
backtrace = caller
|
238
249
|
end
|
239
250
|
|
251
|
+
# extract the relevant request data and also filter out any params
|
252
|
+
# that should NOT be logged/emailed (passwords etc.)
|
253
|
+
request_data = request_data_from_request(request) unless request.nil?
|
254
|
+
|
240
255
|
if exception.nil?
|
241
256
|
exception_classname = nil
|
242
257
|
status_code = nil
|
243
258
|
log_error error_messages
|
244
259
|
log_error backtrace
|
260
|
+
log_error "Request params were:"
|
261
|
+
log_error request_data.to_yaml
|
245
262
|
error_string = ''
|
246
263
|
else
|
247
264
|
status_code =
|
248
265
|
Wrangler::ExceptionHandler.status_code_for_exception(exception)
|
249
266
|
|
250
|
-
request_data = request_data_from_request(request) unless request.nil?
|
251
|
-
|
252
267
|
log_exception(exception, request_data, status_code, error_messages)
|
253
268
|
|
254
269
|
if exception.is_a?(Class)
|
@@ -297,10 +312,10 @@ module Wrangler
|
|
297
312
|
end
|
298
313
|
|
299
314
|
|
300
|
-
# determine if the current context (local
|
315
|
+
# determine if the current context (+local?+, +background+) indicates that a
|
301
316
|
# notification should be sent. this applies all of the rules around
|
302
317
|
# notifications EXCEPT for what the current exception or status code is
|
303
|
-
# (see notify_on_exception
|
318
|
+
# (see +notify_on_exception?+ for that)
|
304
319
|
#-----------------------------------------------------------------------------
|
305
320
|
def notify_in_context?
|
306
321
|
if self.respond_to?(:local_request?)
|
data/lib/wrangler.rb
CHANGED
@@ -87,6 +87,11 @@ module Wrangler
|
|
87
87
|
|
88
88
|
|
89
89
|
# extract a hash of relevant (and serializable) parameters from a request
|
90
|
+
# NOTE: will obey +filter_paramters+ on any class including the module,
|
91
|
+
# avoid logging any data in the request that the app wouldn't log itself.
|
92
|
+
# +filter_paramters+ must follow the rails convention of returning
|
93
|
+
# the association but with the value obscured in some way
|
94
|
+
# (e.g. "[FILTERED]"). see +filter_paramter_logging+ .
|
90
95
|
#---------------------------------------------------------------------------
|
91
96
|
def request_data_from_request(request)
|
92
97
|
return nil if request.nil?
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<%= @protocol %><%= @host %><%= @uri %>
|
9
9
|
<% end -%>
|
10
10
|
|
11
|
-
A<%= @exception_classname || "n error" %> occurred:
|
11
|
+
A<%= "/an #{@exception_classname}" || "n error" %> occurred:
|
12
12
|
<%= @error_message %>
|
13
13
|
<% if @additional_messages.is_a?(Array) -%>
|
14
14
|
<%= @additional_messages.join("\n ") %>
|
data/wrangler.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{wrangler}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.15"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brian Percival"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-03-29}
|
13
13
|
s.description = %q{A gem for handling exceptions thrown inside your Rails app. If you include the
|
14
14
|
gem in your application controller, wrangler will render the error pages you
|
15
15
|
configure for each exception or HTTP error code. It will also handle notifying
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wrangler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Percival
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-29 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|