lib/chatterbox/rails_catcher.rb in chatterbox-0.5.1 vs lib/chatterbox/rails_catcher.rb in chatterbox-0.5.3
- old
+ new
@@ -1,25 +1,54 @@
+require 'ostruct'
+
module Chatterbox
module RailsCatcher
+ delegate :logger, :to => Chatterbox
+ delegate :configuration, :to => self
+ def self.default_ignored_exceptions
+ ['ActiveRecord::RecordNotFound', 'ActionController::RoutingError',
+ 'ActionController::InvalidAuthenticityToken', 'ActionController::UnknownAction',
+ 'CGI::Session::CookieStore::TamperedWithCookie' ]
+ end
+
+ def self.configuration
+ @configuration ||= OpenStruct.new(:ignore => default_ignored_exceptions)
+ end
+
+ def self.configure
+ yield(configuration)
+ end
+
def self.included(base)
if base.instance_methods.map(&:to_s).include? 'rescue_action_in_public' and !base.instance_methods.map(&:to_s).include? 'rescue_action_in_public_without_chatterbox'
base.send(:alias_method, :rescue_action_in_public_without_chatterbox, :rescue_action_in_public)
base.send(:alias_method, :rescue_action_in_public, :rescue_action_in_public_with_chatterbox)
base.hide_action(:rescue_action_in_public_with_chatterbox, :rescue_action_in_public_without_chatterbox)
end
end
# Overrides the rescue_action method in ActionController::Base, but does not inhibit
# any custom processing that is defined with Rails 2's exception helpers.
- def rescue_action_in_public_with_chatterbox exception
- Chatterbox.logger.debug { "#{self.class}#rescue_action_in_public_with_chatterbox: caught exception #{exception} - about to handle"}
- options = extract_exception_details(exception)
- Chatterbox.handle_notice(options)
- Chatterbox.logger.debug { "#{self.class}#rescue_action_in_public_with_chatterbox: handing exception #{exception} off to normal rescue handling"}
-
+ def rescue_action_in_public_with_chatterbox(exception)
+ logger.debug { "#{log_prefix} caught exception #{exception} - about to handle" }
+ unless on_ignore_list?(exception)
+ Chatterbox.handle_notice(extract_exception_details(exception))
+ end
+ logger.debug { "#{log_prefix} handing exception #{exception} off to normal rescue handling" }
rescue_action_in_public_without_chatterbox(exception)
+ end
+
+ private
+
+ def log_prefix
+ "#{self.class}#rescue_action_in_public_with_chatterbox:"
+ end
+
+ def on_ignore_list?(exception)
+ configuration.ignore.include?(exception.class) ||
+ configuration.ignore.include?(exception.class.to_s)
end
def extract_exception_details(exception)
options = { :exception => exception, :request => request }
options = Chatterbox::ExceptionNotification::Extracter.wrap(options)
\ No newline at end of file