Module: MerbExceptions::ControllerExtensions

Defined in:
lib/merb_exceptions/controller_extensions.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(mod) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/merb_exceptions/controller_extensions.rb', line 4

def self.included(mod)
  mod.class_eval do
    def base
      self.render_and_notify template_or_message, :layout=>false
    end
    
    def exception
      self.render_and_notify template_or_message, :layout=>false
    end
    
    private
    
    def template_or_message
      if File.exists?(Merb.root / 'app' / 'views' / 'exceptions' / 'internal_server_error.html.erb')
        :internal_server_error
      else
        '500 exception. Please customize this page by creating app/views/exceptions/internal_server_error.html.erb.'
      end
    end
  end
end

Instance Method Details

#notify_of_exceptionsObject



30
31
32
33
34
35
36
37
38
39
# File 'lib/merb_exceptions/controller_extensions.rb', line 30

def notify_of_exceptions
  request = self.request

  details = {}
  details['exceptions']      = request.exceptions
  details['params']          = params
  details['environment']     = request.env.merge( 'process' => $$ )
  details['url']             = "#{request.protocol}#{request.env["HTTP_HOST"]}#{request.uri}"
  MerbExceptions::Notification.new(details).deliver!
end

#render_and_notify(*opts) ⇒ Object



26
27
28
# File 'lib/merb_exceptions/controller_extensions.rb', line 26

def render_and_notify(*opts)
  self.render_then_call(render(*opts)) { notify_of_exceptions }
end