airbrake 9.5.0 → 9.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29bdd7916d90d84ac4933c2ce14d9069bd719a371bf822a3b886175841b2005c
4
- data.tar.gz: 94f382b83ce554984a9c4e8162241be85baa78739d928e3c74081cfb17217f1a
3
+ metadata.gz: 90f7f39f6012a7e8383f50d1d99c8631582032feddaaa5a452bb7ba9afc40fc6
4
+ data.tar.gz: 728831ea6a9a57815fec54ac507f4712923bcfe5b012b31658ddd0c1b4d576ba
5
5
  SHA512:
6
- metadata.gz: e7e27d67804da299808bd87f6d2f201ab778ef344ff377283536d5be2082c579df9e54102eb83d48a5cadc78cf434bfcb7bf3c999a816b449f8930e539c96743
7
- data.tar.gz: '028d1865c3e42686c54455164087d401f3dabbd1380b915aec7ca8191e0f777dc26c32930c9118bd160ef1bd6ba63f1fac289a4786f9fc720c98f7a3eadfe2ae'
6
+ metadata.gz: d899543189d807cbc393fba4643274eea3b02134fa09aec828926dc2dced70adef3071b36092fa0f3ba9809217b3c74aa8e6d25849c22cfcc88640a6d257c85b
7
+ data.tar.gz: ca0c24bbd41fdd983a128763c99a3ce43aef445266d71606d54263782894e9a4987dde638c08083eb037ae6cae322d51ba1f42e4b690422478f4c3550cec817b
@@ -1,3 +1,5 @@
1
+ require 'airbrake/rails/app'
2
+
1
3
  module Airbrake
2
4
  module Rack
3
5
  # Adds route slugs to context/route.
@@ -23,16 +25,8 @@ module Airbrake
23
25
  private
24
26
 
25
27
  def rails_route(request)
26
- ::Rails.application.routes.router.recognize(request) do |route, _parameters|
27
- # Rails can recognize multiple routes for the given request. For
28
- # example, if we visit /users/2/edit, then Rails sees these routes:
29
- # * "/users/:id/edit(.:format)"
30
- # * "/"
31
- #
32
- # We return the first route as, what it seems, the most optimal
33
- # approach.
34
- return route.path.spec.to_s
35
- end
28
+ return unless (route = Airbrake::Rails::App.recognize_route(request))
29
+ route.path
36
30
  end
37
31
 
38
32
  def sinatra_route(request)
@@ -3,27 +3,19 @@ require 'airbrake/rails/app'
3
3
 
4
4
  module Airbrake
5
5
  module Rails
6
- # @return [String]
7
- CONTROLLER_KEY = 'controller'.freeze
8
-
9
- # @return [String]
10
- ACTION_KEY = 'action'.freeze
11
-
12
6
  # ActionControllerRouteSubscriber sends route stat information, including
13
7
  # performance data.
14
8
  #
15
9
  # @since v8.0.0
16
10
  class ActionControllerRouteSubscriber
17
- def initialize
18
- @app = Airbrake::Rails::App.new
19
- end
20
-
21
11
  def call(*args)
22
12
  # We don't track routeless events.
23
13
  return unless (routes = Airbrake::Rack::RequestStore[:routes])
24
14
 
25
15
  event = Airbrake::Rails::Event.new(*args)
26
- route = find_route(event.params)
16
+ route = Airbrake::Rails::App.recognize_route(
17
+ Airbrake::Rack::RequestStore[:request]
18
+ )
27
19
  return unless route
28
20
 
29
21
  routes[route.path] = {
@@ -32,15 +24,6 @@ module Airbrake
32
24
  groups: {}
33
25
  }
34
26
  end
35
-
36
- private
37
-
38
- def find_route(params)
39
- @app.routes.find do |route|
40
- route.controller == params[CONTROLLER_KEY] &&
41
- route.action == params[ACTION_KEY]
42
- end
43
- end
44
27
  end
45
28
  end
46
29
  end
@@ -1,42 +1,37 @@
1
1
  module Airbrake
2
2
  module Rails
3
- # App is a wrapper around Rails.application and Rails::Engine.
3
+ # App is a wrapper around Rails.application.
4
4
  #
5
5
  # @since v9.0.3
6
6
  # @api private
7
7
  class App
8
- Route = Struct.new(:path, :controller, :action)
8
+ Route = Struct.new(:path)
9
9
 
10
- def routes
11
- @routes ||= app_routes.merge(engine_routes).flat_map do |(engine_name, routes)|
12
- routes.map { |rails_route| build_route(engine_name, rails_route) }
13
- end
14
- end
15
-
16
- private
17
-
18
- def app_routes
19
- # Engine name is nil because this is default (non-engine) routes.
20
- { nil => ::Rails.application.routes.routes.routes }
21
- end
22
-
23
- def engine_routes
24
- ::Rails::Engine.subclasses.flat_map.with_object({}) do |engine, hash|
25
- next if (eng_routes = engine.routes.routes.routes).none?
10
+ # @param [] request
11
+ # @return [Airbrake::Rails::App::Route, nil]
12
+ def self.recognize_route(request)
13
+ # Duplicate `request` because `recognize` *can* strip the request's
14
+ # `path_info`, which results in broken engine links (when the engine has
15
+ # an isolated namespace).
16
+ ::Rails.application.routes.router.recognize(request.dup) do |route, _params|
17
+ path =
18
+ if route.app.respond_to?(:app) && route.app.app.respond_to?(:engine_name)
19
+ "#{route.app.app.engine_name}##{route.path.spec}"
20
+ else
21
+ route.path.spec.to_s
22
+ end
26
23
 
27
- hash[engine.engine_name] = eng_routes
24
+ # Rails can recognize multiple routes for the given request. For
25
+ # example, if we visit /users/2/edit, then Rails sees these routes:
26
+ # * "/users/:id/edit(.:format)"
27
+ # * "/"
28
+ #
29
+ # We return the first route as, what it seems, the most optimal
30
+ # approach.
31
+ return Route.new(path)
28
32
  end
29
- end
30
-
31
- def build_route(engine_name, rails_route)
32
- engine_prefix = engine_name
33
- engine_prefix += '#' if engine_prefix
34
33
 
35
- Route.new(
36
- "#{engine_prefix}#{rails_route.path.spec}",
37
- rails_route.defaults[:controller],
38
- rails_route.defaults[:action]
39
- )
34
+ nil
40
35
  end
41
36
  end
42
37
  end
@@ -96,8 +96,11 @@ module Airbrake
96
96
  ActiveSupport.on_load(:active_record, run_once: true) do
97
97
  # Reports exceptions occurring in some bugged ActiveRecord callbacks.
98
98
  # Applicable only to the versions of Rails lower than 4.2.
99
- require 'airbrake/rails/active_record'
100
- include Airbrake::Rails::ActiveRecord
99
+ if defined?(::Rails) &&
100
+ Gem::Version.new(::Rails.version) <= Gem::Version.new('4.2')
101
+ require 'airbrake/rails/active_record'
102
+ include Airbrake::Rails::ActiveRecord
103
+ end
101
104
 
102
105
  if defined?(ActiveRecord) && Airbrake::Config.instance.query_stats
103
106
  # Send SQL queries.
@@ -1,5 +1,5 @@
1
1
  # We use Semantic Versioning v2.0.0
2
2
  # More information: http://semver.org/
3
3
  module Airbrake
4
- AIRBRAKE_VERSION = '9.5.0'.freeze
4
+ AIRBRAKE_VERSION = '9.5.5'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.5.0
4
+ version: 9.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airbrake Technologies, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-24 00:00:00.000000000 Z
11
+ date: 2019-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake-ruby
@@ -240,6 +240,20 @@ dependencies:
240
240
  - - '='
241
241
  - !ruby/object:Gem::Version
242
242
  version: 5.11.3
243
+ - !ruby/object:Gem::Dependency
244
+ name: rack-cache
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - '='
248
+ - !ruby/object:Gem::Version
249
+ version: 1.9.0
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - '='
255
+ - !ruby/object:Gem::Version
256
+ version: 1.9.0
243
257
  - !ruby/object:Gem::Dependency
244
258
  name: sidekiq
245
259
  requirement: !ruby/object:Gem::Requirement