airbrake 4.3.8 → 5.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/lib/airbrake.rb +16 -185
  3. data/lib/airbrake/capistrano/tasks.rb +64 -0
  4. data/lib/airbrake/delayed_job/plugin.rb +48 -0
  5. data/lib/airbrake/rack/middleware.rb +45 -0
  6. data/lib/airbrake/rack/notice_builder.rb +80 -0
  7. data/lib/airbrake/rack/user.rb +51 -0
  8. data/lib/airbrake/rails/action_controller.rb +35 -0
  9. data/lib/airbrake/rails/active_job.rb +23 -0
  10. data/lib/airbrake/rails/active_record.rb +40 -0
  11. data/lib/airbrake/rails/railtie.rb +61 -0
  12. data/lib/airbrake/rake/task_ext.rb +61 -0
  13. data/lib/airbrake/rake/tasks.rb +93 -0
  14. data/lib/airbrake/resque/failure.rb +19 -0
  15. data/lib/airbrake/sidekiq/error_handler.rb +35 -0
  16. data/lib/airbrake/version.rb +4 -1
  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 +110 -325
  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.rb +0 -45
  90. data/lib/airbrake/rails/action_controller_catcher.rb +0 -32
  91. data/lib/airbrake/rails/controller_methods.rb +0 -146
  92. data/lib/airbrake/rails/error_lookup.rb +0 -35
  93. data/lib/airbrake/rails/middleware.rb +0 -63
  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.rb +0 -81
  103. data/lib/airbrake/tasks/airbrake.cap +0 -28
  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.rb +0 -13
  123. data/test/integration/catcher_test.rb +0 -371
  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
@@ -1,33 +0,0 @@
1
- Feature: Use the Gem to catch errors in a Rake application
2
-
3
- Background:
4
- Given I've prepared the Rakefile
5
-
6
- Scenario: Ignoring exceptions
7
- When I run rake with airbrake ignored
8
- Then Airbrake should not catch the exception
9
-
10
- Scenario: Catching exceptions in Rake
11
- When I run rake with airbrake
12
- Then Airbrake should catch the exception
13
-
14
- Scenario: Falling back to default handler before Airbrake is configured
15
- When I run rake with airbrake not yet configured
16
- Then Airbrake should not catch the exception
17
-
18
- Scenario: Disabling Rake exception catcher
19
- When I run rake with airbrake disabled
20
- Then Airbrake should not catch the exception
21
-
22
- Scenario: Autodetect, running from terminal
23
- When I run rake with airbrake autodetect from terminal
24
- Then Airbrake should not catch the exception
25
-
26
- Scenario: Autodetect, not running from terminal
27
- When I run rake with airbrake autodetect not from terminal
28
- Then Airbrake should catch the exception
29
-
30
- # @wip
31
- # Scenario: Airbrake should also send the command name
32
- # When I run `rake airbrake_autodetect_not_from_terminal`
33
- # Then command "airbrake_autodetect_not_from_terminal" should be reported
@@ -1,126 +0,0 @@
1
- Feature: Use the notifier in a Sinatra app
2
-
3
- Scenario: Rescue an exception in a Sinatra app
4
- Given the following Rack app:
5
- """
6
- require 'sinatra/base'
7
- require 'airbrake'
8
- require 'logger'
9
-
10
- Airbrake.configure do |config|
11
- config.api_key = 'my_api_key'
12
- config.logger = Logger.new STDOUT
13
- config.development_environments = []
14
- end
15
-
16
- class FontaneApp < Sinatra::Base
17
- use Airbrake::Sinatra
18
-
19
- get "/test/index" do
20
- raise "Sinatra has left the building"
21
- end
22
- end
23
-
24
- app = FontaneApp
25
- """
26
- When I perform a Rack request to "http://example.com:123/test/index?param=value"
27
- Then I should receive a Airbrake notification
28
-
29
- Scenario: Catching environment name in modular Sinatra app
30
- Given the following Rack app:
31
- """
32
- require 'sinatra/base'
33
- require 'airbrake'
34
- require 'logger'
35
-
36
- Airbrake.configure do |config|
37
- config.api_key = 'my_api_key'
38
- config.logger = Logger.new STDOUT
39
- end
40
-
41
- class FontaneApp < Sinatra::Base
42
- use Airbrake::Sinatra
43
-
44
- set :environment, :production
45
-
46
- get "/test/index" do
47
- raise "Sinatra has left the building"
48
- end
49
- end
50
-
51
- app = FontaneApp
52
- """
53
- When I perform a Rack request to "http://example.com:123/test/index?param=value"
54
- Then I should receive a Airbrake notification
55
- And the output should contain "Env: production"
56
-
57
- Scenario: Warnings when environment name wasn't determined automatically
58
- Given the following Rack app:
59
- """
60
- require 'sinatra/base'
61
- require 'airbrake'
62
- require 'logger'
63
-
64
- Airbrake.configure do |config|
65
- config.api_key = 'my_api_key'
66
- config.logger = Logger.new STDOUT
67
- config.development_environments = []
68
- end
69
-
70
- class DummyMiddleware
71
- def initialize(app)
72
- @app = app
73
- end
74
-
75
- def call(env)
76
- @app.call(env)
77
- end
78
- end
79
-
80
- class FontaneApp < Sinatra::Base
81
-
82
- use Airbrake::Sinatra
83
-
84
- use DummyMiddleware
85
-
86
- set :environment, :production
87
-
88
- get "/test/index" do
89
- raise "Sinatra has left the building"
90
- end
91
- end
92
-
93
- app = FontaneApp
94
- """
95
- When I perform a Rack request to "http://example.com:123/test/index?param=value"
96
- Then I should receive a Airbrake notification
97
- And the output should contain "Please set your environment name manually"
98
-
99
- Scenario: Give precendence to environment name that was first set
100
- Given the following Rack app:
101
- """
102
- require 'sinatra/base'
103
- require 'airbrake'
104
- require 'logger'
105
-
106
- Airbrake.configure do |config|
107
- config.api_key = 'my_api_key'
108
- config.logger = Logger.new STDOUT
109
- config.environment_name = "staging"
110
- end
111
-
112
- class FontaneApp < Sinatra::Base
113
- use Airbrake::Sinatra
114
-
115
- set :environment, :production
116
-
117
- get "/test/index" do
118
- raise "Sinatra has left the building"
119
- end
120
- end
121
-
122
- app = FontaneApp
123
- """
124
- When I perform a Rack request to "http://example.com:123/test/index?param=value"
125
- Then I should receive a Airbrake notification
126
- And the output should contain "Env: staging"
@@ -1,14 +0,0 @@
1
- Then /^"([^\"]*)" should not contain text of "([^\"]*)"$/ do |target_file, contents_file|
2
- notifier_root = File.join(File.dirname(__FILE__), '..', '..')
3
- full_path_contents = File.join(notifier_root, contents_file)
4
- contents_text = File.open(full_path_contents).read
5
-
6
- full_path_target = File.join(rails_root, target_file)
7
- target_text = File.open(full_path_target).read
8
-
9
- target_text.should_not include(contents_text)
10
- end
11
-
12
- Then /^I append "([^\"]*)" to Gemfile$/ do |contents|
13
- append_to_gemfile(contents)
14
- end
@@ -1,27 +0,0 @@
1
- Given /^the following Rack app:$/ do |definition|
2
- File.open(RACK_FILE, 'w') { |file| file.write(definition) }
3
- end
4
-
5
- When /^I add "([^\"]*)" requirement(?: with "([^\"]*)" option)?$/ do |gem,option|
6
- append_to_gemfile("gem '#{gem}'#{option ? ", #{option}":""}")
7
- end
8
-
9
- When /^I initialize Gemfile$/ do
10
- step %{I run `bundle init`}
11
- end
12
-
13
- When /^I perform a Rack request to "([^\"]*)"$/ do |url|
14
- shim_file = File.join(PROJECT_ROOT, 'features', 'support', 'airbrake_shim.rb.template')
15
- request_file = File.join(TEMP_DIR, 'rack_request.rb')
16
- File.open(request_file, 'w') do |file|
17
- file.puts "require 'rubygems'"
18
- file.puts IO.read(shim_file)
19
- file.puts IO.read(RACK_FILE)
20
- file.puts "env = Rack::MockRequest.env_for(#{url.inspect})"
21
- file.puts "status, headers, body = app.call(env)"
22
- file.puts %{puts "HTTP \#{status}"}
23
- file.puts %{headers.each { |key, value| puts "\#{key}: \#{value}"}}
24
- file.puts "body.each { |part| print part }"
25
- end
26
- step %{I run `bundle exec ruby #{request_file}`}
27
- end
@@ -1,267 +0,0 @@
1
- require 'uri'
2
-
3
- require 'active_support/core_ext/string/inflections'
4
-
5
- Given /^Airbrake server is not responding$/ do
6
- content = <<-CONTENT
7
- require 'sham_rack'
8
-
9
- ShamRack.at("api.airbrake.io") {["500", { "Content-type" => "text/xml" }, ["Internal server error"]]}
10
-
11
- CONTENT
12
- target = File.join(rails_root, 'config', 'initializers', 'airbrake_shim.rb')
13
- File.open(target,"w") { |f| f.write content }
14
- end
15
-
16
- Then /^I should (?:(not ))?receive a Airbrake notification$/ do |negator|
17
- steps %{
18
- Then the output should #{negator}contain "** [Airbrake] Response from Airbrake:"
19
- And the output should #{negator}contain "b6817316-9c45-ed26-45eb-780dbb86aadb"
20
- And the output should #{negator}contain "http://airbrake.io/locate/b6817316-9c45-ed26-45eb-780dbb86aadb"
21
- }
22
- end
23
-
24
- Then /^I should receive two Airbrake notifications$/ do
25
- step %{the output should match /\[Airbrake\] Response from Airbrake:/}
26
- end
27
-
28
- When /^I configure the Airbrake shim$/ do
29
- shim_file = File.join(PROJECT_ROOT, 'features', 'support', 'airbrake_shim.rb.template')
30
- target = File.join(rails_root, 'config', 'initializers', 'airbrake_shim.rb')
31
- FileUtils.cp(shim_file, target)
32
- end
33
-
34
- When /^I configure the notifier to use "([^\"]*)" as an API key$/ do |api_key|
35
- steps %{
36
- When I configure the notifier to use the following configuration lines:
37
- """
38
- config.api_key = #{api_key.inspect}
39
- """
40
- }
41
- end
42
-
43
- When /^I configure the notifier to use the following configuration lines:$/ do |configuration_lines|
44
- initializer_code = <<-EOF
45
- Airbrake.configure do |config|
46
- config.test_mode = true
47
- #{configuration_lines}
48
- end
49
- EOF
50
-
51
- File.open(rails_initializer_file, 'w') { |file| file.write(initializer_code) }
52
- end
53
-
54
- def rails_initializer_file
55
- File.join(rails_root, 'config', 'initializers', 'airbrake.rb')
56
- end
57
-
58
- def rails_non_initializer_airbrake_config_file
59
- File.join(rails_root, 'config', 'airbrake.rb')
60
- end
61
-
62
- Then /^I should (?:(not ))?see "([^\"]*)"$/ do |negator,expected_text|
63
- step %{the output should #{negator}contain "#{expected_text}"}
64
- end
65
-
66
- When /^I install the "([^\"]*)" plugin$/ do |plugin_name|
67
- FileUtils.mkdir_p("#{rails_root}/vendor/plugins/#{plugin_name}")
68
- end
69
-
70
- When /^I define a response for "([^\"]*)":$/ do |controller_and_action, definition|
71
- controller_class_name, action = controller_and_action.split('#')
72
- controller_name = controller_class_name.underscore
73
- controller_file_name = File.join(rails_root, 'app', 'controllers', "#{controller_name}.rb")
74
- File.open(controller_file_name, "w") do |file|
75
- file.puts "class #{controller_class_name} < ApplicationController"
76
- file.puts "def consider_all_requests_local; false; end"
77
- file.puts "def local_request?; false; end"
78
- file.puts "def #{action}"
79
- file.puts definition
80
- file.puts "end"
81
- file.puts "end"
82
- end
83
- end
84
-
85
- When /^I perform a request to "([^\"]*)"$/ do |uri|
86
- perform_request(uri)
87
- step %{I run `bundle exec rails runner request.rb`}
88
- end
89
-
90
- When /^I perform a request to "([^\"]*)" in the "([^\"]*)" environment$/ do |uri, environment|
91
- perform_request(uri,environment)
92
- step %{I run `bundle exec rails runner -e #{environment} request.rb`}
93
- end
94
-
95
- Given /^the response page for a "([^\"]*)" error is$/ do |error, html|
96
- File.open(File.join(rails_root, "public", "#{error}.html"), "w") do |file|
97
- file.write(html)
98
- end
99
- end
100
-
101
- Then /^I should see the Rails version$/ do
102
- step %{I should see "Rails: #{ENV["RAILS_VERSION"]}"}
103
- end
104
-
105
- Then /^I should see that "([^\"]*)" is not considered a framework gem$/ do |gem_name|
106
- step %{I should not see "[R] #{gem_name}"}
107
- end
108
-
109
- When /^I route "([^\"]*)" to "([^\"]*)"$/ do |path, controller_action_pair|
110
- route = %(get "#{path}", :to => "#{controller_action_pair}")
111
- routes_file = File.join(rails_root, "config", "routes.rb")
112
- File.open(routes_file, "r+") do |file|
113
- content = file.read
114
- content.gsub!(/^end$/, " #{route}\nend")
115
- file.rewind
116
- file.write(content)
117
- end
118
- end
119
-
120
- Then /^"([^\"]*)" should not contain "([^\"]*)"$/ do |file_path, text|
121
- actual_text = IO.read(File.join(rails_root, file_path))
122
- if actual_text.include?(text)
123
- raise "Didn't expect text:\n#{actual_text}\nTo include:\n#{text}"
124
- end
125
- end
126
-
127
- Then /^my Airbrake configuration should contain the following line:$/ do |line|
128
- configuration_file = rails_initializer_file
129
-
130
- configuration = File.read(configuration_file)
131
- if ! configuration.include?(line.strip)
132
- raise "Expected text:\n#{configuration}\nTo include:\n#{line}\nBut it didn't."
133
- end
134
- end
135
-
136
- When /^I configure the Heroku shim with "([^\"]*)"( and multiple app support)?$/ do |api_key, multi_app|
137
- heroku_script_bin = File.join(TEMP_DIR, "bin")
138
- FileUtils.mkdir_p(heroku_script_bin)
139
- heroku_script = File.join(heroku_script_bin, "heroku")
140
- heroku_env_vars = <<-VARS
141
- AIRBRAKE_API_KEY => myapikey
142
- APP_NAME => cold-moon-2929
143
- BUNDLE_WITHOUT => development:test
144
- COMMIT_HASH => lj32j42ss9332jfa2
145
- DATABASE_URL => postgres://fchovwjcyb:QLPVWmBBbf4hCG_YMrtV@ec3-107-28-193-23.compute-1.amazonaws.com/fhcvojwwcyb
146
- LANG => en_US.UTF-8
147
- LAST_GIT_BY => kensa
148
- RACK_ENV => production
149
- SHARED_DATABASE_URL => postgres://fchovwjcyb:QLPVwMbbbF8Hcg_yMrtV@ec2-94-29-181-224.compute-1.amazonaws.com/fhcvojcwwyb
150
- STACK => bamboo-mri-1.9.2
151
- URL => cold-moon-2929.heroku.com
152
- VARS
153
- single_app_script = <<-SINGLE
154
- #!/bin/bash
155
- if [ $1 == 'config' ]
156
- then
157
- echo "#{heroku_env_vars}"
158
- fi
159
- SINGLE
160
-
161
- multi_app_script = <<-MULTI
162
- #!/bin/bash
163
- if [[ $1 == 'config' && $2 == '--app' ]]
164
- then
165
- echo "#{heroku_env_vars}"
166
- fi
167
- MULTI
168
-
169
- File.open(heroku_script, "w") do |f|
170
- if multi_app
171
- f.puts multi_app_script
172
- else
173
- f.puts single_app_script
174
- end
175
- end
176
- FileUtils.chmod(0755, heroku_script)
177
- prepend_path(heroku_script_bin)
178
- end
179
-
180
- When /^I configure the application to filter parameter "([^\"]*)"$/ do |parameter|
181
- application_filename = File.join(rails_root, 'config', 'application.rb')
182
- application_lines = File.open(application_filename).readlines
183
-
184
- application_definition_line = application_lines.detect { |line| line =~ /Application/ }
185
- application_definition_line_index = application_lines.index(application_definition_line)
186
-
187
- parameter = (parameter == "block" ? "lambda { |x,y| x }" : parameter.inspect)
188
- application_lines.insert(application_definition_line_index + 1, " config.filter_parameters += [#{parameter}]")
189
-
190
- File.open(application_filename, "w") do |file|
191
- file.puts application_lines.join("\n")
192
- end
193
- end
194
-
195
- When /^I have set up authentication system in my app that uses "([^\"]*)"$/ do |current_user|
196
- application_controller = File.join(rails_root, 'app', 'controllers', "application_controller.rb")
197
- definition =
198
- """
199
- class ApplicationController < ActionController::Base
200
- def consider_all_requests_local; false; end
201
- def local_request?; false; end
202
-
203
- # this is the ultimate authentication system, devise is history
204
- def #{current_user}
205
- Struct.new(:id, :name, :email, :username, :class_name).new(1, 'Bender', 'bender@beer.com', 'b3nd0r', 'User')
206
- end
207
- end
208
- """
209
- File.open(application_controller, "w") {|file| file.puts definition }
210
- end
211
-
212
- Then /^the Airbrake notification should contain "([^\"]*)"$/ do |content|
213
- step %{the last notice sent should contain "#{content}"}
214
- end
215
-
216
- Then /^the Airbrake notification should not contain "([^\"]*)"$/ do |content|
217
- step %{the last notice sent should not contain "#{content}"}
218
- end
219
-
220
- Then /^the Airbrake notification should contain the custom user details$/ do
221
- step %{the last notice sent should contain "<name>Bender</name>"}
222
- step %{the last notice sent should contain "<email>bender@beer.com</email>"}
223
- step %{the last notice sent should contain "<username>b3nd0r</username>"}
224
- end
225
-
226
- Then /^the Airbrake notification should contain user details$/ do
227
- step %{the last notice sent should contain "<id>1</id>"}
228
- end
229
-
230
- Then /^the Airbrake notification should not contain any of the sensitive Rack variables$/ do
231
- sensitive_rack_data_regex = FILTERED_RACK_VARS.map do |var|
232
- var.instance_of?(Regexp) ? var : Regexp.quote(var)
233
- end.join("|")
234
- step %{the last notice sent should not contain keys with "#{sensitive_rack_data_regex}"}
235
- end
236
-
237
- Then /^the last notice sent should contain "([^\"]*)"$/ do |data|
238
- last_notice = File.read(LAST_NOTICE)
239
- last_notice.should match(%r{#{data}})
240
- end
241
-
242
- Then /^the last notice sent should not contain "([^\"]*)"$/ do |data|
243
- last_notice = File.read(LAST_NOTICE)
244
- last_notice.should_not match(%r{#{data}})
245
- end
246
-
247
- Then /^the last notice sent should not contain keys with "([^\"]*)"$/ do |data|
248
- last_notice = File.read(LAST_NOTICE)
249
- last_notice.should_not match(%r{key\=\"(#{data})\"})
250
- end
251
-
252
- Then /^the Airbrake notification should contain the framework information$/ do
253
- step %{the last notice sent should contain "Rails: #{ENV["RAILS_VERSION"]}"}
254
- end
255
-
256
- When /^I list the application's middleware and save it into a file$/ do
257
- step %{I run `bash -c 'bundle exec rake middleware > middleware.dump'`}
258
- end
259
-
260
- Then /^the Airbrake middleware should be placed correctly$/ do
261
- middleware_file = File.join(LOCAL_RAILS_ROOT, 'middleware.dump')
262
- middleware = File.read(middleware_file).split(/\n/)
263
- airbrake_index = middleware.rindex("use Airbrake::Rails::Middleware")
264
- middleware_index = middleware.rindex("use ActionDispatch::DebugExceptions") ||
265
- middleware.rindex("use ActionDispatch::ShowExceptions")
266
- (airbrake_index > middleware_index).should be_true
267
- end