pboling-super_exception_notifier 1.6.5

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.
Files changed (38) hide show
  1. data/MIT-LICENSE +21 -0
  2. data/README.rdoc +419 -0
  3. data/VERSION.yml +4 -0
  4. data/exception_notification.gemspec +71 -0
  5. data/init.rb +1 -0
  6. data/lib/exception_notifiable.rb +278 -0
  7. data/lib/exception_notifier.rb +108 -0
  8. data/lib/exception_notifier_helper.rb +58 -0
  9. data/lib/hooks_notifier.rb +53 -0
  10. data/lib/notifiable.rb +8 -0
  11. data/lib/super_exception_notifier/custom_exception_classes.rb +16 -0
  12. data/lib/super_exception_notifier/custom_exception_methods.rb +50 -0
  13. data/rails/app/views/exception_notifiable/400.html +5 -0
  14. data/rails/app/views/exception_notifiable/403.html +6 -0
  15. data/rails/app/views/exception_notifiable/404.html +6 -0
  16. data/rails/app/views/exception_notifiable/405.html +6 -0
  17. data/rails/app/views/exception_notifiable/410.html +7 -0
  18. data/rails/app/views/exception_notifiable/418.html +6 -0
  19. data/rails/app/views/exception_notifiable/422.html +5 -0
  20. data/rails/app/views/exception_notifiable/423.html +6 -0
  21. data/rails/app/views/exception_notifiable/501.html +8 -0
  22. data/rails/app/views/exception_notifiable/503.html +6 -0
  23. data/rails/init.rb +18 -0
  24. data/test/exception_notifier_helper_test.rb +76 -0
  25. data/test/exception_notify_functional_test.rb +102 -0
  26. data/test/mocks/404.html +1 -0
  27. data/test/mocks/500.html +1 -0
  28. data/test/mocks/controllers.rb +46 -0
  29. data/test/test_helper.rb +28 -0
  30. data/views/exception_notifier/_backtrace.html.erb +1 -0
  31. data/views/exception_notifier/_environment.html.erb +14 -0
  32. data/views/exception_notifier/_inspect_model.html.erb +16 -0
  33. data/views/exception_notifier/_request.html.erb +8 -0
  34. data/views/exception_notifier/_session.html.erb +7 -0
  35. data/views/exception_notifier/_title.html.erb +3 -0
  36. data/views/exception_notifier/background_exception_notification.text.plain.erb +6 -0
  37. data/views/exception_notifier/exception_notification.text.plain.erb +10 -0
  38. metadata +100 -0
data/MIT-LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ # Copyright (c) 2008 Peter Boling
2
+ # Copyright (c) 2005 Jamis Buck
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,419 @@
1
+ = Super Exception Notifier
2
+
3
+ The Super Exception Notifier (SEN) gem provides a mailer object and a default set of
4
+ templates for sending email notifications when errors occur in a Rails
5
+ application, as well as a default set of error page templates to render
6
+ based on the status code assigned to an error. The gem is configurable,
7
+ allowing programmers to customize (all on a per environment basis!):
8
+
9
+ * the sender address of the email
10
+ * the recipient addresses
11
+ * text used to prepend and append the subject line
12
+ * the HTTP status codes to send emails for
13
+ * the error classes to send emails for
14
+ * alternatively, the error classes to not send emails for
15
+ * whether to send error emails or just render without sending anything
16
+ * the HTTP status and status code that gets rendered with specific errors
17
+ * the view path to the error page templates
18
+ * custom errors, with custom error templates
19
+ * fine-grained customization of error layouts (or no layout)
20
+
21
+ New features:
22
+
23
+ * get error notification for errors that occur in the console, using notifiable method
24
+ * Hooks into `git blame` output so you can get an idea of who (may) have introduced the bug
25
+ * Hooks into other website services (e.g. you can send exceptions to to Switchub.com)
26
+
27
+ The email includes information about the current request, session, and
28
+ environment, and also gives a backtrace of the exception.
29
+
30
+ This gem is based on the wonderful exception_notification plugin
31
+ created by Jamis Buck. I have modified it extensively and merged many of the improvements from
32
+ a dozen or so other forks. It remains a (mostly) drop in replacement with greatly extended
33
+ functionality and customization options. I keep it up to date with the work on the core team's
34
+ branch.
35
+
36
+ The original is here:
37
+
38
+ http://github.com/rails/exception_notification/tree/master
39
+
40
+ The current version of this gem is a git fork of the original and
41
+ has been updated to include the latest improvements from the original,
42
+ including compatability with Rails 2.1, 2.2, 2.3, as well as many improvements from
43
+ the other forks on github. I merge them in when I have time, and when the
44
+ changes fit nicely with the enhancements I have already made.
45
+
46
+ This fork of Exception Notifier is in production use on several large websites (top 5000).
47
+
48
+ == Installation
49
+
50
+ Gem Using Git building from source:
51
+
52
+ mkdir -p ~/src
53
+ cd ~/src
54
+ git clone git://github.com/pboling/exception_notification.git
55
+ cd exception_notification
56
+ gem build exception_notification.gemspec
57
+ sudo gem install super_exception_notification-1.6.4.gem # (Or whatever version gets built)
58
+
59
+ Then cd to your rails app to optionally freeze the gem into your app:
60
+
61
+ rake gems:freeze GEM=super_exception_notifier
62
+
63
+ Then in your environment.rb:
64
+
65
+ config.gem 'super_exception_notifier',
66
+ :version => '~> 1.6.5',
67
+ :lib => "exception_notifier"
68
+
69
+
70
+ Installing Gem from Github's Gem Server:
71
+
72
+ gem sources -a http://gems.github.com
73
+ sudo gem install pboling-super_exception_notifier
74
+
75
+ Then in your environment.rb:
76
+
77
+ config.gem 'pboling-super_exception_notifier',
78
+ :version => '~> 1.6.5',
79
+ :lib => "exception_notifier",
80
+ :source => 'http://gems.github.com'
81
+
82
+
83
+ Plugin using Git:
84
+
85
+ # Installation as plugin might work... I haven't tried it.
86
+ ./script/plugin install git://github.com/pboling/exception_notification.git
87
+
88
+ SVN Plugin (very deprecated, no longer updated, install Git!):
89
+
90
+ ./script/plugin install http://super-exception-notifier.googlecode.com/svn/trunk/super_exception_notifier
91
+
92
+ == Usage
93
+
94
+ 1. Include the ExceptionNotifiable mixin in whichever controller you want
95
+ to generate error emails (typically ApplicationController):
96
+
97
+ class ApplicationController < ActionController::Base
98
+ include ExceptionNotifiable
99
+ ...
100
+ end
101
+
102
+ 2. Specify the email recipients in your environment:
103
+
104
+ ExceptionNotifier.configure_exception_notifier do |config|
105
+ config[:exception_recipients] = %w(joe@example.com bill@example.com)
106
+ end
107
+
108
+ 3. Make sure you have your ActionMailer server settings correct if you are using the e-mail features.
109
+
110
+ 4. That's it! The defaults take care of the rest.
111
+
112
+ == Basic Configuration
113
+
114
+ You can tweak other values to your liking, as well. In your environment file,
115
+ just set any or all of the following values (defaults are shown):
116
+
117
+ ExceptionNotifier.configure_exception_notifier do |config|
118
+ # If left empty web hooks will not be engaged
119
+ config[:web_hooks] = []
120
+ config[:app_name] = "[MYAPP]"
121
+ config[:sender_address] = %("#{(defined?(Rails) ? Rails.env : RAILS_ENV).capitalize} Error" <super.exception.notifier@example.com>)
122
+ config[:exception_recipients] = []
123
+ # Customize the subject line
124
+ config[:subject_prepend] = "[#{(defined?(Rails) ? Rails.env : RAILS_ENV).capitalize} ERROR] "
125
+ config[:subject_append] = nil
126
+ # Include which sections of the exception email?
127
+ config[:sections] = %w(request session environment backtrace)
128
+ # Only use this gem to render, never email
129
+ #defaults to false - meaning by default it sends email. Setting true will cause it to only render the error pages, and NOT email.
130
+ config[:render_only] = false
131
+ config[:skip_local_notification = true
132
+ # Example:
133
+ #config[:view_path] = 'app/views/error'
134
+ config[:view_path] = nil
135
+ #Error Notification will be sent if the HTTP response code for the error matches one of the following error codes
136
+ config[:send_email_error_codes] = %W( 405 500 503 )
137
+ #Error Notification will be sent if the error class matches one of the following error error classes
138
+ config[:send_email_error_classes] = %W( )
139
+ config[:send_email_other_errors] = true
140
+ # If you set this SEN will
141
+ config[:git_repo_path] = nil
142
+ config[:template_root] = "#{File.dirname(__FILE__)}/../views"
143
+ end
144
+
145
+ == Environmental Behavior
146
+
147
+ Email notifications will only occur when the IP address is determined not to
148
+ be local. You can specify certain addresses to always be local so that you'll
149
+ get a detailed error instead of the generic error page. You do this in your
150
+ controller (or even per-controller):
151
+
152
+ consider_local "64.72.18.143", "14.17.21.25"
153
+
154
+ You can specify subnet masks as well, so that all matching addresses are
155
+ considered local:
156
+
157
+ consider_local "64.72.18.143/24"
158
+
159
+ The address "127.0.0.1" is always considered local. If you want to completely
160
+ reset the list of all addresses (for instance, if you wanted "127.0.0.1" to
161
+ NOT be considered local), you can simply do, somewhere in your controller:
162
+
163
+ local_addresses.clear
164
+
165
+ == Error Layout Customization
166
+
167
+ SEN allows you to specify the layout for errors at several levels:
168
+
169
+ * all errors use same layout site-wide
170
+ * customize a single controller
171
+ * can use the same layout as the controller
172
+ * no layout at all
173
+
174
+ By default it will render the error with the layout the controller is using. You just need to set in application.rb (assuming you included ExceptionNotifiable in applicaiton.rb) (or per-controller):
175
+
176
+ # All Same site-wide (in application.rb)
177
+ self.error_layout = 'my_error_layout'
178
+ # customize a single controller
179
+ self.error_layout = 'example_controller_error_layout'
180
+ # Same layout as the current controller is using
181
+ self.error_layout = true
182
+ # No layout at all
183
+ self.error_layout = false
184
+
185
+ SuperExceptionNotifier allows customization of the error classes that will be handled, and which HTTP status codes they will be handled as: (default values are shown)
186
+ Example in application.rb or on a per-controller basis:
187
+
188
+ self.http_error_codes = { "200" => "OK"
189
+ "400" => "Bad Request",
190
+ "403" => "Forbidden",
191
+ "404" => "Not Found",
192
+ "405" => "Method Not Allowed",
193
+ "410" => "Gone",
194
+ "500" => "Internal Server Error",
195
+ "501" => "Not Implemented",
196
+ "503" => "Service Unavailable" }
197
+
198
+ Q: Why is "200" listed as an error code?
199
+
200
+ A: You may want to have multiple custom errors that the standard HTTP status codes weren't designed to accommodate, and for which you need to render customized pages. Explanation and examples are a little further down...
201
+
202
+ Then you can specify which of those should send out emails!
203
+ By default, the email notifier will only notify on critical errors (405 500 503 statuses).
204
+ For example, ActiveRecord::RecordNotFound and ActionController::UnknownAction errors will simply render the contents of #{this gem's root}/rails/app/views/exception_notifiable/###.html file, where ### is 400 and 501 respectively.
205
+
206
+ ExceptionNotifier.config[:send_email_error_codes] = %w( 400 405 500 503 )
207
+
208
+ You can also configure the text of the HTTP request's response status code: (by default only the last 6 will be handled, the first 6 are made up error classes)
209
+ Example in application.rb or on a per-controller basis:
210
+
211
+ self.rails_error_classes = {
212
+ NameError => "503",
213
+ TypeError => "503",
214
+ ActiveRecord::RecordNotFound => "400",
215
+ }
216
+
217
+ To make up your own error classes, you can define them in environment.rb, or in application.rb, or wherever you need them.
218
+ These are defined by the gem and are available to you in controllers once ExceptionNotifiable is included in application.rb or the current controller:
219
+
220
+ class AccessDenied < StandardError; end
221
+ class ResourceGone < StandardError; end
222
+ class NotImplemented < StandardError; end
223
+ class PageNotFound < StandardError; end
224
+ class InvalidMethod < StandardError; end
225
+ class CorruptData < StandardError; end
226
+ class MethodDisabled < StandardError; end
227
+
228
+ These error classes can be raised in before filters, or controller actions like so:
229
+ def owner_required
230
+ raise AccessDenied unless current_user.id == @photo.user_id
231
+ end
232
+
233
+ They can also be wrapped in methods in application.rb (or a mixin for it) like so:
234
+ def access_denied
235
+ raise AccessDenied
236
+ end
237
+
238
+ And then used like so (as before filter in a controller):
239
+ def owner_required
240
+ access_denied unless current_user.id == @photo.user_id
241
+ end
242
+
243
+ You may also configure which HTTP status codes will send out email: (by default = [], email sending is defined by status code only)
244
+
245
+ ExceptionNotifier.config[:send_email_error_classes] = [
246
+ NameError,
247
+ TypeError,
248
+ ActionController::RoutingError
249
+ ]
250
+
251
+ Email will be sent if the error matches one of the error classes to send email for OR if the error's assigned HTTP status code is configured to send email!
252
+
253
+ You can also customize what is rendered. SuperExceptionNotifier will render the first file it finds in this order:
254
+
255
+ #{RAILS_ROOT}/public/###.html
256
+ #{RAILS_ROOT}/#ExceptionNotifier.config[:view_path]}/###.html
257
+ #{this gem's root}/rails/app/views/exception_notifiable/#{status_cd}.html
258
+
259
+ And if none of those paths has a valid file to render, this one wins:
260
+
261
+ #{RAILS_ROOT}/rails/app/views/exception_notifiable/500.html
262
+
263
+ You can configure ExceptionNotifier.config[:view_path] in your environment file like this:
264
+
265
+ ExceptionNotifier.config[:view_path] = 'app/views/error'
266
+
267
+ So public trumps your custom path which trumps the gem's default path.
268
+
269
+ == Custom Error Pages
270
+
271
+ You can render CUSTOM error pages! Here's how:
272
+
273
+ 1. Make sure 200 is one of your status codes (optional)
274
+ * self.http_error_codes = { "200" => "OK" }
275
+ 2. Setup your custom error class, e.g. in config/environment.rb:
276
+ * class InsufficientFundsForWithdrawal < StandardError; end
277
+ 3. Setup SuperExceptionNotifier to handle the error, in app/controllers/application.rb:
278
+ * self.rails_error_classes = { InsufficientFundsForWithdrawal => "200" }
279
+ 4. Set your custom error's view path:
280
+ * ExceptionNotifier.config[:view_path] = 'app/views/error'
281
+ 5. Create a view for the error. SuperExceptionNotifier munges the error's class by converting to a string and then replacing consecutive ':' with '' and then downcases it:
282
+ * touch app/views/error/insufficient_funds_for_withdrawal.html
283
+ 6. If you want a custom layout (by default it will render the error with the latout the controller is using) you just need to set, in application.rb (or per-controller):
284
+ * self.error_layout = 'my_error_layout' #or = true for the same layout as the controller, or = false for no layout
285
+ 7. That's it! All errors that are set to be handled with a status of "200" will render a custom page.
286
+ 8. If you want to have errors that render custom pages also send emails then you'll need to:
287
+ * ExceptionNotifier.config[:send_email_error_classes] = [ InsufficientFundsForWithdrawal ]
288
+
289
+ == Customization
290
+
291
+ By default, the notification email includes four parts: request, session,
292
+ environment, and backtrace (in that order). You can customize how each of those
293
+ sections are rendered by placing a partial named for that part in your
294
+ app/views/exception_notifier directory (e.g., _session.rhtml). Each partial has
295
+ access to the following variables:
296
+
297
+ * @controller: the controller that caused the error
298
+ * @request: the current request object
299
+ * @exception: the exception that was raised
300
+ * @host: the name of the host that made the request
301
+ * @backtrace: a sanitized version of the exception's backtrace
302
+ * @rails_root: a sanitized version of RAILS_ROOT
303
+ * @data: a hash of optional data values that were passed to the notifier
304
+ * @sections: the array of sections to include in the email
305
+
306
+ You can reorder the sections, or exclude sections completely, by altering the
307
+ ExceptionNotifier.config[:sections] variable.
308
+
309
+ == Not working due to nature of gem vs plugin
310
+
311
+ You can even add new sections that
312
+ describe application-specific data--just add the section's name to the list
313
+ (whereever you'd like), and define the corresponding partial. Then, if your
314
+ new section requires information that isn't available by default, make sure
315
+ it is made available to the email using the exception_data macro:
316
+
317
+ class ApplicationController < ActionController::Base
318
+ ...
319
+ protected
320
+ exception_data :additional_data
321
+
322
+ def additional_data
323
+ { :document => @document,
324
+ :person => @person }
325
+ end
326
+ ...
327
+ end
328
+
329
+ In the above case, @document and @person would be made available to the email
330
+ renderer, allowing your new section(s) to access and display them. See the
331
+ existing sections defined by the gem for examples of how to write your own.
332
+
333
+ == Exceptions Without a Controller
334
+
335
+ You may also use ExceptionNotifier to send information about exceptions that
336
+ occur while running application scripts without a controller. Simply wrap the
337
+ code you want to watch with the notifiable method:
338
+
339
+ /PATH/TO/APP/script/runner -e production "notifiable { run_billing }"
340
+
341
+ == Advanced Customization
342
+
343
+ If you want to seriously modify the rules for the notification, you will need to implement your
344
+ own rescue_action_in_public method. You can look at the default implementation
345
+ in ExceptionNotifiable for an example of how to go about that.
346
+
347
+ == HTTP Error Codes Used by Exception Notifier by default
348
+
349
+ For reference these are the error codes that Exception Notifier can inherently handle.
350
+ Official w3.org HTTP 1.1 Error Codes:
351
+ http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
352
+ Not all the error codes in use today are on that list, so here's Apache's list:
353
+ http://www.askapache.com/htaccess/apache-status-code-headers-errordocument.html#apache-response-codes-57
354
+
355
+ 400 Bad Request
356
+ * The request could not be understood by the server due to malformed syntax.
357
+ * The client SHOULD NOT repeat the request without modifications.
358
+ 403 Forbidden
359
+ * The server understood the request, but is refusing to fulfill it
360
+ 404 Not Found
361
+ * The server has not found anything matching the Request-URI
362
+ 405 Method Not Allowed
363
+ * The method specified in the Request-Line is not allowed for the resource identified by the Request-URI
364
+ * This is not implemented entirely as the response is supposed to contain a list of accepted methods.
365
+ 410 Gone
366
+ * The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent
367
+ 418 I'm a teapot
368
+ * ErrorDocument I'm a teapot | Sample 418 I'm a teapot
369
+ * The HTCPCP server is a teapot. The responding entity MAY be short and stout. Defined by the April Fools specification RFC 2324. See Hyper Text Coffee Pot Control Protocol for more information.
370
+ 422 Unprocessable Entity
371
+ * ErrorDocument Unprocessable Entity | Sample 422 Unprocessable Entity
372
+ * (WebDAV) (RFC 4918 ) - The request was well-formed but was unable to be followed due to semantic errors.
373
+ 423 Locked
374
+ * ErrorDocument Locked | Sample 423 Locked
375
+ * (WebDAV) (RFC 4918 ) - The resource that is being accessed is locked
376
+ 500 Internal Server Error
377
+ * The server encountered an unexpected condition which prevented it from fulfilling the request.
378
+ 501 Not Implemented
379
+ * The server does not support the functionality required to fulfill the request.
380
+ 503 Service Unavailable
381
+ * The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
382
+
383
+ == CSS
384
+
385
+ All the standard error pages that come in the gem render a div with a class of "dialog",
386
+ so put this in a stylesheet you are including in your app to get you started (like stardard rails error style):
387
+
388
+ <style type="text/css">
389
+ div.dialog {
390
+ width: 25em;
391
+ padding: 0 4em;
392
+ margin: 4em auto 0 auto;
393
+ border: 1px solid #ccc;
394
+ border-right-color: #999;
395
+ border-bottom-color: #999;
396
+ }
397
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
398
+ </style>
399
+
400
+
401
+ Copyright (c) 2008 Peter H. Boling, released under the MIT license
402
+ Portions Copyright (c) 2005 Jamis Buck, released under the MIT license
403
+
404
+ == jamescook changes
405
+
406
+ Hooks into `git blame` output so you can get an idea of who (may) have introduced the bug :)
407
+ -- Usage: set ExceptionNotifier.config[:git_repo_path] to the path of your git repo.
408
+
409
+
410
+ == ismasan changes
411
+
412
+ POST exception data in JSON format to the specified services for processing
413
+ -- Usage:
414
+ ExceptionNotifier.configure_exception_notifier do |config|
415
+ config[:web_hooks] = %w(http://some-hook-service.example.com http://another-hook-service.example.com) # defaults to []
416
+ config[:app_name] = "[APP]" # defaults to [MYAPP]
417
+ config[:exception_recipients] = %w(my@example.com another@example.com) # defaults to []
418
+ config[:sender_address] = %("Application Error" <app.error@myapp.com>) # defaults to super.exception.notifier@example.com
419
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 6
4
+ :patch: 5
@@ -0,0 +1,71 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'super_exception_notifier'
3
+ s.version = '1.6.5'
4
+ s.date = '2009-08-12'
5
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
+
7
+ s.summary = %q{Allows unhandled (and handled!) exceptions to be captured and sent via email}
8
+ s.description = %q{Allows customization of:
9
+ * the sender address of the email
10
+ * the recipient addresses
11
+ * the text used to prefix the subject line
12
+ * the HTTP status codes to send emails for
13
+ * the error classes to send emails for
14
+ * alternatively, the error classes to not send emails for
15
+ * whether to send error emails or just render without sending anything
16
+ * the HTTP status and status code that gets rendered with specific errors
17
+ * the view path to the error page templates
18
+ * custom errors, with custom error templates
19
+ * define error layouts at application or controller level, or use the controller's own default layout, or no layout at all
20
+ * get error notification for errors that occur in the console, using notifiable method
21
+ * Override the gem's handling and rendering with explicit rescue statements inline.}
22
+
23
+ s.authors = ['Peter Boling', 'Jacques Crocker', 'Jamis Buck']
24
+ s.email = 'peter.boling@gmail.com'
25
+ s.homepage = 'http://github.com/pboling/exception_notification'
26
+
27
+ s.has_rdoc = true
28
+
29
+ s.add_dependency 'rails', ['>= 2.1']
30
+
31
+ s.files = ["MIT-LICENSE",
32
+ "README.rdoc",
33
+ "exception_notification.gemspec",
34
+ "init.rb",
35
+ "lib/super_exception_notifier/custom_exception_classes.rb",
36
+ "lib/super_exception_notifier/custom_exception_methods.rb",
37
+ "lib/exception_notifiable.rb",
38
+ "lib/exception_notifier.rb",
39
+ "lib/hooks_notifier.rb",
40
+ "lib/exception_notifier_helper.rb",
41
+ "lib/notifiable.rb",
42
+ "rails/init.rb",
43
+ "rails/app/views/exception_notifiable/400.html",
44
+ "rails/app/views/exception_notifiable/403.html",
45
+ "rails/app/views/exception_notifiable/404.html",
46
+ "rails/app/views/exception_notifiable/405.html",
47
+ "rails/app/views/exception_notifiable/410.html",
48
+ "rails/app/views/exception_notifiable/418.html",
49
+ "rails/app/views/exception_notifiable/422.html",
50
+ "rails/app/views/exception_notifiable/423.html",
51
+ "rails/app/views/exception_notifiable/501.html",
52
+ "rails/app/views/exception_notifiable/503.html",
53
+ "views/exception_notifier/_backtrace.html.erb",
54
+ "views/exception_notifier/_environment.html.erb",
55
+ "views/exception_notifier/_inspect_model.html.erb",
56
+ "views/exception_notifier/_request.html.erb",
57
+ "views/exception_notifier/_session.html.erb",
58
+ "views/exception_notifier/_title.html.erb",
59
+ "views/exception_notifier/background_exception_notification.text.plain.erb",
60
+ "views/exception_notifier/exception_notification.text.plain.erb",
61
+ "VERSION.yml"]
62
+
63
+
64
+ s.test_files = ["test/exception_notifier_helper_test.rb",
65
+ "test/exception_notify_functional_test.rb",
66
+ "test/test_helper.rb",
67
+ "test/mocks/404.html",
68
+ "test/mocks/500.html",
69
+ "test/mocks/controllers.rb"]
70
+
71
+ end