Sha256: 3533c4bdc08d69d23b39dbf6527989e3602882f87e75156695b8de7381957759

Contents?: true

Size: 1.53 KB

Versions: 7

Compression:

Stored size: 1.53 KB

Contents

module Airbrake
  module Rails
    # Rack middleware for Rails applications. Any errors raised by the upstream
    # application will be delivered to Airbrake and re-raised.
    #
    class Middleware
      def initialize(app)
        @app = app
      end

      def call(env)
        begin
          response = @app.call(env)
        rescue Exception => exception
          env['airbrake.error_id'] = notify_airbrake(env, exception)
          raise exception
        end

        if framework_exception = env["action_dispatch.exception"]
          env["airbrake.error_id"] = notify_airbrake(env, framework_exception)
        end

        response
      end

      private

      def after_airbrake_handler(env, exception)
        if defined? env["action_controller.instance"].
          rescue_action_in_public_without_airbrake

          env["action_controller.instance"].
            rescue_action_in_public_without_airbrake(exception)
        end
      end

      def notify_airbrake(env, exception)
        unless ignored_user_agent? env
          error_id = Airbrake.notify_or_ignore(exception, request_data(env))
          after_airbrake_handler(env, exception)
          error_id
        end
      end

      def request_data(env)
        env["action_controller.instance"].try(:airbrake_request_data) ||
          {:rack_env => env}
      end

      def ignored_user_agent?(env)
        true if Airbrake.
          configuration.
          ignore_user_agent.
          flatten.
          any? { |ua| ua === env['HTTP_USER_AGENT'] }
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
airbrake-3.1.16 lib/airbrake/rails/middleware.rb
airbrake-3.1.15 lib/airbrake/rails/middleware.rb
airbrake-3.1.14 lib/airbrake/rails/middleware.rb
airbrake-3.1.13 lib/airbrake/rails/middleware.rb
airbrake-3.1.12 lib/airbrake/rails/middleware.rb
airbrake-3.1.11 lib/airbrake/rails/middleware.rb
airbrake-3.1.10 lib/airbrake/rails/middleware.rb