bugsnag 6.8.0 → 6.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +1 -0
  3. data/.travis.yml +12 -7
  4. data/CHANGELOG.md +12 -0
  5. data/README.md +1 -1
  6. data/VERSION +1 -1
  7. data/features/.gitignore +1 -0
  8. data/features/delayed_job.feature +53 -0
  9. data/features/fixtures/delayed_job/Dockerfile +10 -5
  10. data/features/fixtures/delayed_job/app/.gitignore +21 -0
  11. data/features/fixtures/delayed_job/app/Gemfile +57 -0
  12. data/features/fixtures/delayed_job/app/README.md +24 -0
  13. data/features/fixtures/delayed_job/app/Rakefile +6 -0
  14. data/features/fixtures/delayed_job/app/app/assets/config/manifest.js +3 -0
  15. data/features/fixtures/delayed_job/app/app/assets/images/.keep +0 -0
  16. data/features/fixtures/delayed_job/app/app/assets/javascripts/application.js +16 -0
  17. data/features/fixtures/delayed_job/app/app/assets/javascripts/cable.js +13 -0
  18. data/features/fixtures/delayed_job/app/app/assets/javascripts/channels/.keep +0 -0
  19. data/features/fixtures/delayed_job/app/app/assets/stylesheets/application.css +15 -0
  20. data/features/fixtures/delayed_job/app/app/channels/application_cable/channel.rb +4 -0
  21. data/features/fixtures/delayed_job/app/app/channels/application_cable/connection.rb +4 -0
  22. data/features/fixtures/delayed_job/app/app/controllers/application_controller.rb +3 -0
  23. data/features/fixtures/delayed_job/app/app/controllers/concerns/.keep +0 -0
  24. data/features/fixtures/delayed_job/app/app/helpers/application_helper.rb +2 -0
  25. data/features/fixtures/delayed_job/app/app/jobs/application_job.rb +2 -0
  26. data/features/fixtures/delayed_job/app/app/mailers/application_mailer.rb +4 -0
  27. data/features/fixtures/delayed_job/app/app/models/application_record.rb +3 -0
  28. data/features/fixtures/delayed_job/app/app/models/concerns/.keep +0 -0
  29. data/features/fixtures/delayed_job/app/app/models/test_model.rb +10 -0
  30. data/features/fixtures/delayed_job/app/app/views/layouts/application.html.erb +14 -0
  31. data/features/fixtures/delayed_job/app/app/views/layouts/mailer.html.erb +13 -0
  32. data/features/fixtures/delayed_job/app/app/views/layouts/mailer.text.erb +1 -0
  33. data/features/fixtures/delayed_job/app/config.ru +5 -0
  34. data/features/fixtures/delayed_job/app/config/application.rb +15 -0
  35. data/features/fixtures/delayed_job/app/config/boot.rb +3 -0
  36. data/features/fixtures/delayed_job/app/config/cable.yml +9 -0
  37. data/features/fixtures/delayed_job/app/config/database.yml +25 -0
  38. data/features/fixtures/delayed_job/app/config/environment.rb +5 -0
  39. data/features/fixtures/delayed_job/app/config/environments/development.rb +54 -0
  40. data/features/fixtures/delayed_job/app/config/environments/production.rb +86 -0
  41. data/features/fixtures/delayed_job/app/config/environments/test.rb +42 -0
  42. data/features/fixtures/delayed_job/app/config/initializers/application_controller_renderer.rb +8 -0
  43. data/features/fixtures/delayed_job/app/config/initializers/assets.rb +11 -0
  44. data/features/fixtures/delayed_job/app/config/initializers/backtrace_silencers.rb +7 -0
  45. data/features/fixtures/delayed_job/app/config/initializers/bugsnag.rb +14 -0
  46. data/features/fixtures/delayed_job/app/config/initializers/cookies_serializer.rb +5 -0
  47. data/features/fixtures/delayed_job/app/config/initializers/delayed_job.rb +3 -0
  48. data/features/fixtures/delayed_job/app/config/initializers/filter_parameter_logging.rb +4 -0
  49. data/features/fixtures/delayed_job/app/config/initializers/inflections.rb +16 -0
  50. data/features/fixtures/delayed_job/app/config/initializers/mime_types.rb +4 -0
  51. data/features/fixtures/delayed_job/app/config/initializers/new_framework_defaults.rb +26 -0
  52. data/features/fixtures/delayed_job/app/config/initializers/session_store.rb +3 -0
  53. data/features/fixtures/delayed_job/app/config/initializers/wrap_parameters.rb +14 -0
  54. data/features/fixtures/delayed_job/app/config/locales/en.yml +23 -0
  55. data/features/fixtures/delayed_job/app/config/puma.rb +47 -0
  56. data/features/fixtures/delayed_job/app/config/routes.rb +3 -0
  57. data/features/fixtures/delayed_job/app/config/secrets.yml +22 -0
  58. data/features/fixtures/delayed_job/app/config/spring.rb +6 -0
  59. data/features/fixtures/delayed_job/app/db/migrate/20181024232549_create_delayed_jobs.rb +22 -0
  60. data/features/fixtures/delayed_job/app/db/migrate/20181024232817_create_test_models.rb +8 -0
  61. data/features/fixtures/delayed_job/app/db/schema.rb +30 -0
  62. data/features/fixtures/delayed_job/app/db/seeds.rb +7 -0
  63. data/features/fixtures/delayed_job/app/lib/assets/.keep +0 -0
  64. data/features/fixtures/delayed_job/app/lib/tasks/.keep +0 -0
  65. data/features/fixtures/delayed_job/app/log/.keep +0 -0
  66. data/features/fixtures/delayed_job/app/public/404.html +67 -0
  67. data/features/fixtures/delayed_job/app/public/422.html +67 -0
  68. data/features/fixtures/delayed_job/app/public/500.html +66 -0
  69. data/features/fixtures/delayed_job/app/public/apple-touch-icon-precomposed.png +0 -0
  70. data/features/fixtures/delayed_job/app/public/apple-touch-icon.png +0 -0
  71. data/features/fixtures/delayed_job/app/public/favicon.ico +0 -0
  72. data/features/fixtures/delayed_job/app/public/robots.txt +5 -0
  73. data/features/fixtures/delayed_job/app/test/controllers/.keep +0 -0
  74. data/features/fixtures/delayed_job/app/test/fixtures/.keep +0 -0
  75. data/features/fixtures/delayed_job/app/test/fixtures/files/.keep +0 -0
  76. data/features/fixtures/delayed_job/app/test/fixtures/test_models.yml +11 -0
  77. data/features/fixtures/delayed_job/app/test/helpers/.keep +0 -0
  78. data/features/fixtures/delayed_job/app/test/integration/.keep +0 -0
  79. data/features/fixtures/delayed_job/app/test/mailers/.keep +0 -0
  80. data/features/fixtures/delayed_job/app/test/models/.keep +0 -0
  81. data/features/fixtures/delayed_job/app/test/models/test_model_test.rb +7 -0
  82. data/features/fixtures/delayed_job/app/test/test_helper.rb +10 -0
  83. data/features/fixtures/delayed_job/app/tmp/.keep +0 -0
  84. data/features/fixtures/docker-compose.yml +24 -4
  85. data/features/sidekiq.feature +3 -1
  86. data/features/steps/ruby_notifier_steps.rb +0 -33
  87. data/features/support/env.rb +18 -0
  88. data/lib/bugsnag.rb +1 -0
  89. data/lib/bugsnag/integrations/delayed_job.rb +21 -78
  90. data/lib/bugsnag/integrations/sidekiq.rb +34 -19
  91. data/lib/bugsnag/middleware/delayed_job.rb +73 -0
  92. data/spec/integrations/sidekiq_spec.rb +51 -16
  93. metadata +80 -6
  94. data/features/fixtures/delayed_job/.dockerignore +0 -1
  95. data/features/fixtures/delayed_job/Gemfile +0 -4
  96. data/spec/integrations/delayed_job_spec.rb +0 -118
@@ -18,6 +18,22 @@ def output_logs
18
18
  end
19
19
  end
20
20
 
21
+ def install_fixture_gems
22
+ gem_dir = File.expand_path('../../../', __FILE__)
23
+ Dir.chdir(gem_dir) do
24
+ `rm bugsnag-*.gem` unless Dir.glob('bugsnag-*.gem').empty?
25
+ `gem build bugsnag.gemspec`
26
+ Dir.entries('features/fixtures').reject { |entry| ['.', '..'].include?(entry) }.each do |entry|
27
+ target_dir = "features/fixtures/#{entry}"
28
+ if File.directory?(target_dir)
29
+ `cp bugsnag-*.gem #{target_dir}`
30
+ `gem unpack #{target_dir}/bugsnag-*.gem --target #{target_dir}/temp-bugsnag-lib`
31
+ end
32
+ end
33
+ `rm bugsnag-*.gem`
34
+ end
35
+ end
36
+
21
37
  def current_ip
22
38
  if OS.mac?
23
39
  'host.docker.internal'
@@ -27,3 +43,5 @@ def current_ip
27
43
  ip_list.captures.first
28
44
  end
29
45
  end
46
+
47
+ install_fixture_gems
@@ -27,6 +27,7 @@ require "bugsnag/middleware/mailman"
27
27
  require "bugsnag/middleware/rake"
28
28
  require "bugsnag/middleware/callbacks"
29
29
  require "bugsnag/middleware/classify_error"
30
+ require "bugsnag/middleware/delayed_job"
30
31
 
31
32
  module Bugsnag
32
33
  LOCK = Mutex.new
@@ -5,92 +5,35 @@ unless defined?(Delayed::Plugin)
5
5
  raise LoadError, "bugsnag requires delayed_job > 3.x"
6
6
  end
7
7
 
8
- unless defined? Delayed::Plugins::Bugsnag
9
- module Delayed
10
- module Plugins
11
- class Bugsnag < Plugin
12
-
13
- FRAMEWORK_ATTRIBUTES = {
14
- :framework => "DelayedJob"
15
- }
16
-
17
- module Notify
18
- def error(job, error)
19
- overrides = {
20
- :job => {
21
- :class => job.class.name,
22
- :id => job.id,
23
- },
24
- :severity_reason => {
25
- :type => ::Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
26
- :attributes => FRAMEWORK_ATTRIBUTES,
27
- },
28
- }
29
- if job.respond_to?(:queue) && (queue = job.queue)
30
- overrides[:job][:queue] = queue
31
- end
32
- if job.respond_to?(:attempts)
33
- max_attempts = (job.respond_to?(:max_attempts) && job.max_attempts) || Delayed::Worker.max_attempts
34
- overrides[:job][:attempts] = "#{job.attempts + 1} / #{max_attempts}"
35
- # +1 as "attempts" is zero-based and does not include the current failed attempt
36
- end
37
- if payload = job.payload_object
38
- p = {
39
- :class => payload.class.name,
40
- }
41
- p[:id] = payload.id if payload.respond_to?(:id)
42
- p[:display_name] = payload.display_name if payload.respond_to?(:display_name)
43
- p[:method_name] = payload.method_name if payload.respond_to?(:method_name)
44
-
45
- if payload.respond_to?(:args)
46
- p[:args] = payload.args
47
- elsif payload.respond_to?(:to_h)
48
- p[:args] = payload.to_h
49
- end
50
-
51
- if payload.is_a?(::Delayed::PerformableMethod) && (object = payload.object)
52
- p[:object] = {
53
- :class => object.class.name,
54
- }
55
- p[:object][:id] = object.id if object.respond_to?(:id)
56
- end
57
- add_active_job_details(p, payload)
58
- overrides[:job][:payload] = p
59
- end
60
-
61
- ::Bugsnag.notify(error, true) do |report|
8
+ ::Bugsnag.configuration.internal_middleware.use(::Bugsnag::Middleware::DelayedJob)
9
+
10
+ module Delayed
11
+ module Plugins
12
+ class Bugsnag < ::Delayed::Plugin
13
+ callbacks do |lifecycle|
14
+ lifecycle.around(:invoke_job) do |job, *args, &block|
15
+ begin
16
+ ::Bugsnag.configuration.app_type = 'delayed_job'
17
+ ::Bugsnag.configuration.set_request_data(:delayed_job, job)
18
+ block.call(job, *args)
19
+ rescue Exception => exception
20
+ ::Bugsnag.notify(exception, true) do |report|
62
21
  report.severity = "error"
63
22
  report.severity_reason = {
64
23
  :type => ::Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
65
- :attributes => FRAMEWORK_ATTRIBUTES
24
+ :attributes => {
25
+ :framework => "DelayedJob"
26
+ }
66
27
  }
67
- report.meta_data.merge! overrides
68
- end
69
-
70
- super if defined?(super)
71
- end
72
-
73
- def add_active_job_details(p, payload)
74
- if payload.respond_to?(:job_data) && payload.job_data.respond_to?(:[])
75
- [:job_class, :arguments, :queue_name, :job_id].each do |key|
76
- if (value = payload.job_data[key.to_s])
77
- p[key] = value
78
- end
79
- end
80
28
  end
81
- end
82
- end
83
-
84
- callbacks do |lifecycle|
85
- lifecycle.before(:invoke_job) do |job|
86
- payload = job.payload_object
87
- payload = payload.object if payload.is_a? Delayed::PerformableMethod
88
- payload.extend Notify
29
+ raise exception
30
+ ensure
31
+ ::Bugsnag.configuration.clear_request_data
89
32
  end
90
33
  end
91
34
  end
92
35
  end
93
36
  end
94
-
95
- Delayed::Worker.plugins << Delayed::Plugins::Bugsnag
96
37
  end
38
+
39
+ Delayed::Worker.plugins << Delayed::Plugins::Bugsnag
@@ -5,9 +5,11 @@ module Bugsnag
5
5
  # Extracts and attaches Sidekiq job and queue information to an error report
6
6
  class Sidekiq
7
7
 
8
- FRAMEWORK_ATTRIBUTES = {
9
- :framework => "Sidekiq"
10
- }
8
+ unless const_defined?(:FRAMEWORK_ATTRIBUTES)
9
+ FRAMEWORK_ATTRIBUTES = {
10
+ :framework => "Sidekiq"
11
+ }
12
+ end
11
13
 
12
14
  def initialize
13
15
  Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Sidekiq)
@@ -19,31 +21,44 @@ module Bugsnag
19
21
  begin
20
22
  # store msg/queue in thread local state to be read by Bugsnag::Middleware::Sidekiq
21
23
  Bugsnag.configuration.set_request_data :sidekiq, { :msg => msg, :queue => queue }
22
-
23
24
  yield
24
25
  rescue Exception => ex
25
- raise ex if [Interrupt, SystemExit, SignalException].include? ex.class
26
- Bugsnag.notify(ex, true) do |report|
27
- report.severity = "error"
28
- report.severity_reason = {
29
- :type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
30
- :attributes => FRAMEWORK_ATTRIBUTES
31
- }
32
- end
26
+ self.class.notify(ex) unless self.class.sidekiq_supports_error_handlers
33
27
  raise
34
28
  ensure
35
29
  Bugsnag.configuration.clear_request_data
36
30
  end
37
31
  end
32
+
33
+ def self.notify(exception)
34
+ return if [Interrupt, SystemExit, SignalException].include? exception.class
35
+ Bugsnag.notify(exception, true) do |report|
36
+ report.severity = "error"
37
+ report.severity_reason = {
38
+ :type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
39
+ :attributes => FRAMEWORK_ATTRIBUTES
40
+ }
41
+ end
42
+ end
43
+
44
+ def self.sidekiq_supports_error_handlers
45
+ Gem::Version.new(::Sidekiq::VERSION) >= Gem::Version.new('3.0.0')
46
+ end
47
+
48
+ def self.configure_server(server)
49
+ if Bugsnag::Sidekiq.sidekiq_supports_error_handlers
50
+ server.error_handlers << proc do |ex, _context|
51
+ Bugsnag::Sidekiq.notify(ex)
52
+ end
53
+ end
54
+
55
+ server.server_middleware do |chain|
56
+ chain.add ::Bugsnag::Sidekiq
57
+ end
58
+ end
38
59
  end
39
60
  end
40
61
 
41
62
  ::Sidekiq.configure_server do |config|
42
- config.server_middleware do |chain|
43
- if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('3.3.0')
44
- chain.prepend ::Bugsnag::Sidekiq
45
- else
46
- chain.add ::Bugsnag::Sidekiq
47
- end
48
- end
63
+ Bugsnag::Sidekiq.configure_server(config)
49
64
  end
@@ -0,0 +1,73 @@
1
+ module Bugsnag::Middleware
2
+ ##
3
+ # Attaches delayed_job information to an error report
4
+ class DelayedJob
5
+ def initialize(bugsnag)
6
+ @bugsnag = bugsnag
7
+ end
8
+
9
+ def call(report)
10
+ job = report.request_data[:delayed_job]
11
+ if job
12
+ job_data = {
13
+ :class => job.class.name,
14
+ :id => job.id
15
+ }
16
+ job_data[:priority] = job.priority if job.respond_to?(:priority)
17
+ job_data[:run_at] = job.run_at if job.respond_to?(:run_at)
18
+ job_data[:locked_at] = job.locked_at if job.respond_to?(:locked_at)
19
+ job_data[:locked_by] = job.locked_by if job.respond_to?(:locked_by)
20
+ job_data[:created_at] = job.created_at if job.respond_to?(:created_at)
21
+ job_data[:queue] = job.queue if job.respond_to?(:queue)
22
+
23
+ if job.respond_to?(:payload_object)
24
+ job_data[:active_job] = job.payload_object.job_data if job.payload_object.respond_to?(:job_data)
25
+ payload_data = construct_job_payload(job.payload_object)
26
+ report.context = payload_data[:display_name] if payload_data.include?(:display_name)
27
+ job_data[:payload] = payload_data
28
+ end
29
+
30
+ if job.respond_to?(:attempts)
31
+ # +1 as "attempts" is zero-based and does not include the current failed attempt
32
+ job_data[:attempt] = job.attempts + 1
33
+ job_data[:max_attempts] = (job.respond_to?(:max_attempts) && job.max_attempts) || Delayed::Worker.max_attempts
34
+ end
35
+
36
+ report.add_tab(:job, job_data)
37
+ end
38
+ @bugsnag.call(report)
39
+ end
40
+
41
+ def construct_job_payload(payload)
42
+ data = {
43
+ :class => payload.class.name
44
+ }
45
+ data[:id] = payload.id if payload.respond_to?(:id)
46
+ data[:display_name] = payload.display_name if payload.respond_to?(:display_name)
47
+ data[:method_name] = payload.method_name if payload.respond_to?(:method_name)
48
+
49
+ if payload.respond_to?(:args)
50
+ data[:args] = payload.args
51
+ elsif payload.respond_to?(:to_h)
52
+ data[:args] = payload.to_h
53
+ elsif payload.respond_to?(:instance_values)
54
+ data[:args] = payload.instance_values
55
+ end
56
+
57
+ if payload.is_a?(::Delayed::PerformableMethod) && (object = payload.object)
58
+ data[:object] = {
59
+ :class => object.class.name
60
+ }
61
+ data[:object][:id] = object.id if object.respond_to?(:id)
62
+ end
63
+ if payload.respond_to?(:job_data) && payload.job_data.respond_to?(:[])
64
+ [:job_class, :arguments, :queue_name, :job_id].each do |key|
65
+ if (value = payload.job_data[key.to_s])
66
+ data[key] = value
67
+ end
68
+ end
69
+ end
70
+ data
71
+ end
72
+ end
73
+ end
@@ -9,26 +9,61 @@ class FailingWorker
9
9
  end
10
10
 
11
11
  describe Bugsnag::Sidekiq do
12
- before do
13
- Sidekiq::Testing.inline!
14
- Sidekiq::Testing.server_middleware do |chain|
15
- chain.add Bugsnag::Sidekiq
12
+ # Integration testing v3 is handled by maze as sidekiq doesnt
13
+ # support error_handlers in testing mode
14
+ context "integration tests in v2" do
15
+ before do
16
+ Sidekiq::Testing.inline!
17
+ stub_const('Sidekiq::VERSION', '2.0.0')
18
+ Sidekiq::Testing.server_middleware do |chain|
19
+ chain.add ::Bugsnag::Sidekiq
20
+ end
21
+ end
22
+
23
+ it "works" do
24
+ begin
25
+ FailingWorker.perform_async(-0)
26
+ fail("shouldn't be here")
27
+ rescue
28
+ end
29
+
30
+ expect(Bugsnag).to have_sent_notification {|payload, headers|
31
+ event = get_event_from_payload(payload)
32
+ expect(event["metaData"]["sidekiq"]["msg"]["class"]).to eq("FailingWorker")
33
+ expect(event["metaData"]["sidekiq"]["msg"]["args"]).to eq([-0])
34
+ expect(event["metaData"]["sidekiq"]["msg"]["queue"]).to eq("default")
35
+ expect(event["severity"]).to eq("error")
36
+ }
16
37
  end
17
38
  end
18
39
 
19
- it "works" do
20
- begin
21
- FailingWorker.perform_async(-0)
22
- fail("shouldn't be here")
23
- rescue
40
+ context "initializing the integrations" do
41
+ it "works in v2" do
42
+ config = double
43
+ expect(::Sidekiq).to receive(:configure_server).and_yield(config)
44
+ stub_const('Sidekiq::VERSION', '2.0.0')
45
+
46
+ chain = double
47
+ expect(config).to receive(:server_middleware).and_yield(chain)
48
+ expect(chain).to receive(:add).with(::Bugsnag::Sidekiq)
49
+
50
+ load './lib/bugsnag/integrations/sidekiq.rb'
24
51
  end
25
52
 
26
- expect(Bugsnag).to have_sent_notification {|payload, headers|
27
- event = get_event_from_payload(payload)
28
- expect(event["metaData"]["sidekiq"]["msg"]["class"]).to eq("FailingWorker")
29
- expect(event["metaData"]["sidekiq"]["msg"]["args"]).to eq([-0])
30
- expect(event["metaData"]["sidekiq"]["msg"]["queue"]).to eq("default")
31
- expect(event["severity"]).to eq("error")
32
- }
53
+ it "works in v3" do
54
+ config = double
55
+ expect(::Sidekiq).to receive(:configure_server).and_yield(config)
56
+ stub_const('Sidekiq::VERSION', '3.0.0')
57
+
58
+ error_handlers = []
59
+ expect(config).to receive(:error_handlers).and_return(error_handlers)
60
+
61
+ chain = double
62
+ expect(config).to receive(:server_middleware).and_yield(chain)
63
+ expect(chain).to receive(:add).with(::Bugsnag::Sidekiq)
64
+
65
+ load './lib/bugsnag/integrations/sidekiq.rb'
66
+ expect(error_handlers.size).to eq(1)
67
+ end
33
68
  end
34
69
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bugsnag
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.8.0
4
+ version: 6.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-11 00:00:00.000000000 Z
11
+ date: 2018-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -49,9 +49,83 @@ files:
49
49
  - UPGRADING.md
50
50
  - VERSION
51
51
  - bugsnag.gemspec
52
- - features/fixtures/delayed_job/.dockerignore
52
+ - features/.gitignore
53
+ - features/delayed_job.feature
53
54
  - features/fixtures/delayed_job/Dockerfile
54
- - features/fixtures/delayed_job/Gemfile
55
+ - features/fixtures/delayed_job/app/.gitignore
56
+ - features/fixtures/delayed_job/app/Gemfile
57
+ - features/fixtures/delayed_job/app/README.md
58
+ - features/fixtures/delayed_job/app/Rakefile
59
+ - features/fixtures/delayed_job/app/app/assets/config/manifest.js
60
+ - features/fixtures/delayed_job/app/app/assets/images/.keep
61
+ - features/fixtures/delayed_job/app/app/assets/javascripts/application.js
62
+ - features/fixtures/delayed_job/app/app/assets/javascripts/cable.js
63
+ - features/fixtures/delayed_job/app/app/assets/javascripts/channels/.keep
64
+ - features/fixtures/delayed_job/app/app/assets/stylesheets/application.css
65
+ - features/fixtures/delayed_job/app/app/channels/application_cable/channel.rb
66
+ - features/fixtures/delayed_job/app/app/channels/application_cable/connection.rb
67
+ - features/fixtures/delayed_job/app/app/controllers/application_controller.rb
68
+ - features/fixtures/delayed_job/app/app/controllers/concerns/.keep
69
+ - features/fixtures/delayed_job/app/app/helpers/application_helper.rb
70
+ - features/fixtures/delayed_job/app/app/jobs/application_job.rb
71
+ - features/fixtures/delayed_job/app/app/mailers/application_mailer.rb
72
+ - features/fixtures/delayed_job/app/app/models/application_record.rb
73
+ - features/fixtures/delayed_job/app/app/models/concerns/.keep
74
+ - features/fixtures/delayed_job/app/app/models/test_model.rb
75
+ - features/fixtures/delayed_job/app/app/views/layouts/application.html.erb
76
+ - features/fixtures/delayed_job/app/app/views/layouts/mailer.html.erb
77
+ - features/fixtures/delayed_job/app/app/views/layouts/mailer.text.erb
78
+ - features/fixtures/delayed_job/app/config.ru
79
+ - features/fixtures/delayed_job/app/config/application.rb
80
+ - features/fixtures/delayed_job/app/config/boot.rb
81
+ - features/fixtures/delayed_job/app/config/cable.yml
82
+ - features/fixtures/delayed_job/app/config/database.yml
83
+ - features/fixtures/delayed_job/app/config/environment.rb
84
+ - features/fixtures/delayed_job/app/config/environments/development.rb
85
+ - features/fixtures/delayed_job/app/config/environments/production.rb
86
+ - features/fixtures/delayed_job/app/config/environments/test.rb
87
+ - features/fixtures/delayed_job/app/config/initializers/application_controller_renderer.rb
88
+ - features/fixtures/delayed_job/app/config/initializers/assets.rb
89
+ - features/fixtures/delayed_job/app/config/initializers/backtrace_silencers.rb
90
+ - features/fixtures/delayed_job/app/config/initializers/bugsnag.rb
91
+ - features/fixtures/delayed_job/app/config/initializers/cookies_serializer.rb
92
+ - features/fixtures/delayed_job/app/config/initializers/delayed_job.rb
93
+ - features/fixtures/delayed_job/app/config/initializers/filter_parameter_logging.rb
94
+ - features/fixtures/delayed_job/app/config/initializers/inflections.rb
95
+ - features/fixtures/delayed_job/app/config/initializers/mime_types.rb
96
+ - features/fixtures/delayed_job/app/config/initializers/new_framework_defaults.rb
97
+ - features/fixtures/delayed_job/app/config/initializers/session_store.rb
98
+ - features/fixtures/delayed_job/app/config/initializers/wrap_parameters.rb
99
+ - features/fixtures/delayed_job/app/config/locales/en.yml
100
+ - features/fixtures/delayed_job/app/config/puma.rb
101
+ - features/fixtures/delayed_job/app/config/routes.rb
102
+ - features/fixtures/delayed_job/app/config/secrets.yml
103
+ - features/fixtures/delayed_job/app/config/spring.rb
104
+ - features/fixtures/delayed_job/app/db/migrate/20181024232549_create_delayed_jobs.rb
105
+ - features/fixtures/delayed_job/app/db/migrate/20181024232817_create_test_models.rb
106
+ - features/fixtures/delayed_job/app/db/schema.rb
107
+ - features/fixtures/delayed_job/app/db/seeds.rb
108
+ - features/fixtures/delayed_job/app/lib/assets/.keep
109
+ - features/fixtures/delayed_job/app/lib/tasks/.keep
110
+ - features/fixtures/delayed_job/app/log/.keep
111
+ - features/fixtures/delayed_job/app/public/404.html
112
+ - features/fixtures/delayed_job/app/public/422.html
113
+ - features/fixtures/delayed_job/app/public/500.html
114
+ - features/fixtures/delayed_job/app/public/apple-touch-icon-precomposed.png
115
+ - features/fixtures/delayed_job/app/public/apple-touch-icon.png
116
+ - features/fixtures/delayed_job/app/public/favicon.ico
117
+ - features/fixtures/delayed_job/app/public/robots.txt
118
+ - features/fixtures/delayed_job/app/test/controllers/.keep
119
+ - features/fixtures/delayed_job/app/test/fixtures/.keep
120
+ - features/fixtures/delayed_job/app/test/fixtures/files/.keep
121
+ - features/fixtures/delayed_job/app/test/fixtures/test_models.yml
122
+ - features/fixtures/delayed_job/app/test/helpers/.keep
123
+ - features/fixtures/delayed_job/app/test/integration/.keep
124
+ - features/fixtures/delayed_job/app/test/mailers/.keep
125
+ - features/fixtures/delayed_job/app/test/models/.keep
126
+ - features/fixtures/delayed_job/app/test/models/test_model_test.rb
127
+ - features/fixtures/delayed_job/app/test/test_helper.rb
128
+ - features/fixtures/delayed_job/app/tmp/.keep
55
129
  - features/fixtures/docker-compose.yml
56
130
  - features/fixtures/plain/.dockerignore
57
131
  - features/fixtures/plain/Dockerfile
@@ -421,6 +495,7 @@ files:
421
495
  - lib/bugsnag/middleware/callbacks.rb
422
496
  - lib/bugsnag/middleware/classify_error.rb
423
497
  - lib/bugsnag/middleware/clearance_user.rb
498
+ - lib/bugsnag/middleware/delayed_job.rb
424
499
  - lib/bugsnag/middleware/exception_meta_data.rb
425
500
  - lib/bugsnag/middleware/ignore_error_class.rb
426
501
  - lib/bugsnag/middleware/mailman.rb
@@ -463,7 +538,6 @@ files:
463
538
  - spec/helper_spec.rb
464
539
  - spec/integration_spec.rb
465
540
  - spec/integrations/clearance_user_spec.rb
466
- - spec/integrations/delayed_job_spec.rb
467
541
  - spec/integrations/logger_spec.rb
468
542
  - spec/integrations/mailman_spec.rb
469
543
  - spec/integrations/que_spec.rb
@@ -501,7 +575,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
501
575
  version: '0'
502
576
  requirements: []
503
577
  rubyforge_project:
504
- rubygems_version: 2.7.7
578
+ rubygems_version: 2.7.6
505
579
  signing_key:
506
580
  specification_version: 4
507
581
  summary: Ruby notifier for bugsnag.com