honeybadger 5.29.1 → 6.0.0

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 +22 -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 +9 -9
  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 +61 -57
  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 +3 -3
@@ -1,19 +1,19 @@
1
- require 'set'
1
+ require "set"
2
2
 
3
3
  module Honeybadger
4
4
  class Config
5
5
  module Env
6
- CONFIG_KEY = /\AHONEYBADGER_(.+)\Z/.freeze
7
- CONFIG_MAPPING = Hash[DEFAULTS.keys.map {|k| [k.to_s.upcase.gsub(KEY_REPLACEMENT, '_'), k] }].freeze
6
+ CONFIG_KEY = /\AHONEYBADGER_(.+)\Z/
7
+ CONFIG_MAPPING = DEFAULTS.keys.map { |k| [k.to_s.upcase.gsub(KEY_REPLACEMENT, "_"), k] }.to_h.freeze
8
8
  ARRAY_VALUES = Regexp.new('\s*,\s*').freeze
9
9
  IGNORED_TYPES = Set[Hash]
10
10
 
11
11
  def self.new(env = ENV)
12
12
  hash = {}
13
13
 
14
- env.each_pair do |k,v|
14
+ env.each_pair do |k, v|
15
15
  next unless k.match(CONFIG_KEY)
16
- next unless config_key = CONFIG_MAPPING[$1]
16
+ next unless (config_key = CONFIG_MAPPING[$1])
17
17
  type = OPTIONS[config_key][:type]
18
18
  next if IGNORED_TYPES.include?(type)
19
19
  hash[config_key] = cast_value(v, type)
@@ -12,7 +12,7 @@ module Honeybadger
12
12
  def to_hash
13
13
  hash.to_hash
14
14
  end
15
- alias to_h to_hash
15
+ alias_method :to_h, :to_hash
16
16
 
17
17
  private
18
18
 
@@ -41,25 +41,25 @@ module Honeybadger
41
41
  end
42
42
 
43
43
  def mash?(method)
44
- key = [prefix, method.to_s + '.'].compact.join('.')
45
- KEYS.any? {|k| k.start_with?(key) }
44
+ key = [prefix, method.to_s + "."].compact.join(".")
45
+ KEYS.any? { |k| k.start_with?(key) }
46
46
  end
47
47
 
48
48
  def setter?(method_name)
49
- return false unless method_name.to_s =~ /=\z/
49
+ return false unless method_name.to_s.end_with?("=")
50
50
  key = key(method_name)
51
- KEYS.any? {|k| k == key }
51
+ KEYS.any? { |k| k == key }
52
52
  end
53
53
 
54
54
  def getter?(method_name)
55
55
  key = key(method_name)
56
- KEYS.any? {|k| k == key }
56
+ KEYS.any? { |k| k == key }
57
57
  end
58
58
 
59
59
  def key(method_name)
60
- parts = [prefix, method_name.to_s.chomp('=')]
60
+ parts = [prefix, method_name.to_s.chomp("=")]
61
61
  parts.compact!
62
- parts.join('.')
62
+ parts.join(".")
63
63
  end
64
64
 
65
65
  def get(key)
@@ -89,9 +89,9 @@ module Honeybadger
89
89
  def before_notify(action = nil, &block)
90
90
  hooks = Array(get(:before_notify)).dup
91
91
 
92
- if action && validate_before_action(action, 'notify')
92
+ if action && validate_before_action(action, "notify")
93
93
  hooks << action
94
- elsif block_given? && validate_before_action(block, 'notify')
94
+ elsif block_given? && validate_before_action(block, "notify")
95
95
  hooks << block
96
96
  end
97
97
 
@@ -101,9 +101,9 @@ module Honeybadger
101
101
  def before_event(action = nil, &block)
102
102
  hooks = Array(get(:before_event)).dup
103
103
 
104
- if action && validate_before_action(action, 'event')
104
+ if action && validate_before_action(action, "event")
105
105
  hooks << action
106
- elsif block_given? && validate_before_action(block, 'event')
106
+ elsif block_given? && validate_before_action(block, "event")
107
107
  hooks << block
108
108
  end
109
109
 
@@ -112,7 +112,7 @@ module Honeybadger
112
112
 
113
113
  def backtrace_filter(&block)
114
114
  if block_given?
115
- logger.warn('DEPRECATED: backtrace_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#backtrace_filter')
115
+ logger.warn("DEPRECATED: backtrace_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#backtrace_filter")
116
116
  hash[:backtrace_filter] = block if block_given?
117
117
  end
118
118
 
@@ -121,7 +121,7 @@ module Honeybadger
121
121
 
122
122
  def exception_filter(&block)
123
123
  if block_given?
124
- logger.warn('DEPRECATED: exception_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_filter')
124
+ logger.warn("DEPRECATED: exception_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_filter")
125
125
  hash[:exception_filter] = block
126
126
  end
127
127
 
@@ -130,7 +130,7 @@ module Honeybadger
130
130
 
131
131
  def exception_fingerprint(&block)
132
132
  if block_given?
133
- logger.warn('DEPRECATED: exception_fingerprint is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_fingerprint')
133
+ logger.warn("DEPRECATED: exception_fingerprint is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_fingerprint")
134
134
  hash[:exception_fingerprint] = block
135
135
  end
136
136
 
@@ -143,15 +143,15 @@ module Honeybadger
143
143
  if !action.respond_to?(:call)
144
144
  logger.warn(
145
145
  "You attempted to add a before #{type} hook that does not respond " \
146
- 'to #call. We are discarding this hook so your intended behavior ' \
147
- 'will not occur.'
146
+ "to #call. We are discarding this hook so your intended behavior " \
147
+ "will not occur."
148
148
  )
149
149
  false
150
150
  elsif action.arity != 1
151
151
  logger.warn(
152
152
  "You attempted to add a before #{type} hook that has an arity " \
153
- 'other than one. We are discarding this hook so your intended ' \
154
- 'behavior will not occur.'
153
+ "other than one. We are discarding this hook so your intended " \
154
+ "behavior will not occur."
155
155
  )
156
156
  false
157
157
  else
@@ -1,14 +1,14 @@
1
- require 'pathname'
2
- require 'yaml'
3
- require 'erb'
1
+ require "pathname"
2
+ require "yaml"
3
+ require "erb"
4
4
 
5
5
  module Honeybadger
6
6
  class Config
7
7
  module Yaml
8
- DISALLOWED_KEYS = [:'config.path'].freeze
8
+ DISALLOWED_KEYS = [:"config.path"].freeze
9
9
 
10
- def self.new(path, env = 'production')
11
- path = path.kind_of?(Pathname) ? path : Pathname.new(path)
10
+ def self.new(path, env = "production")
11
+ path = path.is_a?(Pathname) ? path : Pathname.new(path)
12
12
 
13
13
  if !path.exist?
14
14
  raise ConfigError, "The configuration file #{path} was not found."
@@ -19,7 +19,7 @@ module Honeybadger
19
19
  end
20
20
 
21
21
  yaml = load_yaml(path)
22
- yaml.merge!(yaml[env]) if yaml[env].kind_of?(Hash)
22
+ yaml.merge!(yaml[env]) if yaml[env].is_a?(Hash)
23
23
 
24
24
  dotify_keys(yaml)
25
25
  end
@@ -36,8 +36,8 @@ module Honeybadger
36
36
 
37
37
  if e.backtrace
38
38
  backtrace = e.backtrace.map do |line|
39
- if line.start_with?('(erb)'.freeze)
40
- line.gsub('(erb)'.freeze, path.to_s)
39
+ if line.start_with?("(erb)".freeze)
40
+ line.gsub("(erb)".freeze, path.to_s)
41
41
  else
42
42
  line
43
43
  end
@@ -60,9 +60,9 @@ module Honeybadger
60
60
 
61
61
  def self.dotify_keys(hash, key_prefix = nil)
62
62
  {}.tap do |new_hash|
63
- hash.each_pair do |k,v|
64
- k = [key_prefix, k].compact.join('.')
65
- if v.kind_of?(Hash)
63
+ hash.each_pair do |k, v|
64
+ k = [key_prefix, k].compact.join(".")
65
+ if v.is_a?(Hash)
66
66
  new_hash.update(dotify_keys(v, k))
67
67
  else
68
68
  next if DISALLOWED_KEYS.include?(k.to_sym)
@@ -1,16 +1,15 @@
1
- require 'pathname'
2
- require 'delegate'
3
- require 'logger'
4
- require 'fileutils'
5
- require 'openssl'
6
-
7
- require 'honeybadger/version'
8
- require 'honeybadger/logging'
9
- require 'honeybadger/backend'
10
- require 'honeybadger/config/defaults'
11
- require 'honeybadger/util/http'
12
- require 'honeybadger/util/revision'
13
- require 'honeybadger/logging'
1
+ require "pathname"
2
+ require "delegate"
3
+ require "logger"
4
+ require "fileutils"
5
+ require "openssl"
6
+
7
+ require "honeybadger/version"
8
+ require "honeybadger/logging"
9
+ require "honeybadger/backend"
10
+ require "honeybadger/config/defaults"
11
+ require "honeybadger/util/http"
12
+ require "honeybadger/util/revision"
14
13
 
15
14
  module Honeybadger
16
15
  # @api private
@@ -25,9 +24,9 @@ module Honeybadger
25
24
 
26
25
  # Config subclasses have circular dependencies, so they must be loaded
27
26
  # after constants are defined.
28
- autoload :Env, 'honeybadger/config/env'
29
- autoload :Yaml, 'honeybadger/config/yaml'
30
- autoload :Ruby, 'honeybadger/config/ruby'
27
+ autoload :Env, "honeybadger/config/env"
28
+ autoload :Yaml, "honeybadger/config/yaml"
29
+ autoload :Ruby, "honeybadger/config/ruby"
31
30
 
32
31
  KEY_REPLACEMENT = Regexp.new('[^a-z\d_]', Regexp::IGNORECASE).freeze
33
32
 
@@ -55,8 +54,8 @@ module Honeybadger
55
54
  init_logging!
56
55
  init_backend!
57
56
 
58
- logger.debug(sprintf('Initializing Honeybadger Error Tracker for Ruby. Ship it! version=%s framework=%s', Honeybadger::VERSION, detected_framework))
59
- logger.warn('Development mode is enabled. Data will not be reported until you deploy your app.') if warn_development?
57
+ logger.debug(sprintf("Initializing Honeybadger Error Tracker for Ruby. Ship it! version=%s framework=%s", Honeybadger::VERSION, detected_framework))
58
+ logger.warn("Development mode is enabled. Data will not be reported until you deploy your app.") if warn_development?
60
59
 
61
60
  self
62
61
  end
@@ -65,7 +64,7 @@ module Honeybadger
65
64
  return self if @loaded
66
65
  self.framework = framework.freeze
67
66
  self.env = Env.new(env).freeze
68
- load_config_from_disk {|yaml| self.yaml = yaml.freeze }
67
+ load_config_from_disk { |yaml| self.yaml = yaml.freeze }
69
68
  detect_revision!
70
69
  @loaded = true
71
70
  self
@@ -81,7 +80,7 @@ module Honeybadger
81
80
 
82
81
  def backtrace_filter(&block)
83
82
  if block_given?
84
- warn('DEPRECATED: backtrace_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#backtrace_filter')
83
+ warn("DEPRECATED: backtrace_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#backtrace_filter")
85
84
  self[:backtrace_filter] = block
86
85
  end
87
86
 
@@ -98,7 +97,7 @@ module Honeybadger
98
97
 
99
98
  def exception_filter(&block)
100
99
  if block_given?
101
- warn('DEPRECATED: exception_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_filter')
100
+ warn("DEPRECATED: exception_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_filter")
102
101
  self[:exception_filter] = block
103
102
  end
104
103
 
@@ -107,7 +106,7 @@ module Honeybadger
107
106
 
108
107
  def exception_fingerprint(&block)
109
108
  if block_given?
110
- warn('DEPRECATED: exception_fingerprint is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_fingerprint')
109
+ warn("DEPRECATED: exception_fingerprint is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_fingerprint")
111
110
  self[:exception_fingerprint] = block
112
111
  end
113
112
 
@@ -124,28 +123,27 @@ module Honeybadger
124
123
 
125
124
  DEFAULTS[key]
126
125
  end
127
- alias [] :get
126
+ alias_method :[], :get
128
127
 
129
128
  def set(key, value)
130
129
  self.ruby = ruby.merge(key => value).freeze
131
130
  @logger = @backend = nil
132
131
  end
133
- alias []= :set
132
+ alias_method :[]=, :set
134
133
 
135
134
  def to_hash(defaults = false)
136
- hash = [:@ruby, :@env, :@yaml, :@framework].reverse.reduce({}) do |a,e|
135
+ hash = [:@ruby, :@env, :@yaml, :@framework].reverse.reduce({}) do |a, e|
137
136
  a.merge!(instance_variable_get(e))
138
137
  end
139
138
 
140
139
  hash = DEFAULTS.merge(hash) if defaults
141
140
 
142
- undotify_keys(hash.select {|k,v| DEFAULTS.has_key?(k) })
141
+ undotify_keys(hash.select { |k, v| DEFAULTS.has_key?(k) })
143
142
  end
144
- alias to_h to_hash
143
+ alias_method :to_h, :to_hash
145
144
 
146
145
  # Internal Helpers
147
146
 
148
-
149
147
  def logger
150
148
  init_logging! unless @logger
151
149
  @logger
@@ -166,7 +164,7 @@ module Honeybadger
166
164
  end
167
165
 
168
166
  def warn_development?
169
- dev? && backend.kind_of?(Backend::Null)
167
+ dev? && backend.is_a?(Backend::Null)
170
168
  end
171
169
 
172
170
  def public?
@@ -180,30 +178,30 @@ module Honeybadger
180
178
  end
181
179
 
182
180
  def log_debug?
183
- return debug? if self[:'logging.debug'].nil?
184
- !!self[:'logging.debug']
181
+ return debug? if self[:"logging.debug"].nil?
182
+ !!self[:"logging.debug"]
185
183
  end
186
184
 
187
185
  def ignored_classes
188
- ignore_only = get(:'exceptions.ignore_only')
186
+ ignore_only = get(:"exceptions.ignore_only")
189
187
  return ignore_only if ignore_only
190
- return DEFAULTS[:'exceptions.ignore'] unless ignore = get(:'exceptions.ignore')
188
+ return DEFAULTS[:"exceptions.ignore"] unless (ignore = get(:"exceptions.ignore"))
191
189
 
192
- DEFAULTS[:'exceptions.ignore'] | Array(ignore)
190
+ DEFAULTS[:"exceptions.ignore"] | Array(ignore)
193
191
  end
194
192
 
195
193
  def raw_ignored_events
196
- ignore_only = get(:'events.ignore_only')
194
+ ignore_only = get(:"events.ignore_only")
197
195
  return ignore_only if ignore_only
198
- return DEFAULTS[:'events.ignore'] unless ignore = get(:'events.ignore')
196
+ return DEFAULTS[:"events.ignore"] unless (ignore = get(:"events.ignore"))
199
197
 
200
- DEFAULTS[:'events.ignore'] | Array(ignore)
198
+ DEFAULTS[:"events.ignore"] | Array(ignore)
201
199
  end
202
200
 
203
201
  def ignored_events
204
202
  @ignored_events ||= raw_ignored_events.map do |check|
205
203
  if check.is_a?(String) || check.is_a?(Regexp)
206
- { [:event_type] => check }
204
+ {[:event_type] => check}
207
205
  elsif check.is_a?(Hash)
208
206
  flat_hash(check).transform_keys! { |key_array| key_array.map(&:to_sym) }
209
207
  end
@@ -211,23 +209,23 @@ module Honeybadger
211
209
  end
212
210
 
213
211
  def ca_bundle_path
214
- if self[:'connection.system_ssl_cert_chain'] && File.exist?(OpenSSL::X509::DEFAULT_CERT_FILE)
212
+ if self[:"connection.system_ssl_cert_chain"] && File.exist?(OpenSSL::X509::DEFAULT_CERT_FILE)
215
213
  OpenSSL::X509::DEFAULT_CERT_FILE
216
- elsif self[:'connection.ssl_ca_bundle_path']
217
- self[:'connection.ssl_ca_bundle_path']
214
+ elsif self[:"connection.ssl_ca_bundle_path"]
215
+ self[:"connection.ssl_ca_bundle_path"]
218
216
  else
219
217
  local_cert_path
220
218
  end
221
219
  end
222
220
 
223
221
  def local_cert_path
224
- File.expand_path(File.join('..', '..', '..', 'resources', 'ca-bundle.crt'), __FILE__)
222
+ File.expand_path(File.join("..", "..", "..", "resources", "ca-bundle.crt"), __FILE__)
225
223
  end
226
224
 
227
225
  def connection_port
228
- if self[:'connection.port']
229
- self[:'connection.port']
230
- elsif self[:'connection.secure']
226
+ if self[:"connection.port"]
227
+ self[:"connection.port"]
228
+ elsif self[:"connection.secure"]
231
229
  443
232
230
  else
233
231
  80
@@ -235,10 +233,10 @@ module Honeybadger
235
233
  end
236
234
 
237
235
  def connection_protocol
238
- if self[:'connection.secure']
239
- 'https'
236
+ if self[:"connection.secure"]
237
+ "https"
240
238
  else
241
- 'http'
239
+ "http"
242
240
  end
243
241
  end
244
242
 
@@ -247,35 +245,35 @@ module Honeybadger
247
245
  end
248
246
 
249
247
  def events_max_queue_size
250
- self[:'events.max_queue_size']
248
+ self[:"events.max_queue_size"]
251
249
  end
252
250
 
253
251
  def events_batch_size
254
- self[:'events.batch_size']
252
+ self[:"events.batch_size"]
255
253
  end
256
254
 
257
255
  def events_timeout
258
- self[:'events.timeout']
256
+ self[:"events.timeout"]
259
257
  end
260
258
 
261
259
  def params_filters
262
- Array(self[:'request.filter_keys'])
260
+ Array(self[:"request.filter_keys"])
263
261
  end
264
262
 
265
263
  def excluded_request_keys
266
264
  [].tap do |keys|
267
- keys << :session if self[:'request.disable_session']
268
- keys << :params if self[:'request.disable_params']
269
- keys << :cgi_data if self[:'request.disable_environment']
270
- keys << :url if self[:'request.disable_url']
265
+ keys << :session if self[:"request.disable_session"]
266
+ keys << :params if self[:"request.disable_params"]
267
+ keys << :cgi_data if self[:"request.disable_environment"]
268
+ keys << :url if self[:"request.disable_url"]
271
269
  end
272
270
  end
273
271
 
274
- def log_level(key = :'logging.level')
272
+ def log_level(key = :"logging.level")
275
273
  case self[key].to_s
276
274
  when /\A(0|debug)\z/i then Logger::DEBUG
277
- when /\A(1|info)\z/i then Logger::INFO
278
- when /\A(2|warn)\z/i then Logger::WARN
275
+ when /\A(1|info)\z/i then Logger::INFO
276
+ when /\A(2|warn)\z/i then Logger::WARN
279
277
  when /\A(3|error)\z/i then Logger::ERROR
280
278
  else
281
279
  Logger::INFO
@@ -283,13 +281,13 @@ module Honeybadger
283
281
  end
284
282
 
285
283
  def load_plugin?(name)
286
- return false if includes_token?(self[:'skipped_plugins'], name)
287
- return true unless self[:plugins].kind_of?(Array)
284
+ return false if includes_token?(self[:skipped_plugins], name)
285
+ return true unless self[:plugins].is_a?(Array)
288
286
  includes_token?(self[:plugins], name)
289
287
  end
290
288
 
291
289
  def insights_enabled?
292
- public? && !!self[:'insights.enabled']
290
+ public? && !!self[:"insights.enabled"]
293
291
  end
294
292
 
295
293
  def cluster_collection?(name)
@@ -328,19 +326,19 @@ module Honeybadger
328
326
  return nil if @no_root
329
327
 
330
328
  root = get(:root).to_s
331
- @no_root = true and return nil unless root =~ NOT_BLANK
329
+ @no_root = true and return nil unless NOT_BLANK.match?(root)
332
330
 
333
- @root_regexp = Regexp.new("^#{ Regexp.escape(root) }")
331
+ @root_regexp = Regexp.new("^#{Regexp.escape(root)}")
334
332
  end
335
333
 
336
334
  def detected_framework
337
- if self[:framework] =~ NOT_BLANK
335
+ if NOT_BLANK.match?(self[:framework])
338
336
  self[:framework].to_sym
339
- elsif defined?(::Rails::VERSION) && ::Rails::VERSION::STRING > '3.0'
337
+ elsif defined?(::Rails::VERSION) && ::Rails::VERSION::STRING > "3.0"
340
338
  :rails
341
339
  elsif defined?(::Sinatra::VERSION)
342
340
  :sinatra
343
- elsif defined?(::Hanami::VERSION) && ::Hanami::VERSION >= '2.0'
341
+ elsif defined?(::Hanami::VERSION) && ::Hanami::VERSION >= "2.0"
344
342
  :hanami
345
343
  elsif defined?(::Rack.release)
346
344
  :rack
@@ -369,8 +367,8 @@ module Honeybadger
369
367
 
370
368
  def log_path
371
369
  return if log_stdout?
372
- return if !self[:'logging.path']
373
- locate_absolute_path(self[:'logging.path'], self[:root])
370
+ return if !self[:"logging.path"]
371
+ locate_absolute_path(self[:"logging.path"], self[:root])
374
372
  end
375
373
 
376
374
  def config_path
@@ -378,7 +376,7 @@ module Honeybadger
378
376
  end
379
377
 
380
378
  def config_paths
381
- Array(ENV['HONEYBADGER_CONFIG_PATH'] || get(:'config.path')).map do |c|
379
+ Array(ENV["HONEYBADGER_CONFIG_PATH"] || get(:"config.path")).map do |c|
382
380
  locate_absolute_path(c, self[:root])
383
381
  end
384
382
  end
@@ -400,7 +398,7 @@ module Honeybadger
400
398
  end
401
399
 
402
400
  if ruby[:backend]
403
- logger.warn(sprintf('Unknown backend: %p; default will be used. Backend must respond to #notify', self[:backend]))
401
+ logger.warn(sprintf("Unknown backend: %p; default will be used. Backend must respond to #notify", self[:backend]))
404
402
  end
405
403
 
406
404
  @backend = default_backend
@@ -423,7 +421,7 @@ module Honeybadger
423
421
  end
424
422
 
425
423
  def log_stdout?
426
- self[:'logging.path'] && self[:'logging.path'].to_s.downcase == 'stdout'
424
+ self[:"logging.path"] && self[:"logging.path"].to_s.downcase == "stdout"
427
425
  end
428
426
 
429
427
  def build_logger
@@ -431,7 +429,7 @@ module Honeybadger
431
429
 
432
430
  return build_stdout_logger if log_stdout?
433
431
 
434
- if path = log_path
432
+ if (path = log_path)
435
433
  FileUtils.mkdir_p(path.dirname) unless path.dirname.writable?
436
434
  return build_file_logger(path)
437
435
  end
@@ -448,7 +446,7 @@ module Honeybadger
448
446
  # Takes an Array and a value and returns true if the value exists in the
449
447
  # array in String or Symbol form, otherwise false.
450
448
  def includes_token?(obj, value)
451
- return false unless obj.kind_of?(Array)
449
+ return false unless obj.is_a?(Array)
452
450
  obj.map(&:to_sym).include?(value.to_sym)
453
451
  end
454
452
 
@@ -471,7 +469,7 @@ module Honeybadger
471
469
 
472
470
  def undotify_keys(hash)
473
471
  {}.tap do |new_hash|
474
- hash.each_pair do |k,v|
472
+ hash.each_pair do |k, v|
475
473
  if k.to_s =~ DOTTED_KEY
476
474
  new_hash[$1] ||= {}
477
475
  new_hash[$1] = undotify_keys(new_hash[$1].merge({$2 => v}))
@@ -485,9 +483,9 @@ module Honeybadger
485
483
  # Converts a nested hash into a single layer where keys become arrays:
486
484
  # ex: > flat_hash({ :nested => { :hash => "value" }})
487
485
  # > { [:nested, :hash] => "value" }
488
- def flat_hash(h,f=[],g={})
489
- return g.update({ f=>h }) unless h.is_a? Hash
490
- h.each { |k,r| flat_hash(r,f+[k],g) }
486
+ def flat_hash(h, f = [], g = {})
487
+ return g.update({f => h}) unless h.is_a? Hash
488
+ h.each { |k, r| flat_hash(r, f + [k], g) }
491
489
  g
492
490
  end
493
491
  end
@@ -1,13 +1,13 @@
1
- require 'honeybadger/version'
1
+ require "honeybadger/version"
2
2
 
3
3
  module Honeybadger
4
4
  module Rack
5
5
  # Autoloading allows middleware classes to be referenced in applications
6
6
  # which include the optional Rack dependency without explicitly requiring
7
7
  # these files.
8
- autoload :ErrorNotifier, 'honeybadger/rack/error_notifier'
9
- autoload :UserFeedback, 'honeybadger/rack/user_feedback'
10
- autoload :UserInformer, 'honeybadger/rack/user_informer'
8
+ autoload :ErrorNotifier, "honeybadger/rack/error_notifier"
9
+ autoload :UserFeedback, "honeybadger/rack/user_feedback"
10
+ autoload :UserInformer, "honeybadger/rack/user_informer"
11
11
  end
12
12
 
13
13
  # @api private
@@ -1,4 +1,4 @@
1
- require 'honeybadger/conversions'
1
+ require "honeybadger/conversions"
2
2
 
3
3
  module Honeybadger
4
4
  # @api private
@@ -20,7 +20,6 @@ module Honeybadger
20
20
 
21
21
  # Internal helpers
22
22
 
23
-
24
23
  def set_context(hash, &block)
25
24
  local = block_given?
26
25
  @mutex.synchronize do
@@ -2,6 +2,7 @@ module Honeybadger
2
2
  # @api private
3
3
  module Conversions
4
4
  module_function
5
+
5
6
  MAX_CONTEXT_DEPTH = 5
6
7
 
7
8
  # Convert context into a Hash.
@@ -12,13 +13,15 @@ module Honeybadger
12
13
  def Context(object, depth = 1)
13
14
  object = object.to_honeybadger_context if object.respond_to?(:to_honeybadger_context)
14
15
  object = Hash(object)
15
- object = object.transform_values do |value|
16
- if value&.respond_to?(:to_honeybadger_context)
17
- Context(value, depth + 1)
18
- else
19
- value
16
+ if depth < MAX_CONTEXT_DEPTH
17
+ object = object.transform_values do |value|
18
+ if value&.respond_to?(:to_honeybadger_context)
19
+ Context(value, depth + 1)
20
+ else
21
+ value
22
+ end
20
23
  end
21
- end if depth < MAX_CONTEXT_DEPTH
24
+ end
22
25
  object
23
26
  end
24
27
  end
@@ -1,18 +1,18 @@
1
- require 'honeybadger/metric'
1
+ require "honeybadger/metric"
2
2
 
3
3
  module Honeybadger
4
4
  class Counter < Metric
5
- def count(by=1)
5
+ def count(by = 1)
6
6
  return unless by
7
7
 
8
8
  @samples += 1
9
9
 
10
10
  @counter ||= 0
11
- @counter = @counter + by
11
+ @counter += by
12
12
  end
13
13
 
14
14
  def payloads
15
- [{ counter: @counter }]
15
+ [{counter: @counter}]
16
16
  end
17
17
  end
18
18
  end