airbrake 10.1.0.rc.1 → 11.0.0

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: f48599a614943c56ab453213a73d26bb81656e675b9fe66ef8da6f742b31f5f0
4
- data.tar.gz: aca5987ae07c235fb6db4b852d9259cc583f38779d9e65169ceed8b1a66857a9
3
+ metadata.gz: 81da57e8a5a47cfafd0a69d4d4c89e100301ba4c5e48418866ce584a95fe3632
4
+ data.tar.gz: c24d6f44c8eae4ad946471098620b16c6973d9272b0363f2420305b35374b7a2
5
5
  SHA512:
6
- metadata.gz: 6b3a3223c947c6e69a58b7a0f2a37651dd3e796638fbc6223bd839dd9c3ac29eeba64eba9dba3c9d97cb51f9f4b92518b2de0a1172276384dffba6580a902e89
7
- data.tar.gz: 5d6e5dca29361d99beb97e2d71e13e9d721526312346b36e2b9668a9d81590e5825f912b5793771402c4afb20b6a16db39c058295366dd20ed1f5da9ec74f5fe
6
+ metadata.gz: 95b80ba3b1bf3771695c22fc28511a44347a4c8b841fc51d80f5abe14eb204147502f22599c2663a69f8b95986e1dd0cc7c026983957ecedb1761df4ab4311f5
7
+ data.tar.gz: 0dc035ee0b9b791eb13b2b7be401e46b5ab4fb5b906f5b180123b4bd9d4e3fd3a83439ffafe29e0371e39e71697575b0790992e5f240349b5113ad26a47b1dbf
@@ -13,7 +13,7 @@ namespace :airbrake do
13
13
  REVISION=#{fetch(:current_revision)} \
14
14
  REPOSITORY=#{fetch(:repo_url)} \
15
15
  VERSION=#{fetch(:app_version)}
16
- CMD
16
+ CMD
17
17
 
18
18
  info 'Notified Airbrake of the deploy'
19
19
  end
@@ -18,6 +18,8 @@ module Airbrake
18
18
  # @since v9.2.0
19
19
  # @api public
20
20
  def self.capture_timing(label)
21
+ return yield unless Airbrake::Config.instance.performance_stats
22
+
21
23
  routes = Airbrake::Rack::RequestStore[:routes]
22
24
  if !routes || routes.none?
23
25
  result = yield
@@ -8,10 +8,10 @@ module Airbrake
8
8
  class HttpHeadersFilter
9
9
  # @return [Array<String>] the prefixes of the majority of HTTP headers in
10
10
  # Rack (some prefixes match the header names for simplicity)
11
- HTTP_HEADER_PREFIXES = [
12
- 'HTTP_'.freeze,
13
- 'CONTENT_TYPE'.freeze,
14
- 'CONTENT_LENGTH'.freeze,
11
+ HTTP_HEADER_PREFIXES = %w[
12
+ HTTP_
13
+ CONTENT_TYPE
14
+ CONTENT_LENGTH
15
15
  ].freeze
16
16
 
17
17
  # @return [Integer]
@@ -98,11 +98,11 @@ module Airbrake
98
98
  def self.method_visibility(klass, method_name)
99
99
  klass.module_exec do
100
100
  if protected_method_defined?(method_name)
101
- "protected".freeze
101
+ "protected"
102
102
  elsif private_method_defined?(method_name)
103
- "private".freeze
103
+ "private"
104
104
  else
105
- "public".freeze
105
+ "public"
106
106
  end
107
107
  end
108
108
  end
@@ -111,11 +111,11 @@ module Airbrake
111
111
  # A method instead of a constant so it isn't accessible in the target.
112
112
  if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.7")
113
113
  def self.method_signature
114
- "*args, **kw_args, &block".freeze
114
+ "*args, **kw_args, &block"
115
115
  end
116
116
  else
117
117
  def self.method_signature
118
- "*args, &block".freeze
118
+ "*args, &block"
119
119
  end
120
120
  end
121
121
 
@@ -28,11 +28,13 @@ module Airbrake
28
28
 
29
29
  def rails_route(request)
30
30
  return unless (route = Airbrake::Rails::App.recognize_route(request))
31
+
31
32
  route.path
32
33
  end
33
34
 
34
35
  def sinatra_route(request)
35
36
  return unless (route = request.env['sinatra.route'])
37
+
36
38
  route.split(' ').drop(1).join(' ')
37
39
  end
38
40
 
@@ -28,6 +28,7 @@ module Airbrake
28
28
  controller = rack_env['action_controller.instance']
29
29
  return unless controller.respond_to?(:current_user, true)
30
30
  return unless [-1, 0].include?(controller.method(:current_user).arity)
31
+
31
32
  begin
32
33
  controller.__send__(:current_user)
33
34
  rescue Exception => _e # rubocop:disable Lint/RescueException
@@ -59,6 +60,7 @@ module Airbrake
59
60
  # try methods with no arguments or with variable number of arguments,
60
61
  # where none of them are required
61
62
  return unless @user.method(key).arity.between?(-1, 0)
63
+
62
64
  String(@user.__send__(key))
63
65
  end
64
66
 
@@ -14,6 +14,7 @@ module Airbrake
14
14
  # @see Airbrake#notify, #notify_airbrake_sync
15
15
  def notify_airbrake(exception, params = {}, &block)
16
16
  return unless (notice = build_notice(exception, params))
17
+
17
18
  Airbrake.notify(notice, params, &block)
18
19
  end
19
20
 
@@ -22,6 +23,7 @@ module Airbrake
22
23
  # @see Airbrake#notify_sync, #notify_airbrake
23
24
  def notify_airbrake_sync(exception, params = {}, &block)
24
25
  return unless (notice = build_notice(exception, params))
26
+
25
27
  Airbrake.notify_sync(notice, params, &block)
26
28
  end
27
29
 
@@ -29,6 +31,7 @@ module Airbrake
29
31
  # @return [Airbrake::Notice] the notice with information from the Rack env
30
32
  def build_notice(exception, params = {})
31
33
  return unless (notice = Airbrake.build_notice(exception, params))
34
+
32
35
  notice.stash[:rack_request] = request
33
36
  notice
34
37
  end
@@ -10,6 +10,8 @@ module Airbrake
10
10
  # @since v8.0.0
11
11
  class ActionControllerNotifySubscriber
12
12
  def call(*args)
13
+ return unless Airbrake::Config.instance.performance_stats
14
+
13
15
  routes = Airbrake::Rack::RequestStore[:routes]
14
16
  return if !routes || routes.none?
15
17
 
@@ -7,6 +7,8 @@ module Airbrake
7
7
  # @since v8.3.0
8
8
  class ActionControllerPerformanceBreakdownSubscriber
9
9
  def call(*args)
10
+ return unless Airbrake::Config.instance.performance_stats
11
+
10
12
  routes = Airbrake::Rack::RequestStore[:routes]
11
13
  return if !routes || routes.none?
12
14
 
@@ -11,6 +11,8 @@ module Airbrake
11
11
  # @since v8.0.0
12
12
  class ActionControllerRouteSubscriber
13
13
  def call(*args)
14
+ return unless Airbrake::Config.instance.performance_stats
15
+
14
16
  # We don't track routeless events.
15
17
  return unless (routes = Airbrake::Rack::RequestStore[:routes])
16
18
 
@@ -10,6 +10,8 @@ module Airbrake
10
10
  # @since v8.1.0
11
11
  class ActiveRecordSubscriber
12
12
  def call(*args)
13
+ return unless Airbrake::Config.instance.query_stats
14
+
13
15
  routes = Airbrake::Rack::RequestStore[:routes]
14
16
  return if !routes || routes.none?
15
17
 
@@ -11,12 +11,19 @@ module Airbrake
11
11
 
12
12
  # @param [] request
13
13
  # @return [Airbrake::Rails::App::Route, nil]
14
+ # rubocop:disable Metrics/AbcSize
14
15
  def self.recognize_route(request)
15
16
  # Duplicate `request` because `recognize` *can* strip the request's
16
17
  # `path_info`, which results in broken engine links (when the engine has
17
18
  # an isolated namespace).
18
19
  request_copy = request.dup
19
20
 
21
+ # Save original script name because `router.recognize(request)` mutates
22
+ # it. It's a Rails bug. More info in:
23
+ # * https://github.com/airbrake/airbrake/issues/1072
24
+ # * https://github.com/rails/rails/issues/31152
25
+ original_script_name = request.env['SCRIPT_NAME']
26
+
20
27
  # We must search every engine individually to find a concrete route. If
21
28
  # we rely only on the `Rails.application.routes.router`, then the
22
29
  # recognize call would return the root route, neglecting PATH_INFO
@@ -26,6 +33,10 @@ module Airbrake
26
33
  # * `Marketing::Engine` recognizes it as `marketing#/pricing` (correct)
27
34
  engines.each do |engine|
28
35
  engine.routes.router.recognize(request_copy) do |route, _params|
36
+ # Restore original script name. Remove this code when/if the Rails
37
+ # bug is fixed: https://github.com/airbrake/airbrake/issues/1072
38
+ request.env['SCRIPT_NAME'] = original_script_name
39
+
29
40
  # Skip "catch-all" routes such as:
30
41
  # get '*path => 'pages#about'
31
42
  #
@@ -56,6 +67,7 @@ module Airbrake
56
67
 
57
68
  nil
58
69
  end
70
+ # rubocop:enable Metrics/AbcSize
59
71
 
60
72
  def self.engines
61
73
  @engines ||= [*::Rails::Engine.subclasses, ::Rails.application]
@@ -5,7 +5,7 @@ module Airbrake
5
5
  # BacktraceCleaner is a wrapper around Rails.backtrace_cleaner.
6
6
  class BacktraceCleaner
7
7
  # @return [Regexp]
8
- AIRBRAKE_FRAME_PATTERN = %r{/airbrake/lib/airbrake/}
8
+ AIRBRAKE_FRAME_PATTERN = %r{/airbrake/lib/airbrake/}.freeze
9
9
 
10
10
  def self.clean(backtrace)
11
11
  ::Rails.backtrace_cleaner.clean(backtrace).first(1)
@@ -1,37 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Curl
4
- # Monkey-patch to measure request timing.
5
- class Easy
6
- alias http_without_airbrake http
7
-
8
- def http(verb)
9
- Airbrake::Rack.capture_timing(:http) do
10
- http_without_airbrake(verb)
3
+ module Airbrake
4
+ module Rails
5
+ # Allows measuring request timing.
6
+ module CurlEasy
7
+ def http(verb)
8
+ Airbrake::Rack.capture_timing(:http) do
9
+ super(verb)
10
+ end
11
11
  end
12
- end
13
-
14
- alias perform_without_airbrake perform
15
12
 
16
- def perform(&block)
17
- Airbrake::Rack.capture_timing(:http) do
18
- perform_without_airbrake(&block)
13
+ def perform(&block)
14
+ Airbrake::Rack.capture_timing(:http) do
15
+ super(&block)
16
+ end
19
17
  end
20
18
  end
21
- end
22
- end
23
-
24
- module Curl
25
- # Monkey-patch to measure request timing.
26
- class Multi
27
- class << self
28
- alias http_without_airbrake http
29
19
 
20
+ # Allows measuring request timing.
21
+ module CurlMulti
30
22
  def http(urls_with_config, multi_options = {}, &block)
31
23
  Airbrake::Rack.capture_timing(:http) do
32
- http_without_airbrake(urls_with_config, multi_options, &block)
24
+ super(urls_with_config, multi_options, &block)
33
25
  end
34
26
  end
35
27
  end
36
28
  end
37
29
  end
30
+
31
+ Curl::Easy.prepend(Airbrake::Rails::CurlEasy)
32
+ Curl::Multi.singleton_class.prepend(Airbrake::Rails::CurlMulti)
@@ -8,7 +8,7 @@ module Airbrake
8
8
  # @api private
9
9
  class Event
10
10
  # @see https://github.com/rails/rails/issues/8987
11
- HTML_RESPONSE_WILDCARD = "*/*".freeze
11
+ HTML_RESPONSE_WILDCARD = "*/*"
12
12
 
13
13
  include Airbrake::Loggable
14
14
 
@@ -8,6 +8,8 @@ module Airbrake
8
8
  # @since v9.2.0
9
9
  class Excon
10
10
  def call(*args)
11
+ return unless Airbrake::Config.instance.performance_stats
12
+
11
13
  routes = Airbrake::Rack::RequestStore[:routes]
12
14
  return if !routes || routes.none?
13
15
 
@@ -1,12 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Monkey-patch to measure request timing.
4
- class HTTPClient
5
- alias do_get_without_airbrake do_get_block
6
-
7
- def do_get_block(request, proxy, connection, &block)
8
- Airbrake::Rack.capture_timing(:http) do
9
- do_get_without_airbrake(request, proxy, connection, &block)
3
+ module Airbrake
4
+ module Rails
5
+ # Allows measuring request timing.
6
+ module HTTPClient
7
+ def do_get_block(request, proxy, connection, &block)
8
+ Airbrake::Rack.capture_timing(:http) do
9
+ super(request, proxy, connection, &block)
10
+ end
11
+ end
10
12
  end
11
13
  end
12
14
  end
15
+
16
+ HTTPClient.prepend(Airbrake::Rails::HTTPClient)
@@ -6,9 +6,9 @@ module Airbrake
6
6
  # 3.2+ apps). It makes Airbrake Ruby work with Rails and report errors
7
7
  # occurring in the application automatically.
8
8
  #
9
- # rubocop:disable Metrics/ClassLength, Metrics/BlockLength
9
+ # rubocop:disable Metrics/BlockLength
10
10
  class Railtie < ::Rails::Railtie
11
- initializer('airbrake.middleware', after: :load_config_initializers) do |app|
11
+ initializer('airbrake.middleware') do |app|
12
12
  # Since Rails 3.2 the ActionDispatch::DebugExceptions middleware is
13
13
  # responsible for logging exceptions and showing a debugging page in
14
14
  # case the request is local. We want to insert our middleware after
@@ -53,43 +53,37 @@ module Airbrake
53
53
  require 'airbrake/rails/action_controller'
54
54
  include Airbrake::Rails::ActionController
55
55
 
56
- if Airbrake::Config.instance.performance_stats
57
- # Cache route information for the duration of the request.
58
- require 'airbrake/rails/action_controller_route_subscriber'
59
- ActiveSupport::Notifications.subscribe(
60
- 'start_processing.action_controller',
61
- Airbrake::Rails::ActionControllerRouteSubscriber.new,
62
- )
63
-
64
- # Send route stats.
65
- require 'airbrake/rails/action_controller_notify_subscriber'
66
- ActiveSupport::Notifications.subscribe(
67
- 'process_action.action_controller',
68
- Airbrake::Rails::ActionControllerNotifySubscriber.new,
69
- )
70
-
71
- # Send performance breakdown: where a request spends its time.
72
- require 'airbrake/rails/action_controller_performance_breakdown_subscriber'
73
- ActiveSupport::Notifications.subscribe(
74
- 'process_action.action_controller',
75
- Airbrake::Rails::ActionControllerPerformanceBreakdownSubscriber.new,
76
- )
56
+ # Cache route information for the duration of the request.
57
+ require 'airbrake/rails/action_controller_route_subscriber'
58
+ ActiveSupport::Notifications.subscribe(
59
+ 'start_processing.action_controller',
60
+ Airbrake::Rails::ActionControllerRouteSubscriber.new,
61
+ )
77
62
 
78
- require 'airbrake/rails/net_http' if defined?(Net) && defined?(Net::HTTP)
63
+ # Send route stats.
64
+ require 'airbrake/rails/action_controller_notify_subscriber'
65
+ ActiveSupport::Notifications.subscribe(
66
+ 'process_action.action_controller',
67
+ Airbrake::Rails::ActionControllerNotifySubscriber.new,
68
+ )
79
69
 
80
- if defined?(Curl) && defined?(Curl::CURB_VERSION)
81
- require 'airbrake/rails/curb'
82
- end
70
+ # Send performance breakdown: where a request spends its time.
71
+ require 'airbrake/rails/action_controller_performance_breakdown_subscriber'
72
+ ActiveSupport::Notifications.subscribe(
73
+ 'process_action.action_controller',
74
+ Airbrake::Rails::ActionControllerPerformanceBreakdownSubscriber.new,
75
+ )
83
76
 
84
- require 'airbrake/rails/http' if defined?(HTTP) && defined?(HTTP::Client)
85
- require 'airbrake/rails/http_client' if defined?(HTTPClient)
86
- require 'airbrake/rails/typhoeus' if defined?(Typhoeus)
77
+ require 'airbrake/rails/net_http' if defined?(Net) && defined?(Net::HTTP)
78
+ require 'airbrake/rails/curb' if defined?(Curl) && defined?(Curl::CURB_VERSION)
79
+ require 'airbrake/rails/http' if defined?(HTTP) && defined?(HTTP::Client)
80
+ require 'airbrake/rails/http_client' if defined?(HTTPClient)
81
+ require 'airbrake/rails/typhoeus' if defined?(Typhoeus)
87
82
 
88
- if defined?(Excon)
89
- require 'airbrake/rails/excon_subscriber'
90
- ActiveSupport::Notifications.subscribe(/excon/, Airbrake::Rails::Excon.new)
91
- ::Excon.defaults[:instrumentor] = ActiveSupport::Notifications
92
- end
83
+ if defined?(Excon)
84
+ require 'airbrake/rails/excon_subscriber'
85
+ ActiveSupport::Notifications.subscribe(/excon/, Airbrake::Rails::Excon.new)
86
+ ::Excon.defaults[:instrumentor] = ActiveSupport::Notifications
93
87
  end
94
88
  end
95
89
  end
@@ -104,7 +98,7 @@ module Airbrake
104
98
  include Airbrake::Rails::ActiveRecord
105
99
  end
106
100
 
107
- if defined?(ActiveRecord) && Airbrake::Config.instance.query_stats
101
+ if defined?(ActiveRecord)
108
102
  # Send SQL queries.
109
103
  require 'airbrake/rails/active_record_subscriber'
110
104
  ActiveSupport::Notifications.subscribe(
@@ -152,6 +146,6 @@ module Airbrake
152
146
  end
153
147
  end
154
148
  end
155
- # rubocop:enable Metrics/ClassLength, Metrics/BlockLength
149
+ # rubocop:enable Metrics/BlockLength
156
150
  end
157
151
  end
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Typhoeus
4
- # Monkey-patch to measure request timing.
5
- class Request
6
- alias run_without_airbrake run
7
-
8
- def run
9
- Airbrake::Rack.capture_timing(:http) do
10
- run_without_airbrake
3
+ module Airbrake
4
+ module Rails
5
+ # Allow measuring request timing.
6
+ module TyphoeusRequest
7
+ def run
8
+ Airbrake::Rack.capture_timing(:http) do
9
+ super
10
+ end
11
11
  end
12
12
  end
13
13
  end
14
14
  end
15
+
16
+ Typhoeus::Request.prepend(Airbrake::Rails::TyphoeusRequest)
@@ -71,7 +71,7 @@ namespace :airbrake do
71
71
  app = ENV['HEROKU_APP']
72
72
 
73
73
  config = Bundler.with_clean_env do
74
- `heroku config --shell#{ " --app #{app}" if app }`
74
+ `heroku config --shell#{" --app #{app}" if app}`
75
75
  end
76
76
 
77
77
  heroku_env = config.each_line.with_object({}) do |line, h|
@@ -41,6 +41,7 @@ module Airbrake
41
41
  klass = context['class'] || context[:job] && context[:job]['class']
42
42
  return klass unless context[:job] && context[:job]['args'].first.is_a?(Hash)
43
43
  return klass unless (job_class = context[:job]['args'].first['job_class'])
44
+
44
45
  job_class
45
46
  end
46
47
  end
@@ -26,6 +26,7 @@ module Airbrake
26
26
 
27
27
  def filter_context(context)
28
28
  return context unless context[:delivery_info]
29
+
29
30
  h = context.dup
30
31
  h[:delivery_info] = context[:delivery_info].reject do |k, _v|
31
32
  IGNORED_KEYS.include?(k)
@@ -3,5 +3,5 @@
3
3
  # We use Semantic Versioning v2.0.0
4
4
  # More information: http://semver.org/
5
5
  module Airbrake
6
- AIRBRAKE_VERSION = '10.1.0.rc.1'.freeze
6
+ AIRBRAKE_VERSION = '11.0.0'
7
7
  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: 10.1.0.rc.1
4
+ version: 11.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airbrake Technologies, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-14 00:00:00.000000000 Z
11
+ date: 2020-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake-ruby
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 5.0.0.rc.1
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 5.0.0.rc.1
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -84,72 +84,72 @@ dependencies:
84
84
  name: appraisal
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 2.2.0
89
+ version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 2.2.0
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rack
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1'
103
+ version: '2'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1'
110
+ version: '2'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: webmock
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '2'
117
+ version: '3'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '2'
124
+ version: '3'
125
125
  - !ruby/object:Gem::Dependency
126
- name: sneakers
126
+ name: amq-protocol
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '2'
131
+ version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '2'
138
+ version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: amq-protocol
140
+ name: sneakers
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '='
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 2.2.0
145
+ version: '2'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '='
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 2.2.0
152
+ version: '2'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rack-test
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -178,110 +178,6 @@ dependencies:
178
178
  - - '='
179
179
  - !ruby/object:Gem::Version
180
180
  version: 3.3.3
181
- - !ruby/object:Gem::Dependency
182
- name: public_suffix
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '2.0'
188
- - - "<"
189
- - !ruby/object:Gem::Version
190
- version: '3.0'
191
- type: :development
192
- prerelease: false
193
- version_requirements: !ruby/object:Gem::Requirement
194
- requirements:
195
- - - "~>"
196
- - !ruby/object:Gem::Version
197
- version: '2.0'
198
- - - "<"
199
- - !ruby/object:Gem::Version
200
- version: '3.0'
201
- - !ruby/object:Gem::Dependency
202
- name: nokogiri
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - '='
206
- - !ruby/object:Gem::Version
207
- version: 1.9.1
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - '='
213
- - !ruby/object:Gem::Version
214
- version: 1.9.1
215
- - !ruby/object:Gem::Dependency
216
- name: parallel
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - '='
220
- - !ruby/object:Gem::Version
221
- version: 1.13.0
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - '='
227
- - !ruby/object:Gem::Version
228
- version: 1.13.0
229
- - !ruby/object:Gem::Dependency
230
- name: minitest
231
- requirement: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - '='
234
- - !ruby/object:Gem::Version
235
- version: 5.11.3
236
- type: :development
237
- prerelease: false
238
- version_requirements: !ruby/object:Gem::Requirement
239
- requirements:
240
- - - '='
241
- - !ruby/object:Gem::Version
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
257
- - !ruby/object:Gem::Dependency
258
- name: redis-namespace
259
- requirement: !ruby/object:Gem::Requirement
260
- requirements:
261
- - - '='
262
- - !ruby/object:Gem::Version
263
- version: 1.6.0
264
- type: :development
265
- prerelease: false
266
- version_requirements: !ruby/object:Gem::Requirement
267
- requirements:
268
- - - '='
269
- - !ruby/object:Gem::Version
270
- version: 1.6.0
271
- - !ruby/object:Gem::Dependency
272
- name: ffi
273
- requirement: !ruby/object:Gem::Requirement
274
- requirements:
275
- - - '='
276
- - !ruby/object:Gem::Version
277
- version: 1.12.2
278
- type: :development
279
- prerelease: false
280
- version_requirements: !ruby/object:Gem::Requirement
281
- requirements:
282
- - - '='
283
- - !ruby/object:Gem::Version
284
- version: 1.12.2
285
181
  - !ruby/object:Gem::Dependency
286
182
  name: sidekiq
287
183
  requirement: !ruby/object:Gem::Requirement
@@ -366,6 +262,40 @@ dependencies:
366
262
  - - "~>"
367
263
  - !ruby/object:Gem::Version
368
264
  version: '1.3'
265
+ - !ruby/object:Gem::Dependency
266
+ name: public_suffix
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: '2.0'
272
+ - - "<"
273
+ - !ruby/object:Gem::Version
274
+ version: '3.0'
275
+ type: :development
276
+ prerelease: false
277
+ version_requirements: !ruby/object:Gem::Requirement
278
+ requirements:
279
+ - - "~>"
280
+ - !ruby/object:Gem::Version
281
+ version: '2.0'
282
+ - - "<"
283
+ - !ruby/object:Gem::Version
284
+ version: '3.0'
285
+ - !ruby/object:Gem::Dependency
286
+ name: redis-namespace
287
+ requirement: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - '='
290
+ - !ruby/object:Gem::Version
291
+ version: 1.6.0
292
+ type: :development
293
+ prerelease: false
294
+ version_requirements: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - '='
297
+ - !ruby/object:Gem::Version
298
+ version: 1.6.0
369
299
  description: |
370
300
  Airbrake is an online tool that provides robust exception tracking in any of
371
301
  your Ruby applications. In doing so, it allows you to easily review errors, tie
@@ -434,7 +364,7 @@ homepage: https://airbrake.io
434
364
  licenses:
435
365
  - MIT
436
366
  metadata: {}
437
- post_install_message:
367
+ post_install_message:
438
368
  rdoc_options: []
439
369
  require_paths:
440
370
  - lib
@@ -442,15 +372,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
442
372
  requirements:
443
373
  - - ">="
444
374
  - !ruby/object:Gem::Version
445
- version: '2.1'
375
+ version: '2.3'
446
376
  required_rubygems_version: !ruby/object:Gem::Requirement
447
377
  requirements:
448
- - - ">"
378
+ - - ">="
449
379
  - !ruby/object:Gem::Version
450
- version: 1.3.1
380
+ version: '0'
451
381
  requirements: []
452
382
  rubygems_version: 3.1.2
453
- signing_key:
383
+ signing_key:
454
384
  specification_version: 4
455
385
  summary: Airbrake is an online tool that provides robust exception tracking in any
456
386
  of your Ruby applications.