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
@@ -1,324 +0,0 @@
1
- Feature: Install the Gem in a Rails application
2
-
3
- Background:
4
- Given I successfully run `rails new rails_root -O --skip-gemfile`
5
- And I cd to "rails_root"
6
-
7
- Scenario: Use the gem without vendoring the gem in a Rails application
8
- When I configure the Airbrake shim
9
- And I run `rails generate airbrake -k myapikey -t`
10
- Then I should receive a Airbrake notification
11
- And I should see the Rails version
12
-
13
- Scenario: Configure the notifier by hand
14
- When I configure the Airbrake shim
15
- And I configure the notifier to use "myapikey" as an API key
16
- And I run `rails generate airbrake`
17
- Then I should receive a Airbrake notification
18
-
19
- Scenario: Configuration within initializer isn't overridden by Railtie
20
- When I configure the Airbrake shim
21
- And I run `rails generate airbrake -k myapikey -t`
22
- And I configure the notifier to use the following configuration lines:
23
- """
24
- config.api_key = "myapikey"
25
- config.project_root = "argle/bargle"
26
- """
27
- And I define a response for "TestController#index":
28
- """
29
- raise RuntimeError, "some message"
30
- """
31
- And I route "/test/index" to "test#index"
32
- And I perform a request to "http://example.com:123/test/index?param=value"
33
- Then I should receive a Airbrake notification
34
-
35
- Scenario: Try to install without an api key
36
- When I run `rails generate airbrake`
37
- Then I should see "Must pass --api-key or --heroku or create config/initializers/airbrake.rb"
38
-
39
- Scenario: Generator should support the --secure option
40
- When I run `rails generate airbrake -k myapikey --secure`
41
- Then my Airbrake configuration should contain the following line:
42
- """
43
- config.secure = true
44
- """
45
-
46
- Scenario: Configure and deploy using only installed gem
47
- When I run `capify .`
48
- And I configure the Airbrake shim
49
- And I run `rails generate airbrake -k myapikey -t`
50
- And I run `cap -T`
51
- Then I should see "airbrake:deploy"
52
-
53
- Scenario: Try to install when the airbrake plugin still exists
54
- When I install the "airbrake" plugin
55
- And I configure the Airbrake shim
56
- And I configure the notifier to use "myapikey" as an API key
57
- And I run `rails generate airbrake`
58
- Then I should see "You must first remove the airbrake plugin. Please run: script/plugin remove airbrake"
59
-
60
- Scenario: Rescue an exception in a controller
61
- When I configure the Airbrake shim
62
- And I run `rails generate airbrake -k myapikey -t`
63
- And I define a response for "TestController#index":
64
- """
65
- raise RuntimeError, "some message"
66
- """
67
- And I route "/test/index" to "test#index"
68
- And I perform a request to "http://example.com:123/test/index?param=value"
69
- Then I should receive a Airbrake notification
70
-
71
- Scenario: The gem should not be considered a framework gem
72
- When I configure the Airbrake shim
73
- And I run `rails generate airbrake -k myapikey -t`
74
- And I run `rake gems`
75
- Then I should see that "airbrake" is not considered a framework gem
76
-
77
- Scenario: The app uses Vlad instead of Capistrano
78
- When I configure the Airbrake shim
79
- And I run `touch config/deploy.rb`
80
- And I run `rm Capfile`
81
- And I run `rails generate airbrake -k myapikey`
82
- Then "config/deploy.rb" should not contain "capistrano"
83
-
84
- # @wip
85
- # Scenario: Support the Heroku addon in the generator
86
- # When I configure the Airbrake shim
87
- # And I run `rails generate airbrake -k myapikey -t`
88
- # And I configure the Heroku shim with "myapikey"
89
- # And I run `rails generate airbrake --heroku`
90
- # Then I should receive a Airbrake notification
91
- # And I should see the Rails version
92
- # And my Airbrake configuration should contain the following line:
93
- # """
94
- # config.api_key = 'myapikey'
95
- # """
96
-
97
- # @wip
98
- # Scenario: Support the --app option for the Heroku addon in the generator
99
- # When I configure the Airbrake shim
100
- # And I configure the Heroku shim with "myapikey" and multiple app support
101
- # And I run `rails generate airbrake --heroku -a myapp -t`
102
- # Then I should receive a Airbrake notification
103
- # And I should see the Rails version
104
- # And my Airbrake configuration should contain the following line:
105
- # """
106
- # config.api_key = 'myapikey'
107
- # """
108
-
109
- Scenario: Filtering parameters in a controller
110
- When I configure the Airbrake shim
111
- And I run `rails generate airbrake -k myapikey -t`
112
- When I configure the notifier to use the following configuration lines:
113
- """
114
- config.api_key = "myapikey"
115
- config.params_filters << "credit_card_number"
116
- config.params_filters << "secret"
117
- config.logger = Logger.new STDOUT
118
- """
119
- And I define a response for "TestController#index":
120
- """
121
- session["secret"] = "blue42"
122
- params[:credit_card_number] = "red23"
123
- raise RuntimeError, "some message"
124
- """
125
- And I route "/test/index" to "test#index"
126
- And I perform a request to "http://example.com:123/test/index?param=value" in the "production" environment
127
- Then I should receive a Airbrake notification
128
- And the Airbrake notification should not contain "red23"
129
- And the Airbrake notification should not contain "blue42"
130
- And the Airbrake notification should contain "FILTERED"
131
-
132
- Scenario: Filtering session and params based on Rails parameter filters
133
- When I configure the Airbrake shim
134
- And I run `rails generate airbrake -k myapikey -t`
135
- When I configure the notifier to use the following configuration lines:
136
- """
137
- config.api_key = "myapikey"
138
- config.logger = Logger.new STDOUT
139
- """
140
- And I configure the application to filter parameter "secret"
141
- And I define a response for "TestController#index":
142
- """
143
- params["secret"] = "red23"
144
- session["secret"] = "blue42"
145
- raise RuntimeError, "some message"
146
- """
147
- And I route "/test/index" to "test#index"
148
- And I perform a request to "http://example.com:123/test/index" in the "production" environment
149
- Then I should receive a Airbrake notification
150
- And the Airbrake notification should not contain "red23"
151
- And the Airbrake notification should not contain "blue42"
152
- And the Airbrake notification should contain "FILTERED"
153
-
154
- Scenario: Filtering sensitive Rack variables
155
- When I configure the Airbrake shim
156
- And I run `rails generate airbrake -k myapikey -t`
157
- When I configure the notifier to use the following configuration lines:
158
- """
159
- config.logger = Logger.new STDOUT
160
- """
161
- And I define a response for "TestController#index":
162
- """
163
- raise RuntimeError
164
- """
165
- Then I should receive a Airbrake notification
166
- And the Airbrake notification should not contain any of the sensitive Rack variables
167
-
168
- Scenario: Filtering vs symbols
169
- When I configure the Airbrake shim
170
- And I run `rails generate airbrake -k myapikey -t`
171
- When I configure the notifier to use the following configuration lines:
172
- """
173
- config.api_key = "myapikey"
174
- config.logger = Logger.new STDOUT
175
- """
176
- And I configure the application to filter parameter "block"
177
- And I define a response for "TestController#index":
178
- """
179
- request.env["foo"] = {:foo => "bar"}
180
- raise RuntimeError, "some message"
181
- """
182
- And I route "/test/index" to "test#index"
183
- And I perform a request to "http://example.com:123/test/index" in the "production" environment
184
- Then I should receive a Airbrake notification
185
- And the Airbrake notification should contain "some message"
186
-
187
- Scenario: Notify airbrake within the controller
188
- When I configure the Airbrake shim
189
- And I run `rails generate airbrake -k myapikey -t`
190
- And I define a response for "TestController#index":
191
- """
192
- session[:value] = "unicorn"
193
- notify_airbrake(RuntimeError.new("some message"))
194
- render :nothing => true
195
- """
196
- And I route "/test/index" to "test#index"
197
- And I perform a request to "http://example.com:123/test/index?param=value" in the "production" environment
198
- Then I should receive a Airbrake notification
199
- And the Airbrake notification should contain "unicorn"
200
-
201
- Scenario: Reporting 404s should be disabled by default
202
- When I configure the Airbrake shim
203
- And I configure the notifier to use the following configuration lines:
204
- """
205
- config.api_key = "myapikey"
206
- """
207
- And I perform a request to "http://example.com:123/this/route/does/not/exist" in the "production" environment
208
- Then I should see "The page you were looking for doesn't exist."
209
- And I should not receive a Airbrake notification
210
-
211
- Scenario: Reporting 404s should work when configured properly
212
- When I configure the Airbrake shim
213
- And I run `rails generate airbrake -k myapikey -t`
214
- When I configure the notifier to use the following configuration lines:
215
- """
216
- config.ignore_only = []
217
- """
218
- And I perform a request to "http://example.com:123/this/route/does/not/exist" in the "production" environment
219
- Then I should see "The page you were looking for doesn't exist"
220
- And I should receive a Airbrake notification
221
-
222
- @wip
223
- Scenario: reporting over SSL with utf8 check should work
224
- When I configure the Airbrake shim
225
- And I run `rails generate airbrake -k myapikey -t`
226
- When I configure the notifier to use the following configuration lines:
227
- """
228
- config.secure = true
229
- """
230
- And I define a response for "TestController#index":
231
- """
232
- raise RuntimeError, "some message"
233
- """
234
- And I route "/test/index" to "test#index"
235
- And I perform a request to "http://example.com:123/test/index?utf8=✓"
236
- Then I should receive a Airbrake notification
237
-
238
- Scenario: It should also send the user details
239
- When I configure the Airbrake shim
240
- And I configure the notifier to use the following configuration lines:
241
- """
242
- config.api_key = "myapikey"
243
- config.logger = Logger.new STDOUT
244
- """
245
- And I define a response for "TestController#index":
246
- """
247
- raise RuntimeError, "some message"
248
- """
249
- And I route "/test/index" to "test#index"
250
- And I have set up authentication system in my app that uses "current_user"
251
- And I perform a request to "http://example.com:123/test/index" in the "production" environment
252
- Then I should receive a Airbrake notification
253
- And the Airbrake notification should contain user details
254
- When I have set up authentication system in my app that uses "current_member"
255
- And I perform a request to "http://example.com:123/test/index" in the "production" environment
256
- Then I should receive a Airbrake notification
257
- And the Airbrake notification should contain user details
258
-
259
- Scenario: It should also send custom user attributes
260
- When I configure the Airbrake shim
261
- And I configure the notifier to use the following configuration lines:
262
- """
263
- config.api_key = "myapikey"
264
- config.logger = Logger.new STDOUT
265
- config.user_attributes = [:id, :name, :email, :username]
266
- """
267
- And I define a response for "TestController#index":
268
- """
269
- raise RuntimeError, "some message"
270
- """
271
- And I route "/test/index" to "test#index"
272
- And I have set up authentication system in my app that uses "current_user"
273
- And I perform a request to "http://example.com:123/test/index" in the "production" environment
274
- Then I should receive a Airbrake notification
275
- And the Airbrake notification should contain the custom user details
276
-
277
- Scenario: It should warn the user that she's using unsupported attributes for
278
- current user
279
- When I configure the Airbrake shim
280
- And I configure the notifier to use the following configuration lines:
281
- """
282
- config.api_key = "myapikey"
283
- config.logger = Logger.new STDOUT
284
- config.user_attributes = [:id, :name, :email, :username, :shoe_size]
285
- """
286
- And I run `rails runner config/boot.rb`
287
- Then I should see "Unsupported user attribute: 'shoe_size'"
288
- And I should not see "Unsupported user attribute: 'id'"
289
-
290
- Scenario: It should log the notice when failure happens
291
- When Airbrake server is not responding
292
- And I configure the notifier to use the following configuration lines:
293
- """
294
- config.api_key = "myapikey"
295
- config.logger = Logger.new STDOUT
296
- """
297
- And I define a response for "TestController#index":
298
- """
299
- raise RuntimeError, "some message"
300
- """
301
- And I route "/test/index" to "test#index"
302
- And I perform a request to "http://example.com:123/test/index?param=value" in the "production" environment
303
- Then I should see "Notice details:"
304
- And I should see "some message"
305
-
306
- Scenario: It should send the framework info
307
- When I configure the Airbrake shim
308
- And I configure the notifier to use the following configuration lines:
309
- """
310
- config.api_key = "myapikey"
311
- config.logger = Logger.new STDOUT
312
- """
313
- And I define a response for "TestController#index":
314
- """
315
- raise RuntimeError, "some message"
316
- """
317
- And I route "/test/index" to "test#index"
318
- And I perform a request to "http://example.com:123/test/index" in the "production" environment
319
- Then I should receive a Airbrake notification
320
- And the Airbrake notification should contain the framework information
321
-
322
- Scenario: Middleware should be correctly placed
323
- When I list the application's middleware and save it into a file
324
- Then the Airbrake middleware should be placed correctly
@@ -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