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