honeybadger 5.29.1 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -0
  3. data/lib/honeybadger/agent.rb +36 -35
  4. data/lib/honeybadger/backend/base.rb +11 -11
  5. data/lib/honeybadger/backend/debug.rb +4 -4
  6. data/lib/honeybadger/backend/null.rb +2 -2
  7. data/lib/honeybadger/backend/server.rb +11 -11
  8. data/lib/honeybadger/backend/test.rb +2 -2
  9. data/lib/honeybadger/backend.rb +6 -6
  10. data/lib/honeybadger/backtrace.rb +27 -22
  11. data/lib/honeybadger/breadcrumbs/active_support.rb +9 -9
  12. data/lib/honeybadger/breadcrumbs/breadcrumb.rb +1 -2
  13. data/lib/honeybadger/breadcrumbs/collector.rb +4 -4
  14. data/lib/honeybadger/breadcrumbs/logging.rb +11 -14
  15. data/lib/honeybadger/breadcrumbs.rb +3 -3
  16. data/lib/honeybadger/cli/deploy.rb +7 -7
  17. data/lib/honeybadger/cli/exec.rb +41 -41
  18. data/lib/honeybadger/cli/helpers.rb +18 -18
  19. data/lib/honeybadger/cli/heroku.rb +36 -36
  20. data/lib/honeybadger/cli/install.rb +44 -44
  21. data/lib/honeybadger/cli/main.rb +107 -107
  22. data/lib/honeybadger/cli/notify.rb +13 -13
  23. data/lib/honeybadger/cli/test.rb +109 -94
  24. data/lib/honeybadger/cli.rb +3 -3
  25. data/lib/honeybadger/config/defaults.rb +218 -218
  26. data/lib/honeybadger/config/env.rb +5 -5
  27. data/lib/honeybadger/config/ruby.rb +19 -19
  28. data/lib/honeybadger/config/yaml.rb +12 -12
  29. data/lib/honeybadger/config.rb +76 -78
  30. data/lib/honeybadger/const.rb +4 -4
  31. data/lib/honeybadger/context_manager.rb +1 -2
  32. data/lib/honeybadger/conversions.rb +9 -6
  33. data/lib/honeybadger/counter.rb +4 -4
  34. data/lib/honeybadger/event.rb +3 -3
  35. data/lib/honeybadger/events_worker.rb +33 -33
  36. data/lib/honeybadger/gauge.rb +2 -2
  37. data/lib/honeybadger/histogram.rb +4 -4
  38. data/lib/honeybadger/init/hanami.rb +5 -5
  39. data/lib/honeybadger/init/rails.rb +14 -14
  40. data/lib/honeybadger/init/rake.rb +19 -21
  41. data/lib/honeybadger/init/ruby.rb +4 -4
  42. data/lib/honeybadger/init/sinatra.rb +11 -12
  43. data/lib/honeybadger/instrumentation.rb +26 -31
  44. data/lib/honeybadger/instrumentation_helper.rb +11 -12
  45. data/lib/honeybadger/karafka.rb +55 -56
  46. data/lib/honeybadger/logging.rb +22 -21
  47. data/lib/honeybadger/metric.rb +2 -2
  48. data/lib/honeybadger/metrics_worker.rb +12 -10
  49. data/lib/honeybadger/notice.rb +55 -58
  50. data/lib/honeybadger/notification_subscriber.rb +14 -14
  51. data/lib/honeybadger/plugin.rb +16 -18
  52. data/lib/honeybadger/plugins/active_job.rb +11 -9
  53. data/lib/honeybadger/plugins/autotuner.rb +5 -5
  54. data/lib/honeybadger/plugins/breadcrumbs.rb +7 -7
  55. data/lib/honeybadger/plugins/delayed_job/plugin.rb +36 -37
  56. data/lib/honeybadger/plugins/delayed_job.rb +4 -4
  57. data/lib/honeybadger/plugins/faktory.rb +10 -10
  58. data/lib/honeybadger/plugins/karafka.rb +3 -3
  59. data/lib/honeybadger/plugins/lambda.rb +9 -11
  60. data/lib/honeybadger/plugins/local_variables.rb +4 -4
  61. data/lib/honeybadger/plugins/net_http.rb +10 -10
  62. data/lib/honeybadger/plugins/passenger.rb +4 -4
  63. data/lib/honeybadger/plugins/rails.rb +13 -9
  64. data/lib/honeybadger/plugins/resque.rb +7 -7
  65. data/lib/honeybadger/plugins/shoryuken.rb +6 -6
  66. data/lib/honeybadger/plugins/sidekiq.rb +62 -58
  67. data/lib/honeybadger/plugins/solid_queue.rb +3 -3
  68. data/lib/honeybadger/plugins/sucker_punch.rb +5 -5
  69. data/lib/honeybadger/plugins/system.rb +3 -3
  70. data/lib/honeybadger/plugins/thor.rb +5 -5
  71. data/lib/honeybadger/plugins/warden.rb +4 -4
  72. data/lib/honeybadger/rack/error_notifier.rb +14 -14
  73. data/lib/honeybadger/rack/user_feedback.rb +11 -12
  74. data/lib/honeybadger/rack/user_informer.rb +6 -6
  75. data/lib/honeybadger/registry.rb +2 -2
  76. data/lib/honeybadger/registry_execution.rb +1 -1
  77. data/lib/honeybadger/ruby.rb +2 -2
  78. data/lib/honeybadger/singleton.rb +49 -48
  79. data/lib/honeybadger/tasks.rb +3 -3
  80. data/lib/honeybadger/timer.rb +1 -1
  81. data/lib/honeybadger/util/http.rb +27 -27
  82. data/lib/honeybadger/util/request_hash.rb +11 -11
  83. data/lib/honeybadger/util/request_payload.rb +2 -2
  84. data/lib/honeybadger/util/revision.rb +14 -6
  85. data/lib/honeybadger/util/sanitizer.rb +22 -22
  86. data/lib/honeybadger/util/stats.rb +6 -3
  87. data/lib/honeybadger/version.rb +1 -1
  88. data/lib/honeybadger/worker.rb +31 -29
  89. data/lib/honeybadger.rb +5 -5
  90. data/lib/puma/plugin/honeybadger.rb +12 -8
  91. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1e1fecf7b39c809814e61f1bb67cb0fc2c9bf63f07fc671df69c283295c36b0
4
- data.tar.gz: 39bfb527313b211702dd5c8e4e44359e3286c676187d5abbac9e4a94f9d9300f
3
+ metadata.gz: 210a45a0ca54eaf49a6bf8041f8605a3d2b2f06a9eacfb47a54b0eda8988342c
4
+ data.tar.gz: 765d1108aa1ab79119eae874583d5114cc239b3a4a2ff4b0de2a3be8490d9aa7
5
5
  SHA512:
6
- metadata.gz: db73e8175ef7060b11e583c7563c518f1e6eb774492628ea06bf2850939075398361c626d9de255ebac9c054b4c1a23c0d0c19869eaad9a667736a3b178e1262
7
- data.tar.gz: 5594b9a58edb39ed341518a1df43be8759eaad5ed0234ce72e81fa32083e2b8ae4d277ff2e95c1d8c14a7c3018b8a76f846c98c56780fdf47e1ce4d3f200e65a
6
+ metadata.gz: b0f983e3a9d7575762389f7d0abe283739a8894a281467deaff493237756730b51235c4ee50bdc261286d9912f71d2972cb7d1d3c5c56e21a1390122701337ba
7
+ data.tar.gz: 1341f00eb574457be632afc3de77c1cef6ec1ffab370299f6b45cd15a32194e5d784c52f73177f0167d1155ed130678212b68c374e4877ad4ba740cb0e29be4b
data/CHANGELOG.md CHANGED
@@ -1,6 +1,35 @@
1
1
  # Change Log
2
2
 
3
3
 
4
+ ## [6.0.1](https://github.com/honeybadger-io/honeybadger-ruby/compare/v6.0.0...v6.0.1) (2025-07-23)
5
+
6
+
7
+ ### Bug Fixes
8
+
9
+ * Use kwargs for .notify in plugins ([#709](https://github.com/honeybadger-io/honeybadger-ruby/issues/709)) ([9007f16](https://github.com/honeybadger-io/honeybadger-ruby/commit/9007f169b26522c4f4e293527e7cb56fdea6a0f3))
10
+
11
+ ## [6.0.0](https://github.com/honeybadger-io/honeybadger-ruby/compare/v5.29.1...v6.0.0) (2025-07-21)
12
+
13
+
14
+ ### ⚠ BREAKING CHANGES
15
+
16
+ * remove second opts argument in Honeybadger.notify ([#499](https://github.com/honeybadger-io/honeybadger-ruby/issues/499))
17
+ * Minimum supported Ruby version is now 3.0.0
18
+
19
+ ### Features
20
+
21
+ * enable Insights by default ([#707](https://github.com/honeybadger-io/honeybadger-ruby/issues/707)) ([ab0f35e](https://github.com/honeybadger-io/honeybadger-ruby/commit/ab0f35e648b00d40ac27b2375c85d6e0a37ad546))
22
+
23
+
24
+ ### Miscellaneous Chores
25
+
26
+ * use standard ([#696](https://github.com/honeybadger-io/honeybadger-ruby/issues/696)) ([795408c](https://github.com/honeybadger-io/honeybadger-ruby/commit/795408c69be4710672f696a0d4c4d2b8ad666ec3))
27
+
28
+
29
+ ### Code Refactoring
30
+
31
+ * remove second opts argument in Honeybadger.notify ([#499](https://github.com/honeybadger-io/honeybadger-ruby/issues/499)) ([4530fd5](https://github.com/honeybadger-io/honeybadger-ruby/commit/4530fd50d5b3f2f751cc9bdec7b0a1af13e3aa94))
32
+
4
33
  ## [5.29.1](https://github.com/honeybadger-io/honeybadger-ruby/compare/v5.29.0...v5.29.1) (2025-07-01)
5
34
 
6
35
 
@@ -1,19 +1,19 @@
1
- require 'forwardable'
2
- require 'zlib'
3
-
4
- require 'honeybadger/version'
5
- require 'honeybadger/config'
6
- require 'honeybadger/context_manager'
7
- require 'honeybadger/notice'
8
- require 'honeybadger/event'
9
- require 'honeybadger/plugin'
10
- require 'honeybadger/logging'
11
- require 'honeybadger/worker'
12
- require 'honeybadger/events_worker'
13
- require 'honeybadger/metrics_worker'
14
- require 'honeybadger/breadcrumbs'
15
- require 'honeybadger/registry'
16
- require 'honeybadger/registry_execution'
1
+ require "forwardable"
2
+ require "zlib"
3
+
4
+ require "honeybadger/version"
5
+ require "honeybadger/config"
6
+ require "honeybadger/context_manager"
7
+ require "honeybadger/notice"
8
+ require "honeybadger/event"
9
+ require "honeybadger/plugin"
10
+ require "honeybadger/logging"
11
+ require "honeybadger/worker"
12
+ require "honeybadger/events_worker"
13
+ require "honeybadger/metrics_worker"
14
+ require "honeybadger/breadcrumbs"
15
+ require "honeybadger/registry"
16
+ require "honeybadger/registry_execution"
17
17
 
18
18
  module Honeybadger
19
19
  # The Honeybadger agent contains all the methods for interacting with the
@@ -63,7 +63,7 @@ module Honeybadger
63
63
  end
64
64
 
65
65
  def initialize(opts = {})
66
- if opts.kind_of?(Config)
66
+ if opts.is_a?(Config)
67
67
  @config = opts
68
68
  opts = {}
69
69
  end
@@ -125,14 +125,13 @@ module Honeybadger
125
125
  #
126
126
  # @return [String] UUID reference to the notice within Honeybadger.
127
127
  # @return [false] when ignored.
128
- def notify(exception_or_opts = nil, opts = {}, **kwargs)
129
- if !config[:'exceptions.enabled']
130
- debug { 'disabled feature=notices' }
128
+ def notify(exception_or_opts = nil, **opts)
129
+ if !config[:"exceptions.enabled"]
130
+ debug { "disabled feature=notices" }
131
131
  return false
132
132
  end
133
133
 
134
134
  opts = opts.dup
135
- opts.merge!(kwargs)
136
135
 
137
136
  if exception_or_opts.is_a?(Exception)
138
137
  already_reported_notice_id = exception_or_opts.instance_variable_get(:@__hb_notice_id)
@@ -146,11 +145,13 @@ module Honeybadger
146
145
 
147
146
  validate_notify_opts!(opts)
148
147
 
149
- add_breadcrumb(
150
- "Honeybadger Notice",
151
- metadata: opts,
152
- category: "notice"
153
- ) if config[:'breadcrumbs.enabled']
148
+ if config[:"breadcrumbs.enabled"]
149
+ add_breadcrumb(
150
+ "Honeybadger Notice",
151
+ metadata: opts,
152
+ category: "notice"
153
+ )
154
+ end
154
155
 
155
156
  opts[:rack_env] ||= context_manager.get_rack_env
156
157
  opts[:global_context] ||= context_manager.get_context
@@ -164,22 +165,22 @@ module Honeybadger
164
165
  with_error_handling { hook.call(notice) }
165
166
  end
166
167
 
167
- unless notice.api_key =~ NOT_BLANK
168
- error { sprintf('Unable to send error report: API key is missing. id=%s', notice.id) }
168
+ unless NOT_BLANK.match?(notice.api_key)
169
+ error { sprintf("Unable to send error report: API key is missing. id=%s", notice.id) }
169
170
  return false
170
171
  end
171
172
 
172
173
  if !opts[:force] && notice.ignore?
173
- debug { sprintf('ignore notice feature=notices id=%s', notice.id) }
174
+ debug { sprintf("ignore notice feature=notices id=%s", notice.id) }
174
175
  return false
175
176
  end
176
177
 
177
178
  if notice.halted?
178
- debug { 'halted notice feature=notices' }
179
+ debug { "halted notice feature=notices" }
179
180
  return false
180
181
  end
181
182
 
182
- info { sprintf('Reporting error id=%s', notice.id) }
183
+ info { sprintf("Reporting error id=%s", notice.id) }
183
184
 
184
185
  if opts[:sync] || config[:sync]
185
186
  send_now(notice)
@@ -205,7 +206,7 @@ module Honeybadger
205
206
  # otherwise.
206
207
  def check_in(id)
207
208
  # this is to allow check ins even if a url is passed
208
- check_in_id = id.to_s.strip.gsub(/\/$/, '').split('/').last
209
+ check_in_id = id.to_s.strip.gsub(/\/$/, "").split("/").last
209
210
  response = backend.check_in(check_in_id)
210
211
  response.success?
211
212
  end
@@ -412,7 +413,7 @@ module Honeybadger
412
413
 
413
414
  extra_payload = {}.tap do |p|
414
415
  p[:request_id] = context_manager.get_request_id if context_manager.get_request_id
415
- p[:hostname] = config[:hostname].to_s if config[:'events.attach_hostname']
416
+ p[:hostname] = config[:hostname].to_s if config[:"events.attach_hostname"]
416
417
  p.update(context_manager.get_event_context || {})
417
418
  end
418
419
 
@@ -632,7 +633,7 @@ module Honeybadger
632
633
  # Always send metrics events
633
634
  return true if event[:event_type] == "metric.hb"
634
635
 
635
- sample_rate = config[:'events.sample_rate']
636
+ sample_rate = config[:"events.sample_rate"]
636
637
  sample_rate = event.dig(:_hb, :sample_rate) if event.dig(:_hb, :sample_rate).is_a?(Numeric)
637
638
 
638
639
  return true if sample_rate >= 100
@@ -647,7 +648,7 @@ module Honeybadger
647
648
  def validate_notify_opts!(opts)
648
649
  return if opts.has_key?(:exception)
649
650
  return if opts.has_key?(:error_message)
650
- msg = sprintf('`Honeybadger.notify` was called with invalid arguments. You must pass either an Exception or options Hash containing the `:error_message` key. location=%s', caller[caller.size-1])
651
+ msg = sprintf("`Honeybadger.notify` was called with invalid arguments. You must pass either an Exception or options Hash containing the `:error_message` key. location=%s", caller[caller.size - 1])
651
652
  raise ArgumentError.new(msg) if config.dev?
652
653
  warn(msg)
653
654
  end
@@ -1,8 +1,8 @@
1
- require 'forwardable'
2
- require 'net/http'
3
- require 'json'
1
+ require "forwardable"
2
+ require "net/http"
3
+ require "json"
4
4
 
5
- require 'honeybadger/logging'
5
+ require "honeybadger/logging"
6
6
 
7
7
  module Honeybadger
8
8
  module Backend
@@ -34,7 +34,7 @@ module Honeybadger
34
34
  # @param [String] message The String message returned by the server (or
35
35
  # set by the backend in the case of an :error code).
36
36
  def initialize(*args)
37
- if (response = args.first).kind_of?(Net::HTTPResponse)
37
+ if (response = args.first).is_a?(Net::HTTPResponse)
38
38
  @code, @body, @message = response.code.to_i, response.body.to_s, response.message
39
39
  else
40
40
  @code, @body, @message = args
@@ -51,18 +51,18 @@ module Honeybadger
51
51
  def error_message
52
52
  return message if code == :error
53
53
  return FRIENDLY_ERRORS[code] if FRIENDLY_ERRORS[code]
54
- return error if error =~ NOT_BLANK
54
+ return error if NOT_BLANK.match?(error)
55
55
  msg = "The server responded with #{code}"
56
- msg << ": #{message}" if message =~ NOT_BLANK
56
+ msg << ": #{message}" if NOT_BLANK.match?(message)
57
57
  msg
58
58
  end
59
59
 
60
60
  private
61
61
 
62
62
  def parse_error(body)
63
- return unless body =~ NOT_BLANK
63
+ return unless NOT_BLANK.match?(body)
64
64
  obj = JSON.parse(body)
65
- return obj['error'] if obj.kind_of?(Hash)
65
+ obj["error"] if obj.is_a?(Hash)
66
66
  rescue JSON::ParserError
67
67
  nil
68
68
  end
@@ -88,7 +88,7 @@ module Honeybadger
88
88
  #
89
89
  # @raise NotImplementedError
90
90
  def notify(feature, payload)
91
- raise NotImplementedError, 'must define #notify on subclass.'
91
+ raise NotImplementedError, "must define #notify on subclass."
92
92
  end
93
93
 
94
94
  # Does a check in using the input id.
@@ -97,7 +97,7 @@ module Honeybadger
97
97
  #
98
98
  # @raise NotImplementedError
99
99
  def check_in(id)
100
- raise NotImplementedError, 'must define #check_in on subclass.'
100
+ raise NotImplementedError, "must define #check_in on subclass."
101
101
  end
102
102
 
103
103
  # Track a deployment
@@ -1,4 +1,4 @@
1
- require 'honeybadger/backend/null'
1
+ require "honeybadger/backend/null"
2
2
 
3
3
  module Honeybadger
4
4
  module Backend
@@ -8,19 +8,19 @@ module Honeybadger
8
8
  class Debug < Null
9
9
  def notify(feature, payload)
10
10
  logger.unknown("notifying debug backend of feature=#{feature}\n\t#{payload.to_json}")
11
- return Response.new(ENV['DEBUG_BACKEND_STATUS'].to_i, nil) if ENV['DEBUG_BACKEND_STATUS']
11
+ return Response.new(ENV["DEBUG_BACKEND_STATUS"].to_i, nil) if ENV["DEBUG_BACKEND_STATUS"]
12
12
  super
13
13
  end
14
14
 
15
15
  def check_in(id)
16
16
  logger.unknown("checking in debug backend with id=#{id}")
17
- return Response.new(ENV['DEBUG_BACKEND_STATUS'].to_i, nil) if ENV['DEBUG_BACKEND_STATUS']
17
+ return Response.new(ENV["DEBUG_BACKEND_STATUS"].to_i, nil) if ENV["DEBUG_BACKEND_STATUS"]
18
18
  super
19
19
  end
20
20
 
21
21
  def event(payload)
22
22
  logger.unknown("sending event to debug backend with event=#{payload.to_json}")
23
- return Response.new(ENV['DEBUG_BACKEND_STATUS'].to_i, nil) if ENV['DEBUG_BACKEND_STATUS']
23
+ return Response.new(ENV["DEBUG_BACKEND_STATUS"].to_i, nil) if ENV["DEBUG_BACKEND_STATUS"]
24
24
  super
25
25
  end
26
26
  end
@@ -1,11 +1,11 @@
1
- require 'honeybadger/backend/base'
1
+ require "honeybadger/backend/base"
2
2
 
3
3
  module Honeybadger
4
4
  module Backend
5
5
  class Null < Base
6
6
  class StubbedResponse < Response
7
7
  def initialize
8
- super(:stubbed, '{}'.freeze)
8
+ super(:stubbed, "{}".freeze)
9
9
  end
10
10
 
11
11
  def success?
@@ -1,20 +1,20 @@
1
- require 'net/http'
2
- require 'json'
3
- require 'zlib'
4
- require 'openssl'
1
+ require "net/http"
2
+ require "json"
3
+ require "zlib"
4
+ require "openssl"
5
5
 
6
- require 'honeybadger/backend/base'
7
- require 'honeybadger/util/http'
6
+ require "honeybadger/backend/base"
7
+ require "honeybadger/util/http"
8
8
 
9
9
  module Honeybadger
10
10
  module Backend
11
11
  class Server < Base
12
12
  ENDPOINTS = {
13
- notices: '/v1/notices'.freeze,
14
- deploys: '/v1/deploys'.freeze,
13
+ notices: "/v1/notices".freeze,
14
+ deploys: "/v1/deploys".freeze
15
15
  }.freeze
16
- CHECK_IN_ENDPOINT = '/v1/check_in'.freeze
17
- EVENTS_ENDPOINT = '/v1/events'.freeze
16
+ CHECK_IN_ENDPOINT = "/v1/check_in".freeze
17
+ EVENTS_ENDPOINT = "/v1/events".freeze
18
18
 
19
19
  HTTP_ERRORS = Util::HTTP::ERRORS
20
20
 
@@ -64,7 +64,7 @@ module Honeybadger
64
64
  def payload_headers(payload)
65
65
  if payload.respond_to?(:api_key) && payload.api_key
66
66
  {
67
- 'X-API-Key' => payload.api_key
67
+ "X-API-Key" => payload.api_key
68
68
  }
69
69
  end
70
70
  end
@@ -1,4 +1,4 @@
1
- require 'honeybadger/backend/null'
1
+ require "honeybadger/backend/null"
2
2
 
3
3
  module Honeybadger
4
4
  module Backend
@@ -10,7 +10,7 @@ module Honeybadger
10
10
  #
11
11
  # @return [Hash] Notifications hash.
12
12
  def self.notifications
13
- @notifications ||= Hash.new {|h,k| h[k] = [] }
13
+ @notifications ||= Hash.new { |h, k| h[k] = [] }
14
14
  end
15
15
 
16
16
  # The event list.
@@ -1,10 +1,10 @@
1
- require 'forwardable'
1
+ require "forwardable"
2
2
 
3
- require 'honeybadger/backend/base'
4
- require 'honeybadger/backend/server'
5
- require 'honeybadger/backend/test'
6
- require 'honeybadger/backend/null'
7
- require 'honeybadger/backend/debug'
3
+ require "honeybadger/backend/base"
4
+ require "honeybadger/backend/server"
5
+ require "honeybadger/backend/test"
6
+ require "honeybadger/backend/null"
7
+ require "honeybadger/backend/debug"
8
8
 
9
9
  module Honeybadger
10
10
  # @api private
@@ -1,4 +1,4 @@
1
- require 'json'
1
+ require "json"
2
2
 
3
3
  module Honeybadger
4
4
  # @api private
@@ -8,7 +8,7 @@ module Honeybadger
8
8
  class Line
9
9
  # Backtrace line regexp (optionally allowing leading X: for windows support).
10
10
  # Capture quoted strings either with leading backtick (pre Ruby 3.4) or single quote.
11
- INPUT_FORMAT = %r{^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in (?:`|')([^']+)')?$}.freeze
11
+ INPUT_FORMAT = %r{^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in (?:`|')([^']+)')?$}
12
12
 
13
13
  # The file portion of the line (such as app/models/user.rb).
14
14
  attr_reader :file
@@ -45,21 +45,19 @@ module Honeybadger
45
45
  file, number, method = match[1], match[2], match[3]
46
46
  filtered_args = [fmatch[1], fmatch[2], fmatch[3]]
47
47
  new(file, number, method, *filtered_args, opts.fetch(:source_radius, 2))
48
- else
49
- nil
50
48
  end
51
49
  end
52
50
 
53
51
  def initialize(file, number, method, filtered_file = file,
54
- filtered_number = number, filtered_method = method,
55
- source_radius = 2)
56
- self.filtered_file = filtered_file
52
+ filtered_number = number, filtered_method = method,
53
+ source_radius = 2)
54
+ self.filtered_file = filtered_file
57
55
  self.filtered_number = filtered_number
58
56
  self.filtered_method = filtered_method
59
- self.file = file
60
- self.number = number
61
- self.method = method
62
- self.source_radius = source_radius
57
+ self.file = file
58
+ self.number = number
59
+ self.method = method
60
+ self.source_radius = source_radius
63
61
  end
64
62
 
65
63
  # Reconstructs the line in a readable fashion.
@@ -72,7 +70,7 @@ module Honeybadger
72
70
  end
73
71
 
74
72
  def inspect
75
- "<Line:#{to_s}>"
73
+ "<Line:#{self}>"
76
74
  end
77
75
 
78
76
  # Determines if this line is part of the application trace or not.
@@ -102,8 +100,11 @@ module Honeybadger
102
100
 
103
101
  l = 0
104
102
  File.open(file) do |f|
105
- start.times { f.gets ; l += 1 }
106
- return Hash[duration.times.map { (line = f.gets) ? [(l += 1), line] : nil }.compact]
103
+ start.times {
104
+ f.gets
105
+ l += 1
106
+ }
107
+ return duration.times.map { (line = f.gets) ? [(l += 1), line] : nil }.compact.to_h
107
108
  end
108
109
  else
109
110
  {}
@@ -121,7 +122,7 @@ module Honeybadger
121
122
  Line.parse(unparsed_line.to_s, opts)
122
123
  end.compact
123
124
 
124
- instance = new(lines)
125
+ new(lines)
125
126
  end
126
127
 
127
128
  def initialize(lines)
@@ -133,9 +134,9 @@ module Honeybadger
133
134
  #
134
135
  # Returns array containing backtrace lines.
135
136
  def to_ary
136
- lines.take(1000).map { |l| { :number => l.filtered_number, :file => l.filtered_file, :method => l.filtered_method, :source => l.source } }
137
+ lines.take(1000).map { |l| {number: l.filtered_number, file: l.filtered_file, method: l.filtered_method, source: l.source} }
137
138
  end
138
- alias :to_a :to_ary
139
+ alias_method :to_a, :to_ary
139
140
 
140
141
  # JSON support.
141
142
  #
@@ -171,11 +172,15 @@ module Honeybadger
171
172
 
172
173
  attr_writer :lines, :application_lines
173
174
 
174
- def self.split_multiline_backtrace(backtrace)
175
- if backtrace.size == 1
176
- backtrace.first.to_s.split(/\n\s*/)
177
- else
178
- backtrace
175
+ class << self
176
+ private
177
+
178
+ def split_multiline_backtrace(backtrace)
179
+ if backtrace.size == 1
180
+ backtrace.first.to_s.split(/\n\s*/)
181
+ else
182
+ backtrace
183
+ end
179
184
  end
180
185
  end
181
186
  end
@@ -1,4 +1,4 @@
1
- require 'honeybadger/util/sql'
1
+ require "honeybadger/util/sql"
2
2
 
3
3
  module Honeybadger
4
4
  module Breadcrumbs
@@ -19,7 +19,7 @@ module Honeybadger
19
19
  transform: lambda do |data|
20
20
  if data[:sql]
21
21
  connection = data.delete(:connection)
22
- adapter = (connection && connection.adapter_name.downcase) || active_record_connection_db_config[:adapter]
22
+ adapter = connection&.adapter_name&.downcase || active_record_connection_db_config[:adapter]
23
23
  data[:sql] = Util::SQL.obfuscate(data[:sql], adapter)
24
24
  end
25
25
  data
@@ -49,7 +49,7 @@ module Honeybadger
49
49
  "perform_start.active_job" => {
50
50
  message: "Active Job Perform Start",
51
51
  select_keys: [],
52
- category: "job",
52
+ category: "job"
53
53
  },
54
54
 
55
55
  # ActiveSupport Actions
@@ -67,32 +67,32 @@ module Honeybadger
67
67
  #
68
68
  "halted_callback.action_controller" => {
69
69
  message: "Action Controller Callback Halted",
70
- category: "request",
70
+ category: "request"
71
71
  },
72
72
  "process_action.action_controller" => {
73
73
  message: "Action Controller Action Process",
74
74
  select_keys: [:controller, :action, :format, :method, :path, :status, :view_runtime, :db_runtime],
75
- category: "request",
75
+ category: "request"
76
76
  },
77
77
  "start_processing.action_controller" => {
78
78
  message: "Action Controller Start Process",
79
79
  select_keys: [:controller, :action, :format, :method, :path],
80
- category: "request",
80
+ category: "request"
81
81
  },
82
82
  "redirect_to.action_controller" => {
83
83
  message: "Action Controller Redirect",
84
- category: "request",
84
+ category: "request"
85
85
  },
86
86
 
87
87
  # View Actions
88
88
  #
89
89
  "render_template.action_view" => {
90
90
  message: "Action View Template Render",
91
- category: "render",
91
+ category: "render"
92
92
  },
93
93
  "render_partial.action_view" => {
94
94
  message: "Action View Partial Render",
95
- category: "render",
95
+ category: "render"
96
96
  },
97
97
 
98
98
  # Mailer actions
@@ -1,4 +1,4 @@
1
- require 'time'
1
+ require "time"
2
2
 
3
3
  module Honeybadger
4
4
  module Breadcrumbs
@@ -32,7 +32,6 @@ module Honeybadger
32
32
  to_h <=> other.to_h
33
33
  end
34
34
 
35
-
36
35
  # Is the Breadcrumb active or not. Inactive Breadcrumbs not be included
37
36
  # with any outgoing payloads.
38
37
  #
@@ -1,4 +1,4 @@
1
- require 'forwardable'
1
+ require "forwardable"
2
2
 
3
3
  module Honeybadger
4
4
  module Breadcrumbs
@@ -35,7 +35,7 @@ module Honeybadger
35
35
  #
36
36
  # @return [self] Filtered breadcrumbs
37
37
  def add!(breadcrumb)
38
- return unless @config[:'breadcrumbs.enabled']
38
+ return unless @config[:"breadcrumbs.enabled"]
39
39
  @buffer.add!(breadcrumb)
40
40
 
41
41
  self
@@ -48,7 +48,7 @@ module Honeybadger
48
48
  # block returns a falsy value
49
49
  #
50
50
  def drop_previous_breadcrumb_if
51
- @buffer.drop if (previous && block_given? && yield(previous))
51
+ @buffer.drop if previous && block_given? && yield(previous)
52
52
  end
53
53
 
54
54
  # All active breadcrumbs you want to remove a breadcrumb from the trail,
@@ -61,7 +61,7 @@ module Honeybadger
61
61
 
62
62
  def to_h
63
63
  {
64
- enabled: @config[:'breadcrumbs.enabled'],
64
+ enabled: @config[:"breadcrumbs.enabled"],
65
65
  trail: trail.map(&:to_h)
66
66
  }
67
67
  end
@@ -7,10 +7,10 @@ module Honeybadger
7
7
  org_severity, org_message, org_progname = severity, message, progname
8
8
  if defined?(Dry::Logger::Entry) && progname.is_a?(Dry::Logger::Entry) # Hanami uses dry-logger
9
9
  message, progname = progname.message || progname.exception, progname.progname
10
- else
11
- message, progname = [progname, nil] if message.nil?
10
+ elsif message.nil?
11
+ message, progname = [progname, nil]
12
12
  end
13
- message = message && message.to_s.strip
13
+ message &&= message.to_s.strip
14
14
  unless should_ignore_log?(message, progname)
15
15
  Honeybadger.add_breadcrumb(message, category: :log, metadata: {
16
16
  severity: format_severity(severity),
@@ -25,9 +25,9 @@ module Honeybadger
25
25
 
26
26
  def should_ignore_log?(message, progname)
27
27
  message.nil? ||
28
- message == "" ||
29
- Thread.current[:__hb_within_log_subscriber] ||
30
- progname == "honeybadger"
28
+ message == "" ||
29
+ Thread.current[:__hb_within_log_subscriber] ||
30
+ progname == "honeybadger"
31
31
  end
32
32
  end
33
33
 
@@ -39,17 +39,14 @@ module Honeybadger
39
39
  # class that provides LogSubscriber events, we want to filter out those
40
40
  # logs as they just become noise.
41
41
  module LogSubscriberInjector
42
- %w(info debug warn error fatal unknown).each do |level|
42
+ %w[info debug warn error fatal unknown].each do |level|
43
43
  define_method(level) do |*args, &block|
44
- begin
45
- Thread.current[:__hb_within_log_subscriber] = true
46
- super(*args, &block)
47
- ensure
48
- Thread.current[:__hb_within_log_subscriber] = false
49
- end
44
+ Thread.current[:__hb_within_log_subscriber] = true
45
+ super(*args, &block)
46
+ ensure
47
+ Thread.current[:__hb_within_log_subscriber] = false
50
48
  end
51
49
  end
52
50
  end
53
51
  end
54
52
  end
55
-
@@ -1,6 +1,6 @@
1
- require 'honeybadger/breadcrumbs/ring_buffer'
2
- require 'honeybadger/breadcrumbs/breadcrumb'
3
- require 'honeybadger/breadcrumbs/collector'
1
+ require "honeybadger/breadcrumbs/ring_buffer"
2
+ require "honeybadger/breadcrumbs/breadcrumb"
3
+ require "honeybadger/breadcrumbs/collector"
4
4
 
5
5
  module Honeybadger
6
6
  module Breadcrumbs