airbrake 10.0.4 → 11.0.1

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: d1bea1ce3705909bcf1406466ceab591c1c58aa138cd274c820a20b7d52e3bd1
4
- data.tar.gz: bb33d7d3fe68fc0ef1c8e65d9eccb9e3b663bb88440a53bd36b4ee5e8841ce00
3
+ metadata.gz: 4b780328fc01621a0273577655179008c6314c6fe5187e5562f15c5112f296cd
4
+ data.tar.gz: 3036e80e03bbb2fa4159a9167a6971adcda2dcbee789ed3db320c0eaf0408d9b
5
5
  SHA512:
6
- metadata.gz: 37aa7af6de420774bc83c9af305591536ca98331b5ec695b30fc18e503cfe9ec14bd27a8923906f6cf83ada31b5e3536b0f075308988aee35dbec32a0a330a81
7
- data.tar.gz: 6dc006e4d19670905ec22f8c843adbaa2d59c2c369264c590ce73178c5dbccf75848062c18a1132e4a944f6766a37a94a4d5b1d0e3c4be429df47d55718c9079
6
+ metadata.gz: f307768db070afd129623ed312e7f4da4e4040f1bdf33cb9d1e31f2f1ee4278e992eac0e901a6bb257042ff9aff5f651c2a8bd74579606771c56d4040e63c0b1
7
+ data.tar.gz: b6376325c1b352ac7f13a0a0467737fb2a8cb08a12748c10d991265342119bcd6f510271744facb11018312de593857835aceadef557c20bbf1e85a2296e7bd4
@@ -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
 
@@ -6,16 +6,14 @@ module Airbrake
6
6
  # Rails namespace holds all Rails-related functionality.
7
7
  module Rails
8
8
  def self.logger
9
+ # Rails.logger is not set in some Rake tasks such as
10
+ # 'airbrake:deploy'. In this case we use a sensible fallback.
11
+ level = (::Rails.logger ? ::Rails.logger.level : Logger::ERROR)
12
+
9
13
  if ENV['RAILS_LOG_TO_STDOUT'].present?
10
- Logger.new(STDOUT, level: ::Rails.logger.level)
14
+ Logger.new(STDOUT, level: level)
11
15
  else
12
- Logger.new(
13
- ::Rails.root.join('log', 'airbrake.log'),
14
-
15
- # Rails.logger is not set in some Rake tasks such as
16
- # 'airbrake:deploy'. In this case we use a sensible fallback.
17
- level: (::Rails.logger ? ::Rails.logger.level : Logger::ERROR),
18
- )
16
+ Logger.new(::Rails.root.join('log', 'airbrake.log'), level: level)
19
17
  end
20
18
  end
21
19
  end
@@ -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)
@@ -5,8 +5,10 @@ module Airbrake
5
5
  # This railtie works for any Rails application that supports railties (Rails
6
6
  # 3.2+ apps). It makes Airbrake Ruby work with Rails and report errors
7
7
  # occurring in the application automatically.
8
+ #
9
+ # rubocop:disable Metrics/BlockLength
8
10
  class Railtie < ::Rails::Railtie
9
- initializer('airbrake.middleware', after: :load_config_initializers) do |app|
11
+ initializer('airbrake.middleware') do |app|
10
12
  # Since Rails 3.2 the ActionDispatch::DebugExceptions middleware is
11
13
  # responsible for logging exceptions and showing a debugging page in
12
14
  # case the request is local. We want to insert our middleware after
@@ -44,7 +46,6 @@ module Airbrake
44
46
  require 'airbrake/rake/tasks'
45
47
  end
46
48
 
47
- # rubocop:disable Metrics/BlockLength
48
49
  initializer('airbrake.action_controller') do
49
50
  ActiveSupport.on_load(:action_controller, run_once: true) do
50
51
  # Patches ActionController with methods that allow us to retrieve
@@ -52,47 +53,40 @@ module Airbrake
52
53
  require 'airbrake/rails/action_controller'
53
54
  include Airbrake::Rails::ActionController
54
55
 
55
- if Airbrake::Config.instance.performance_stats
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
- )
62
-
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
- )
69
-
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
- )
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
+ )
76
62
 
77
- 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
+ )
78
69
 
79
- if defined?(Curl) && defined?(Curl::CURB_VERSION)
80
- require 'airbrake/rails/curb'
81
- 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
+ )
82
76
 
83
- require 'airbrake/rails/http' if defined?(HTTP) && defined?(HTTP::Client)
84
- require 'airbrake/rails/http_client' if defined?(HTTPClient)
85
- 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)
86
82
 
87
- if defined?(Excon)
88
- require 'airbrake/rails/excon_subscriber'
89
- ActiveSupport::Notifications.subscribe(/excon/, Airbrake::Rails::Excon.new)
90
- ::Excon.defaults[:instrumentor] = ActiveSupport::Notifications
91
- 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
92
87
  end
93
88
  end
94
89
  end
95
- # rubocop:enable Metrics/BlockLength
96
90
 
97
91
  initializer('airbrake.active_record') do
98
92
  ActiveSupport.on_load(:active_record, run_once: true) do
@@ -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(
@@ -112,11 +106,21 @@ module Airbrake
112
106
  )
113
107
 
114
108
  # Filter out parameters from SQL body.
115
- Airbrake.add_performance_filter(
116
- Airbrake::Filters::SqlFilter.new(
117
- ::ActiveRecord::Base.connection_config[:adapter],
118
- ),
119
- )
109
+ if ::ActiveRecord::Base.respond_to?(:connection_db_config)
110
+ # Rails 6.1+ deprecates "connection_config" in favor of
111
+ # "connection_db_config", so we need an updated call.
112
+ Airbrake.add_performance_filter(
113
+ Airbrake::Filters::SqlFilter.new(
114
+ ::ActiveRecord::Base.connection_db_config.configuration_hash[:adapter],
115
+ ),
116
+ )
117
+ else
118
+ Airbrake.add_performance_filter(
119
+ Airbrake::Filters::SqlFilter.new(
120
+ ::ActiveRecord::Base.connection_config[:adapter],
121
+ ),
122
+ )
123
+ end
120
124
  end
121
125
  end
122
126
  end
@@ -142,5 +146,6 @@ module Airbrake
142
146
  end
143
147
  end
144
148
  end
149
+ # rubocop:enable Metrics/BlockLength
145
150
  end
146
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|
@@ -29,7 +29,7 @@ module Airbrake
29
29
  private
30
30
 
31
31
  def notify_airbrake(exception, context)
32
- Airbrake.notify(exception, context) do |notice|
32
+ Airbrake.notify(exception, job: context) do |notice|
33
33
  notice[:context][:component] = 'sidekiq'
34
34
  notice[:context][:action] = action(context)
35
35
  end
@@ -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.0.4'.freeze
6
+ AIRBRAKE_VERSION = '11.0.1'
7
7
  end
@@ -54,12 +54,12 @@ Airbrake.configure do |c|
54
54
  # A list of parameters that should be filtered out of what is sent to
55
55
  # Airbrake. By default, all "password" attributes will have their contents
56
56
  # replaced.
57
- # https://github.com/airbrake/airbrake-ruby#blacklist_keys
58
- c.blacklist_keys = [/password/i, /authorization/i]
57
+ # https://github.com/airbrake/airbrake-ruby#blocklist_keys
58
+ c.blocklist_keys = [/password/i, /authorization/i]
59
59
 
60
60
  # Alternatively, you can integrate with Rails' filter_parameters.
61
61
  # Read more: https://goo.gl/gqQ1xS
62
- # c.blacklist_keys = Rails.application.config.filter_parameters
62
+ # c.blocklist_keys = Rails.application.config.filter_parameters
63
63
  end
64
64
 
65
65
  # A filter that collects request body information. Enable it if you are sure you
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.0.4
4
+ version: 11.0.1
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-05-21 00:00:00.000000000 Z
11
+ date: 2020-10-20 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: '4.13'
19
+ version: '5.1'
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: '4.13'
26
+ version: '5.1'
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'
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'
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,96 +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
181
  - !ruby/object:Gem::Dependency
272
182
  name: sidekiq
273
183
  requirement: !ruby/object:Gem::Requirement
@@ -352,6 +262,40 @@ dependencies:
352
262
  - - "~>"
353
263
  - !ruby/object:Gem::Version
354
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
355
299
  description: |
356
300
  Airbrake is an online tool that provides robust exception tracking in any of
357
301
  your Ruby applications. In doing so, it allows you to easily review errors, tie
@@ -420,7 +364,7 @@ homepage: https://airbrake.io
420
364
  licenses:
421
365
  - MIT
422
366
  metadata: {}
423
- post_install_message:
367
+ post_install_message:
424
368
  rdoc_options: []
425
369
  require_paths:
426
370
  - lib
@@ -428,7 +372,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
428
372
  requirements:
429
373
  - - ">="
430
374
  - !ruby/object:Gem::Version
431
- version: '2.1'
375
+ version: '2.3'
432
376
  required_rubygems_version: !ruby/object:Gem::Requirement
433
377
  requirements:
434
378
  - - ">="
@@ -436,7 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
436
380
  version: '0'
437
381
  requirements: []
438
382
  rubygems_version: 3.1.2
439
- signing_key:
383
+ signing_key:
440
384
  specification_version: 4
441
385
  summary: Airbrake is an online tool that provides robust exception tracking in any
442
386
  of your Ruby applications.