1
0
mirror of https://github.com/danbee/danbarberphoto synced 2025-03-04 08:49:07 +00:00
danbarberphoto/vendor/plugins/exception_notification/lib/exception_notifier/notifier.rb
2010-10-14 07:10:25 -04:00

84 lines
2.3 KiB
Ruby

require 'action_mailer'
require 'pp'
class ExceptionNotifier
class Notifier < ActionMailer::Base
self.mailer_name = 'exception_notifier'
self.append_view_path "#{File.dirname(__FILE__)}/views"
class << self
def default_sender_address
%("Exception Notifier" <exception.notifier@default.com>)
end
def default_exception_recipients
[]
end
def default_email_prefix
"[ERROR] "
end
def default_sections
%w(request session environment backtrace)
end
def default_options
{ :sender_address => default_sender_address,
:exception_recipients => default_exception_recipients,
:email_prefix => default_email_prefix,
:sections => default_sections }
end
end
class MissingController
def method_missing(*args, &block)
end
end
def exception_notification(env, exception)
@env = env
@exception = exception
@options = (env['exception_notifier.options'] || {}).reverse_merge(self.class.default_options)
@kontroller = env['action_controller.instance'] || MissingController.new
@request = ActionDispatch::Request.new(env)
@backtrace = clean_backtrace(exception)
@sections = @options[:sections]
data = env['exception_notifier.exception_data'] || {}
data.each do |name, value|
instance_variable_set("@#{name}", value)
end
prefix = "#{@options[:email_prefix]}#{@kontroller.controller_name}##{@kontroller.action_name}"
subject = "#{prefix} (#{@exception.class}) #{@exception.message.inspect}"
mail(:to => @options[:exception_recipients], :from => @options[:sender_address], :subject => subject) do |format|
format.text { render "#{mailer_name}/exception_notification" }
end
end
private
def clean_backtrace(exception)
Rails.respond_to?(:backtrace_cleaner) ?
Rails.backtrace_cleaner.send(:filter, exception.backtrace) :
exception.backtrace
end
helper_method :inspect_object
def inspect_object(object)
case object
when Hash, Array
object.inspect
when ActionController::Base
"#{object.controller_name}##{object.action_name}"
else
object.to_s
end
end
end
end