rollbar 3.1.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +18 -1
  3. data/.rubocop.yml +81 -34
  4. data/Gemfile +17 -10
  5. data/README.md +1 -1
  6. data/data/rollbar.snippet.js +1 -1
  7. data/gemfiles/rails30.gemfile +11 -12
  8. data/gemfiles/rails31.gemfile +12 -13
  9. data/gemfiles/rails32.gemfile +5 -6
  10. data/gemfiles/rails40.gemfile +3 -5
  11. data/gemfiles/rails41.gemfile +3 -6
  12. data/gemfiles/rails42.gemfile +5 -10
  13. data/gemfiles/rails50.gemfile +9 -10
  14. data/gemfiles/rails51.gemfile +8 -9
  15. data/gemfiles/rails52.gemfile +6 -5
  16. data/gemfiles/rails60.gemfile +7 -12
  17. data/gemfiles/rails61.gemfile +54 -0
  18. data/lib/generators/rollbar/rollbar_generator.rb +18 -14
  19. data/lib/generators/rollbar/templates/{initializer.rb → initializer.erb} +0 -0
  20. data/lib/rails/rollbar_runner.rb +12 -5
  21. data/lib/rollbar/capistrano.rb +16 -8
  22. data/lib/rollbar/capistrano3.rb +8 -2
  23. data/lib/rollbar/capistrano_tasks.rb +37 -10
  24. data/lib/rollbar/configuration.rb +114 -90
  25. data/lib/rollbar/delay/shoryuken.rb +4 -3
  26. data/lib/rollbar/delay/sidekiq.rb +3 -1
  27. data/lib/rollbar/delay/sucker_punch.rb +1 -2
  28. data/lib/rollbar/delay/thread.rb +3 -2
  29. data/lib/rollbar/deploy.rb +6 -7
  30. data/lib/rollbar/encoding/encoder.rb +7 -3
  31. data/lib/rollbar/exception_reporter.rb +17 -8
  32. data/lib/rollbar/item/backtrace.rb +10 -8
  33. data/lib/rollbar/item/frame.rb +6 -5
  34. data/lib/rollbar/item/locals.rb +3 -2
  35. data/lib/rollbar/item.rb +48 -39
  36. data/lib/rollbar/json.rb +1 -1
  37. data/lib/rollbar/lazy_store.rb +1 -3
  38. data/lib/rollbar/logger.rb +2 -0
  39. data/lib/rollbar/logger_proxy.rb +3 -1
  40. data/lib/rollbar/middleware/js.rb +58 -36
  41. data/lib/rollbar/middleware/rack/builder.rb +3 -3
  42. data/lib/rollbar/middleware/rack/test_session.rb +3 -3
  43. data/lib/rollbar/middleware/rack.rb +4 -4
  44. data/lib/rollbar/middleware/rails/rollbar.rb +9 -6
  45. data/lib/rollbar/middleware/rails/show_exceptions.rb +8 -4
  46. data/lib/rollbar/notifier/trace_with_bindings.rb +4 -2
  47. data/lib/rollbar/notifier.rb +179 -133
  48. data/lib/rollbar/plugin.rb +8 -8
  49. data/lib/rollbar/plugins/active_job.rb +11 -2
  50. data/lib/rollbar/plugins/delayed_job/plugin.rb +10 -3
  51. data/lib/rollbar/plugins/goalie.rb +27 -16
  52. data/lib/rollbar/plugins/rails/controller_methods.rb +18 -14
  53. data/lib/rollbar/plugins/rails/railtie30.rb +2 -1
  54. data/lib/rollbar/plugins/rails/railtie32.rb +2 -1
  55. data/lib/rollbar/plugins/rails/railtie_mixin.rb +2 -2
  56. data/lib/rollbar/plugins/rails.rb +5 -2
  57. data/lib/rollbar/plugins/rake.rb +2 -1
  58. data/lib/rollbar/plugins/sidekiq/plugin.rb +37 -20
  59. data/lib/rollbar/plugins/sidekiq.rb +1 -1
  60. data/lib/rollbar/plugins/thread.rb +8 -7
  61. data/lib/rollbar/plugins/validations.rb +3 -1
  62. data/lib/rollbar/rake_tasks.rb +0 -1
  63. data/lib/rollbar/request_data_extractor.rb +38 -17
  64. data/lib/rollbar/rollbar_test.rb +3 -1
  65. data/lib/rollbar/scrubbers/params.rb +13 -7
  66. data/lib/rollbar/scrubbers/url.rb +48 -14
  67. data/lib/rollbar/scrubbers.rb +1 -1
  68. data/lib/rollbar/truncation/remove_any_key_strategy.rb +4 -1
  69. data/lib/rollbar/truncation/remove_extra_strategy.rb +3 -1
  70. data/lib/rollbar/util/hash.rb +14 -7
  71. data/lib/rollbar/util/ip_anonymizer.rb +1 -1
  72. data/lib/rollbar/util.rb +19 -13
  73. data/lib/rollbar/version.rb +1 -1
  74. data/lib/rollbar.rb +12 -7
  75. data/lib/tasks/benchmark.rake +2 -1
  76. data/rollbar.gemspec +3 -1
  77. metadata +5 -5
@@ -24,7 +24,9 @@ module Rollbar
24
24
  end
25
25
 
26
26
  def delete_trace_chain_extra(body)
27
- body['trace_chain'][0].delete('extra') if body['trace_chain'] && body['trace_chain'][0]['extra']
27
+ return unless body['trace_chain'] && body['trace_chain'][0]['extra']
28
+
29
+ body['trace_chain'][0].delete('extra')
28
30
  end
29
31
 
30
32
  def delete_trace_extra(body)
@@ -2,9 +2,10 @@ module Rollbar
2
2
  module Util
3
3
  module Hash # :nodoc:
4
4
  def self.deep_stringify_keys(hash, seen = {})
5
- return if seen[hash.object_id]
5
+ seen.compare_by_identity
6
+ return if seen[hash]
6
7
 
7
- seen[hash.object_id] = true
8
+ seen[hash] = true
8
9
  replace_seen_children(hash, seen)
9
10
 
10
11
  hash.reduce({}) do |h, (key, value)|
@@ -19,10 +20,10 @@ module Rollbar
19
20
  when ::Hash
20
21
  send(meth, thing, seen)
21
22
  when Array
22
- if seen[thing.object_id]
23
+ if seen[thing]
23
24
  thing
24
25
  else
25
- seen[thing.object_id] = true
26
+ seen[thing] = true
26
27
  replace_seen_children(thing, seen)
27
28
  thing.map { |v| map_value(v, meth, seen) }
28
29
  end
@@ -34,12 +35,18 @@ module Rollbar
34
35
  def self.replace_seen_children(thing, seen)
35
36
  case thing
36
37
  when ::Hash
37
- thing.keys.each do |key|
38
- thing[key] = "removed circular reference: #{thing[key]}" if seen[thing[key].object_id]
38
+ thing.keys.each do |key| # rubocop:disable Style/HashEachMethods
39
+ if seen[thing[key]]
40
+ thing[key] =
41
+ "removed circular reference: #{thing[key]}"
42
+ end
39
43
  end
40
44
  when Array
41
45
  thing.each_with_index do |_, i|
42
- thing[i] = "removed circular reference: #{thing[i]}" if seen[thing[i].object_id]
46
+ if seen[thing[i]]
47
+ thing[i] =
48
+ "removed circular reference: #{thing[i]}"
49
+ end
43
50
  end
44
51
  end
45
52
  end
@@ -24,7 +24,7 @@ module Rollbar
24
24
  def self.anonymize_ipv6(ip)
25
25
  ip_parts = ip.to_s.split ':'
26
26
 
27
- ip_string = ip_parts[0..2].join(':') + ':0000:0000:0000:0000:0000'
27
+ ip_string = "#{ip_parts[0..2].join(':')}:0000:0000:0000:0000:0000"
28
28
 
29
29
  IPAddr.new(ip_string).to_s
30
30
  end
data/lib/rollbar/util.rb CHANGED
@@ -7,9 +7,10 @@ module Rollbar
7
7
  end
8
8
 
9
9
  def self.iterate_and_update(obj, block, seen = {})
10
- return if obj.frozen? || seen[obj.object_id]
10
+ seen.compare_by_identity
11
+ return if obj.frozen? || seen[obj]
11
12
 
12
- seen[obj.object_id] = true
13
+ seen[obj] = true
13
14
 
14
15
  if obj.is_a?(Array)
15
16
  iterate_and_update_array(obj, block, seen)
@@ -29,7 +30,7 @@ module Rollbar
29
30
  end
30
31
 
31
32
  def self.iterate_and_update_hash(obj, block, seen)
32
- obj.keys.each do |k|
33
+ obj.keys.each do |k| # rubocop:disable Style/HashEachMethods
33
34
  v = obj[k]
34
35
  new_key = block.call(k)
35
36
 
@@ -47,18 +48,21 @@ module Rollbar
47
48
  end
48
49
 
49
50
  def self.deep_copy(obj, copied = {})
51
+ copied.compare_by_identity
52
+
50
53
  # if we've already made a copy, return it.
51
- return copied[obj.object_id] if copied[obj.object_id]
54
+ return copied[obj] if copied[obj]
52
55
 
53
56
  result = clone_obj(obj)
54
57
 
55
58
  # Memoize the cloned object before recursive calls to #deep_copy below.
56
59
  # This is the point of doing the work in two steps.
57
- copied[obj.object_id] = result
60
+ copied[obj] = result
58
61
 
59
- if obj.is_a?(::Hash)
62
+ case obj
63
+ when ::Hash
60
64
  obj.each { |k, v| result[k] = deep_copy(v, copied) }
61
- elsif obj.is_a?(Array)
65
+ when Array
62
66
  obj.each { |v| result << deep_copy(v, copied) }
63
67
  end
64
68
 
@@ -66,9 +70,10 @@ module Rollbar
66
70
  end
67
71
 
68
72
  def self.clone_obj(obj)
69
- if obj.is_a?(::Hash)
73
+ case obj
74
+ when ::Hash
70
75
  obj.dup
71
- elsif obj.is_a?(Array)
76
+ when Array
72
77
  obj.dup.clear
73
78
  else
74
79
  obj
@@ -78,12 +83,13 @@ module Rollbar
78
83
  def self.deep_merge(hash1, hash2, merged = {})
79
84
  hash1 ||= {}
80
85
  hash2 ||= {}
86
+ merged.compare_by_identity
81
87
 
82
88
  # If we've already merged these two objects, return hash1 now.
83
- return hash1 if merged[hash1.object_id] && merged[hash1.object_id].include?(hash2.object_id)
89
+ return hash1 if merged[hash1] && merged[hash1].include?(hash2.object_id)
84
90
 
85
- merged[hash1.object_id] ||= []
86
- merged[hash1.object_id] << hash2.object_id
91
+ merged[hash1] ||= []
92
+ merged[hash1] << hash2.object_id
87
93
 
88
94
  perform_deep_merge(hash1, hash2, merged)
89
95
 
@@ -121,7 +127,7 @@ module Rollbar
121
127
  end
122
128
 
123
129
  def self.count_method_in_stack(method_symbol, file_path = '')
124
- caller.grep(/#{file_path}.*#{method_symbol.to_s}/).count
130
+ caller.grep(/#{file_path}.*#{method_symbol}/).count
125
131
  end
126
132
 
127
133
  def self.method_in_stack(method_symbol, file_path = '')
@@ -1,3 +1,3 @@
1
1
  module Rollbar
2
- VERSION = '3.1.0'.freeze
2
+ VERSION = '3.3.0'.freeze
3
3
  end
data/lib/rollbar.rb CHANGED
@@ -8,6 +8,7 @@ require 'forwardable'
8
8
  begin
9
9
  require 'securerandom'
10
10
  rescue LoadError
11
+ # Skip loading
11
12
  end
12
13
 
13
14
  require 'rollbar/version'
@@ -31,8 +32,7 @@ module Rollbar
31
32
 
32
33
  def_delegators :notifier, *PUBLIC_NOTIFIER_METHODS
33
34
 
34
- attr_writer :plugins
35
- attr_writer :root_notifier
35
+ attr_writer :plugins, :root_notifier
36
36
 
37
37
  def notifier
38
38
  # Use the global instance @root_notifier so we don't fall
@@ -160,8 +160,10 @@ module Rollbar
160
160
 
161
161
  # Backwards compatibility methods
162
162
 
163
- def report_exception(exception, request_data = nil, person_data = nil, level = 'error')
164
- Kernel.warn('[DEPRECATION] Rollbar.report_exception has been deprecated, please use log() or one of the level functions')
163
+ def report_exception(exception, request_data = nil, person_data = nil,
164
+ level = 'error')
165
+ Kernel.warn('[DEPRECATION] Rollbar.report_exception has been deprecated, ' \
166
+ 'please use log() or one of the level functions')
165
167
 
166
168
  scope = {}
167
169
  scope[:request] = request_data if request_data
@@ -173,13 +175,16 @@ module Rollbar
173
175
  end
174
176
 
175
177
  def report_message(message, level = 'info', extra_data = nil)
176
- Kernel.warn('[DEPRECATION] Rollbar.report_message has been deprecated, please use log() or one of the level functions')
178
+ Kernel.warn('[DEPRECATION] Rollbar.report_message has been deprecated, ' \
179
+ 'please use log() or one of the level functions')
177
180
 
178
181
  Rollbar.notifier.log(level, message, extra_data)
179
182
  end
180
183
 
181
- def report_message_with_request(message, level = 'info', request_data = nil, person_data = nil, extra_data = nil)
182
- Kernel.warn('[DEPRECATION] Rollbar.report_message_with_request has been deprecated, please use log() or one of the level functions')
184
+ def report_message_with_request(message, level = 'info', request_data = nil,
185
+ person_data = nil, extra_data = nil)
186
+ Kernel.warn('[DEPRECATION] Rollbar.report_message_with_request has been ' \
187
+ 'deprecated, please use log() or one of the level functions')
183
188
 
184
189
  scope = {}
185
190
  scope[:request] = request_data if request_data
@@ -77,7 +77,8 @@ class BenchmarkTraceWithBindings # :nodoc:
77
77
  def trace_point # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
78
78
  return unless defined?(TracePoint)
79
79
 
80
- @trace_point ||= TracePoint.new(:call, :return, :b_call, :b_return, :c_call, :c_return, :raise) do |tp|
80
+ @trace_point ||= TracePoint.new(:call, :return, :b_call, :b_return, :c_call,
81
+ :c_return, :raise) do |tp|
81
82
  next if options['hook_only']
82
83
 
83
84
  case tp.event
data/rollbar.gemspec CHANGED
@@ -12,7 +12,9 @@ Gem::Specification.new do |gem|
12
12
  gem.summary = 'Reports exceptions to Rollbar'
13
13
  gem.homepage = 'https://rollbar.com'
14
14
  gem.license = 'MIT'
15
- gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
+ gem.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ f.match(%r{^(test|spec|features)/})
17
+ end
16
18
  gem.files += ['spec/support/rollbar_api.rb'] # useful helper for app spec/tests.
17
19
  gem.name = 'rollbar'
18
20
  gem.require_paths = ['lib']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rollbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rollbar, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-06 00:00:00.000000000 Z
11
+ date: 2021-10-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Easy and powerful exception tracking for Ruby
14
14
  email:
@@ -47,8 +47,9 @@ files:
47
47
  - gemfiles/rails51.gemfile
48
48
  - gemfiles/rails52.gemfile
49
49
  - gemfiles/rails60.gemfile
50
+ - gemfiles/rails61.gemfile
50
51
  - lib/generators/rollbar/rollbar_generator.rb
51
- - lib/generators/rollbar/templates/initializer.rb
52
+ - lib/generators/rollbar/templates/initializer.erb
52
53
  - lib/rails/rollbar_runner.rb
53
54
  - lib/rollbar.rb
54
55
  - lib/rollbar/capistrano.rb
@@ -160,8 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
161
  - !ruby/object:Gem::Version
161
162
  version: '0'
162
163
  requirements: []
163
- rubyforge_project:
164
- rubygems_version: 2.4.8
164
+ rubygems_version: 3.1.4
165
165
  signing_key:
166
166
  specification_version: 4
167
167
  summary: Reports exceptions to Rollbar