airbrake 4.3.8 → 5.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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/lib/airbrake/capistrano/tasks.rb +64 -0
  3. data/lib/airbrake/delayed_job/plugin.rb +48 -0
  4. data/lib/airbrake/rack/middleware.rb +45 -0
  5. data/lib/airbrake/rack/notice_builder.rb +80 -0
  6. data/lib/airbrake/rack/user.rb +51 -0
  7. data/lib/airbrake/rails/action_controller.rb +35 -0
  8. data/lib/airbrake/rails/active_job.rb +23 -0
  9. data/lib/airbrake/rails/active_record.rb +40 -0
  10. data/lib/airbrake/rails/railtie.rb +61 -0
  11. data/lib/airbrake/rake/task_ext.rb +61 -0
  12. data/lib/airbrake/rake/tasks.rb +93 -0
  13. data/lib/airbrake/resque/failure.rb +19 -0
  14. data/lib/airbrake/sidekiq/error_handler.rb +35 -0
  15. data/lib/airbrake/version.rb +4 -1
  16. data/lib/airbrake.rb +16 -185
  17. data/lib/generators/airbrake_generator.rb +25 -0
  18. data/lib/generators/airbrake_initializer.rb.erb +55 -0
  19. data/spec/airbrake_spec.rb +0 -0
  20. data/spec/apps/rack/dummy_app.rb +17 -0
  21. data/spec/apps/rails/dummy_app.rb +150 -0
  22. data/spec/apps/rails/dummy_task.rake +20 -0
  23. data/spec/apps/rails/logs/32.log +13358 -0
  24. data/spec/apps/rails/logs/40.log +6854 -0
  25. data/spec/apps/rails/logs/41.log +3170 -0
  26. data/spec/apps/rails/logs/42.log +23919 -0
  27. data/spec/apps/rails/logs/50.log +10976 -0
  28. data/spec/apps/sinatra/dummy_app.rb +12 -0
  29. data/spec/integration/rack/rack_spec.rb +17 -0
  30. data/spec/integration/rails/rails_spec.rb +135 -0
  31. data/spec/integration/rails/rake_spec.rb +160 -0
  32. data/spec/integration/shared_examples/rack_examples.rb +106 -0
  33. data/spec/integration/sinatra/sinatra_spec.rb +15 -0
  34. data/spec/spec_helper.rb +127 -0
  35. data/spec/unit/rack/middleware_spec.rb +80 -0
  36. data/spec/unit/rack/notice_builder_spec.rb +35 -0
  37. data/spec/unit/rack/user_spec.rb +78 -0
  38. data/spec/unit/rake/tasks_spec.rb +40 -0
  39. data/spec/unit/sidekiq/error_handler_spec.rb +29 -0
  40. metadata +108 -323
  41. data/CHANGELOG +0 -1716
  42. data/Gemfile +0 -3
  43. data/Guardfile +0 -6
  44. data/INSTALL +0 -20
  45. data/LICENSE +0 -61
  46. data/README.md +0 -148
  47. data/README_FOR_HEROKU_ADDON.md +0 -102
  48. data/Rakefile +0 -179
  49. data/TESTED_AGAINST +0 -7
  50. data/airbrake.gemspec +0 -41
  51. data/bin/airbrake +0 -12
  52. data/features/metal.feature +0 -34
  53. data/features/rack.feature +0 -60
  54. data/features/rails.feature +0 -324
  55. data/features/rake.feature +0 -33
  56. data/features/sinatra.feature +0 -126
  57. data/features/step_definitions/file_steps.rb +0 -14
  58. data/features/step_definitions/rack_steps.rb +0 -27
  59. data/features/step_definitions/rails_application_steps.rb +0 -267
  60. data/features/step_definitions/rake_steps.rb +0 -22
  61. data/features/support/airbrake_shim.rb.template +0 -11
  62. data/features/support/aruba.rb +0 -5
  63. data/features/support/env.rb +0 -39
  64. data/features/support/matchers.rb +0 -35
  65. data/features/support/rails.rb +0 -156
  66. data/features/support/rake/Rakefile +0 -77
  67. data/features/user_informer.feature +0 -57
  68. data/generators/airbrake/airbrake_generator.rb +0 -94
  69. data/generators/airbrake/lib/insert_commands.rb +0 -34
  70. data/generators/airbrake/lib/rake_commands.rb +0 -24
  71. data/generators/airbrake/templates/airbrake_tasks.rake +0 -25
  72. data/generators/airbrake/templates/capistrano_hook.rb +0 -6
  73. data/generators/airbrake/templates/initializer.rb +0 -4
  74. data/install.rb +0 -1
  75. data/lib/airbrake/backtrace.rb +0 -103
  76. data/lib/airbrake/capistrano.rb +0 -103
  77. data/lib/airbrake/capistrano3.rb +0 -3
  78. data/lib/airbrake/cli/client.rb +0 -76
  79. data/lib/airbrake/cli/options.rb +0 -45
  80. data/lib/airbrake/cli/printer.rb +0 -33
  81. data/lib/airbrake/cli/project.rb +0 -17
  82. data/lib/airbrake/cli/project_factory.rb +0 -33
  83. data/lib/airbrake/cli/runner.rb +0 -49
  84. data/lib/airbrake/cli/validator.rb +0 -8
  85. data/lib/airbrake/configuration.rb +0 -366
  86. data/lib/airbrake/jobs/send_job.rb +0 -7
  87. data/lib/airbrake/notice.rb +0 -411
  88. data/lib/airbrake/rack.rb +0 -64
  89. data/lib/airbrake/rails/action_controller_catcher.rb +0 -32
  90. data/lib/airbrake/rails/controller_methods.rb +0 -146
  91. data/lib/airbrake/rails/error_lookup.rb +0 -35
  92. data/lib/airbrake/rails/middleware.rb +0 -63
  93. data/lib/airbrake/rails.rb +0 -45
  94. data/lib/airbrake/rails3_tasks.rb +0 -126
  95. data/lib/airbrake/railtie.rb +0 -46
  96. data/lib/airbrake/rake_handler.rb +0 -75
  97. data/lib/airbrake/response.rb +0 -29
  98. data/lib/airbrake/sender.rb +0 -213
  99. data/lib/airbrake/shared_tasks.rb +0 -59
  100. data/lib/airbrake/sidekiq.rb +0 -8
  101. data/lib/airbrake/sinatra.rb +0 -40
  102. data/lib/airbrake/tasks/airbrake.cap +0 -28
  103. data/lib/airbrake/tasks.rb +0 -81
  104. data/lib/airbrake/user_informer.rb +0 -36
  105. data/lib/airbrake/utils/params_cleaner.rb +0 -141
  106. data/lib/airbrake/utils/rack_filters.rb +0 -45
  107. data/lib/airbrake_tasks.rb +0 -62
  108. data/lib/rails/generators/airbrake/airbrake_generator.rb +0 -155
  109. data/lib/templates/rescue.erb +0 -91
  110. data/rails/init.rb +0 -1
  111. data/resources/README.md +0 -34
  112. data/resources/airbrake_2_4.xsd +0 -89
  113. data/resources/airbrake_3_0.json +0 -52
  114. data/resources/ca-bundle.crt +0 -3376
  115. data/script/integration_test.rb +0 -35
  116. data/test/airbrake_tasks_test.rb +0 -161
  117. data/test/backtrace_test.rb +0 -215
  118. data/test/capistrano_test.rb +0 -44
  119. data/test/configuration_test.rb +0 -303
  120. data/test/controller_methods_test.rb +0 -230
  121. data/test/helper.rb +0 -233
  122. data/test/integration/catcher_test.rb +0 -371
  123. data/test/integration.rb +0 -13
  124. data/test/logger_test.rb +0 -79
  125. data/test/notice_test.rb +0 -494
  126. data/test/notifier_test.rb +0 -288
  127. data/test/params_cleaner_test.rb +0 -204
  128. data/test/rack_test.rb +0 -62
  129. data/test/rails_initializer_test.rb +0 -36
  130. data/test/recursion_test.rb +0 -10
  131. data/test/response_test.rb +0 -18
  132. data/test/sender_test.rb +0 -335
  133. data/test/support/response_shim.xml +0 -4
  134. data/test/user_informer_test.rb +0 -29
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Airbrake::Rack::User do
4
+ let(:faulty_app) do
5
+ proc { raise AirbrakeTestError }
6
+ end
7
+
8
+ let(:endpoint) do
9
+ 'https://airbrake.io/api/v3/projects/113743/notices?key=fd04e13d806a90f96614ad8e529b2822'
10
+ end
11
+
12
+ let(:user) do
13
+ OpenStruct.new(
14
+ id: 1,
15
+ email: 'qa@example.com',
16
+ username: 'qa-dept',
17
+ first_name: 'Bingo',
18
+ last_name: 'Bongo'
19
+ )
20
+ end
21
+
22
+ def env_for(url, opts = {})
23
+ Rack::MockRequest.env_for(url, opts)
24
+ end
25
+
26
+ before do
27
+ stub_request(:post, endpoint).to_return(status: 201, body: '{}')
28
+ end
29
+
30
+ describe ".extract" do
31
+ context "when the Warden authentication framework is present" do
32
+ it "returns the user" do
33
+ warden = instance_double('Warden::Proxy')
34
+ allow(warden).to receive(:user) { user }
35
+
36
+ retval = described_class.extract(env_for('/', 'warden' => warden))
37
+ expect(retval).to be_a(described_class)
38
+ end
39
+ end
40
+
41
+ context "when the Warden authentication framework is absent" do
42
+ it "returns nil" do
43
+ retval = described_class.extract(env_for('/'))
44
+ expect(retval).to be_nil
45
+ end
46
+ end
47
+ end
48
+
49
+ describe "#to_hash" do
50
+ context "when Rack user contains all expect fields" do
51
+ let(:rack_user) { described_class.new(user).to_hash[:user] }
52
+
53
+ it "contains the 'id' key" do
54
+ expect(rack_user.to_hash).to include(:id)
55
+ end
56
+
57
+ it "contains the 'name' key" do
58
+ expect(rack_user.to_hash).to include(:name)
59
+ end
60
+
61
+ it "contains the 'username' key" do
62
+ expect(rack_user.to_hash).to include(:username)
63
+ end
64
+
65
+ it "contains the 'email' key" do
66
+ expect(rack_user.to_hash).to include(:email)
67
+ end
68
+ end
69
+
70
+ context "when Rack user doesn't contain any of the expect fields" do
71
+ let(:rack_user) { described_class.new(OpenStruct.new) }
72
+
73
+ it "is empty" do
74
+ expect(rack_user.to_hash).to be_empty
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe "airbrake/rake/tasks" do
4
+ let(:endpoint) do
5
+ 'https://airbrake.io/api/v4/projects/113743/deploys?key=fd04e13d806a90f96614ad8e529b2822'
6
+ end
7
+
8
+ def wait_for_a_request_with_body(body)
9
+ wait_for(a_request(:post, endpoint).with(body: body)).to have_been_made.once
10
+ end
11
+
12
+ before do
13
+ stub_request(:post, endpoint).to_return(status: 201, body: '{}')
14
+ end
15
+
16
+ describe "airbrake:deploy" do
17
+ let(:task) { Rake::Task['airbrake:deploy'] }
18
+
19
+ after { task.reenable }
20
+
21
+ shared_examples 'deploy payload' do |key, val|
22
+ it "sends #{key}" do
23
+ ENV[key.upcase] = val
24
+ task.invoke
25
+
26
+ wait_for_a_request_with_body(/{.*"#{key}":"#{val}".*}/)
27
+ ENV[key.upcase] = nil
28
+ end
29
+ end
30
+
31
+ [%w(environment production),
32
+ %w(username john),
33
+ %w(revision 123abcdef),
34
+ %w(repository https://github.com/airbrake/airbrake'),
35
+ %w(version v2.0)
36
+ ].each do |(key, val)|
37
+ include_examples 'deploy payload', key, val
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0')
4
+ RSpec.describe "airbrake/sidekiq/error_handler" do
5
+ let(:endpoint) do
6
+ 'https://airbrake.io/api/v3/projects/113743/notices?key=fd04e13d806a90f96614ad8e529b2822'
7
+ end
8
+
9
+ def wait_for_a_request_with_body(body)
10
+ wait_for(a_request(:post, endpoint).with(body: body)).to have_been_made.once
11
+ end
12
+
13
+ before do
14
+ stub_request(:post, endpoint).to_return(status: 201, body: '{}')
15
+ end
16
+
17
+ it "sends a notice to Airbrake" do
18
+ handler = Sidekiq.error_handlers.last
19
+ handler.call(
20
+ AirbrakeTestError.new('sidekiq error'),
21
+ 'class' => 'HardSidekiqWorker', 'args' => %w(bango bongo)
22
+ )
23
+
24
+ wait_for_a_request_with_body(/"message":"sidekiq\serror"/)
25
+ wait_for_a_request_with_body(/"params":{.*"args":\["bango","bongo"\]/)
26
+ wait_for_a_request_with_body(/"component":"sidekiq","action":"HardSidekiqWorker"/)
27
+ end
28
+ end
29
+ end