class Airbrake::Rack::RouteFilter
Adds route slugs to context/route. @since v7.5.0
Attributes
weight[R]
Public Class Methods
new()
click to toggle source
# File lib/airbrake/rack/route_filter.rb, line 8 def initialize @weight = 100 end
Public Instance Methods
call(notice)
click to toggle source
# File lib/airbrake/rack/route_filter.rb, line 12 def call(notice) return unless (request = notice.stash[:rack_request]) notice[:context][:route] = if action_dispatch_request?(request) rails_route(request) elsif sinatra_request?(request) sinatra_route(request) end end
Private Instance Methods
action_dispatch_request?(request)
click to toggle source
# File lib/airbrake/rack/route_filter.rb, line 43 def action_dispatch_request?(request) defined?(ActionDispatch::Request) && request.instance_of?(ActionDispatch::Request) end
rails_route(request)
click to toggle source
# File lib/airbrake/rack/route_filter.rb, line 25 def rails_route(request) ::Rails.application.routes.router.recognize(request) do |route, _parameters| # Rails can recognize multiple routes for the given request. For # example, if we visit /users/2/edit, then Rails sees these routes: # * "/users/:id/edit(.:format)" # * "/" # # We return the first route as, what it seems, the most optimal # approach. return route.path.spec.to_s end end
sinatra_request?(request)
click to toggle source
# File lib/airbrake/rack/route_filter.rb, line 48 def sinatra_request?(request) defined?(Sinatra::Request) && request.instance_of?(Sinatra::Request) end
sinatra_route(request)
click to toggle source
# File lib/airbrake/rack/route_filter.rb, line 38 def sinatra_route(request) return unless (route = request.env['sinatra.route']) route.split(' ').drop(1).join(' ') end