airbrake 3.1.2 → 3.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +56 -0
- data/Gemfile +0 -9
- data/README.md +71 -3
- data/SUPPORTED_RAILS_VERSIONS +15 -0
- data/TESTING.md +8 -0
- data/airbrake.gemspec +10 -5
- data/features/rack.feature +4 -0
- data/features/rails.feature +66 -5
- data/features/step_definitions/rails_application_steps.rb +52 -7
- data/features/support/airbrake_shim.rb.template +5 -0
- data/generators/airbrake/lib/rake_commands.rb +1 -1
- data/generators/airbrake/templates/airbrake_tasks.rake +1 -1
- data/lib/airbrake.rb +14 -10
- data/lib/airbrake/backtrace.rb +8 -0
- data/lib/airbrake/capistrano.rb +0 -1
- data/lib/airbrake/configuration.rb +31 -4
- data/lib/airbrake/notice.rb +51 -9
- data/lib/airbrake/rack.rb +0 -1
- data/lib/airbrake/rails/controller_methods.rb +18 -7
- data/lib/airbrake/rails/javascript_notifier.rb +0 -1
- data/lib/airbrake/rails/middleware/exceptions_catcher.rb +10 -6
- data/lib/airbrake/rails3_tasks.rb +1 -2
- data/lib/airbrake/rake_handler.rb +3 -4
- data/lib/airbrake/sender.rb +35 -23
- data/lib/airbrake/shared_tasks.rb +2 -1
- data/lib/airbrake/version.rb +1 -1
- data/test/{airbrake_2_2.xsd → airbrake_2_3.xsd} +11 -1
- data/test/airbrake_tasks_test.rb +3 -3
- data/test/backtrace_test.rb +2 -2
- data/test/capistrano_test.rb +6 -6
- data/test/catcher_test.rb +2 -2
- data/test/configuration_test.rb +17 -2
- data/test/helper.rb +14 -14
- data/test/javascript_notifier_test.rb +1 -2
- data/test/logger_test.rb +8 -2
- data/test/notice_test.rb +98 -76
- data/test/notifier_test.rb +34 -4
- data/test/rack_test.rb +1 -1
- data/test/rails_initializer_test.rb +1 -1
- data/test/recursion_test.rb +1 -1
- data/test/sender_test.rb +22 -21
- data/test/user_informer_test.rb +1 -1
- metadata +176 -31
data/CHANGELOG
CHANGED
@@ -1,3 +1,58 @@
|
|
1
|
+
Version 3.1.3 - 2012-09-05 18:58:27 +0200
|
2
|
+
===============================================================================
|
3
|
+
|
4
|
+
Ben Arent (1):
|
5
|
+
Removed old mailing list.
|
6
|
+
|
7
|
+
Dylan Smith (1):
|
8
|
+
Use debug log level for verbose log messages.
|
9
|
+
|
10
|
+
Hrvoje Šimić (21):
|
11
|
+
add a note for testing against different frameworks
|
12
|
+
add a scenario to make sure 404s are ignored by default
|
13
|
+
failing scenario for #100
|
14
|
+
remove unnecessary bundler/setup requirement
|
15
|
+
move dependencies from Gemfile to gemspec
|
16
|
+
send info about the current logged in user
|
17
|
+
add async notifications
|
18
|
+
use async? instead of asnyc
|
19
|
+
add info about logger
|
20
|
+
prefer provided error message over original exception message
|
21
|
+
don't load entire environment for deploy task
|
22
|
+
safely handle render exception
|
23
|
+
remove unnecessary AirbrakeError
|
24
|
+
update XML schema
|
25
|
+
test fixes
|
26
|
+
clean whitespace
|
27
|
+
print the failed notice details
|
28
|
+
update supported rails versions
|
29
|
+
update scenarios
|
30
|
+
stop converting notice to xml before passing it to sender
|
31
|
+
remove logger from rack handler
|
32
|
+
update supported rails versions
|
33
|
+
|
34
|
+
John Pignata (1):
|
35
|
+
Cherry-pick Object#blank? extension
|
36
|
+
|
37
|
+
Joshua Wood (2):
|
38
|
+
rbenv support
|
39
|
+
Fixes outdated rake feature.
|
40
|
+
|
41
|
+
Matt Colyer (1):
|
42
|
+
Fix Airbrake so it actually reports data.
|
43
|
+
|
44
|
+
Morgan Mikel McDaris (1):
|
45
|
+
changed notify to notify_or_ignore
|
46
|
+
|
47
|
+
Sergii Boiko (2):
|
48
|
+
Refactor config.async to provide custom asynchronous delivery way
|
49
|
+
Simplify config.async to use only notice param
|
50
|
+
|
51
|
+
grosser (2):
|
52
|
+
fix exceeded available parameter key space breaks notification, fixes #99
|
53
|
+
make all tests runnable via ruby test_file.rb by loading the helper absolutely
|
54
|
+
|
55
|
+
|
1
56
|
Version 3.1.2 - 2012-06-23 02:27:01 +0200
|
2
57
|
===============================================================================
|
3
58
|
|
@@ -833,3 +888,4 @@ Nick Quaranto (3):
|
|
833
888
|
|
834
889
|
|
835
890
|
|
891
|
+
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -11,8 +11,6 @@ Help
|
|
11
11
|
|
12
12
|
For help with using Airbrake and this notifier visit [our support site](http://help.airbrake.io).
|
13
13
|
|
14
|
-
For discussion of Airbrake development check out the [mailing list](http://groups.google.com/group/hoptoad-notifier-dev).
|
15
|
-
|
16
14
|
For SSL verification see the [Resources](https://github.com/airbrake/airbrake/blob/master/resources/README.md).
|
17
15
|
|
18
16
|
Rails Installation
|
@@ -239,6 +237,65 @@ automatically in a controller, Airbrake sets that value. If you're, however, cal
|
|
239
237
|
`Airbrake#notify` or `Airbrake#notify_or_ignore`, please make sure you set that value. So the proper way of calling the
|
240
238
|
"manual" methods would be `env['airbrake.error_id'] = Airbrake.notify_or_ignore(...)`.
|
241
239
|
|
240
|
+
Current user information
|
241
|
+
------------------------
|
242
|
+
Airbrake provides information about the current logged in user, so you
|
243
|
+
could easily determine the user who experienced the error in your app.
|
244
|
+
|
245
|
+
It uses `current_user` and `current_member` to identify the
|
246
|
+
authenticated user, where `current_user` takes precendence.
|
247
|
+
|
248
|
+
If you use different naming, please add the following lines to your
|
249
|
+
controller:
|
250
|
+
|
251
|
+
alias_method :current_duck, :current_user
|
252
|
+
helper_method :current_duck
|
253
|
+
|
254
|
+
Voila! You'll get information about a duck that experienced crash about
|
255
|
+
your app.
|
256
|
+
|
257
|
+
Asynchronous notifications with Airbrake
|
258
|
+
----------------------------------------
|
259
|
+
When your user experiences error using your application, it gets sent to
|
260
|
+
Airbrake server. This introduces a considerable latency in the response.
|
261
|
+
|
262
|
+
Asynchronous notification sending deals with this problem. Airbrake uses
|
263
|
+
[girl_friday](https://github.com/mperham/girl_friday) to achieve this
|
264
|
+
. (thanks Mike)
|
265
|
+
|
266
|
+
It's disabled by default and you can enable it in your Airbrake
|
267
|
+
configuration.
|
268
|
+
|
269
|
+
Airbrake.configure do |config|
|
270
|
+
...
|
271
|
+
config.async = true
|
272
|
+
end
|
273
|
+
|
274
|
+
*Note that this feature is enabled with JRuby 1.6+, Rubinius 2.0+ and*
|
275
|
+
*Ruby 1.9+. It does not support Ruby 1.8 because of its poor threading*
|
276
|
+
*support.*
|
277
|
+
|
278
|
+
For implementing custom asynchronous notice delivery, send a block to `config.async`. It
|
279
|
+
receives `notice` param. Pass it to `Airbrake.sender.send_to_airbrake` method
|
280
|
+
to do actual delivery. In this way it's possible to move Airbrake notification
|
281
|
+
even in background worker(e.g. Resque or Sidekiq).
|
282
|
+
|
283
|
+
# Thread-based asynchronous send
|
284
|
+
Airbrake.configure do |config|
|
285
|
+
...
|
286
|
+
config.async do |notice|
|
287
|
+
Thread.new { Airbrake.sender.send_to_airbrake(notice) }
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
# Resque-like configuration
|
292
|
+
Airbrake.configure do |config|
|
293
|
+
...
|
294
|
+
config.async do |notice|
|
295
|
+
Resque.enqueue(AirbrakeDeliveryWorker, notice)
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
242
299
|
Tracking deployments in Airbrake
|
243
300
|
--------------------------------
|
244
301
|
|
@@ -272,7 +329,7 @@ controllers:
|
|
272
329
|
}
|
273
330
|
my_unpredicable_method(params)
|
274
331
|
rescue => e
|
275
|
-
Airbrake.
|
332
|
+
Airbrake.notify_or_ignore(
|
276
333
|
:error_class => "Special Error",
|
277
334
|
:error_message => "Special Error: #{e.message}",
|
278
335
|
:parameters => params
|
@@ -396,6 +453,17 @@ The notifier supports using a proxy, if your server is not able to directly reac
|
|
396
453
|
config.proxy_port = 4038
|
397
454
|
config.proxy_user = foo # optional
|
398
455
|
config.proxy_pass = bar # optional
|
456
|
+
|
457
|
+
Logging
|
458
|
+
------------
|
459
|
+
|
460
|
+
Airbrake uses the logger from your Rails application by default, presumably STDOUT. If you don't like Airbrake scribbling to your
|
461
|
+
standard output, just pass another `Logger` instance inside your configuration:
|
462
|
+
|
463
|
+
Airbrake.configure do |config|
|
464
|
+
...
|
465
|
+
config.logger = Logger.new("path/to/your/log/file")
|
466
|
+
end
|
399
467
|
|
400
468
|
Supported Rails versions
|
401
469
|
------------------------
|
data/SUPPORTED_RAILS_VERSIONS
CHANGED
@@ -12,12 +12,27 @@
|
|
12
12
|
3.0.10
|
13
13
|
3.0.11
|
14
14
|
3.0.12
|
15
|
+
3.0.13
|
16
|
+
3.0.14
|
17
|
+
3.0.15
|
18
|
+
3.0.16
|
19
|
+
3.0.17
|
15
20
|
3.1.0
|
16
21
|
3.1.1
|
17
22
|
3.1.2
|
18
23
|
3.1.3
|
19
24
|
3.1.4
|
25
|
+
3.1.5
|
26
|
+
3.1.6
|
27
|
+
3.1.7
|
28
|
+
3.1.8
|
29
|
+
3.1.4
|
20
30
|
3.2.0
|
21
31
|
3.2.1
|
22
32
|
3.2.2
|
23
33
|
3.2.3
|
34
|
+
3.2.4
|
35
|
+
3.2.5
|
36
|
+
3.2.6
|
37
|
+
3.2.7
|
38
|
+
3.2.8
|
data/TESTING.md
CHANGED
@@ -22,6 +22,14 @@ prefer to run it against specific version hit
|
|
22
22
|
|
23
23
|
rake cucumber:rails:<VERSION>
|
24
24
|
|
25
|
+
You can also specify to test only against the certain frameworks we
|
26
|
+
support (rack, rake and sinatra) by executing
|
27
|
+
|
28
|
+
rake cucumber:<FRAMEWORK>
|
29
|
+
|
30
|
+
This tasks are not printed out with `rake -T` since they're added
|
31
|
+
dynamically in the Rakefile.
|
32
|
+
|
25
33
|
|
26
34
|
For Maintainers
|
27
35
|
================
|
data/airbrake.gemspec
CHANGED
@@ -11,21 +11,26 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.files = Dir["{generators/**/*,lib/**/*,rails/**/*,resources/*,script/*}"] +
|
12
12
|
%w(airbrake.gemspec CHANGELOG Gemfile Guardfile INSTALL MIT-LICENSE Rakefile README_FOR_HEROKU_ADDON.md README.md TESTING.md SUPPORTED_RAILS_VERSIONS install.rb)
|
13
13
|
s.test_files = Dir.glob("{test,spec,features}/**/*")
|
14
|
-
|
14
|
+
|
15
15
|
s.add_runtime_dependency("builder")
|
16
16
|
s.add_runtime_dependency("activesupport")
|
17
|
+
s.add_runtime_dependency("girl_friday")
|
17
18
|
|
18
19
|
s.add_development_dependency("actionpack", "~> 2.3.8")
|
19
20
|
s.add_development_dependency("activerecord", "~> 2.3.8")
|
20
21
|
s.add_development_dependency("activesupport", "~> 2.3.8")
|
21
|
-
s.add_development_dependency("
|
22
|
-
s.add_development_dependency("
|
22
|
+
s.add_development_dependency("mocha", "0.10.5")
|
23
|
+
s.add_development_dependency("bourne", ">= 1.0")
|
24
|
+
s.add_development_dependency("cucumber", "~> 0.10.6")
|
23
25
|
s.add_development_dependency("fakeweb", "~> 1.3.0")
|
24
|
-
s.add_development_dependency("nokogiri",
|
26
|
+
s.add_development_dependency("nokogiri", "~> 1.4.3.1")
|
25
27
|
s.add_development_dependency("rspec", "~> 2.6.0")
|
26
28
|
s.add_development_dependency("sham_rack", "~> 1.3.0")
|
27
|
-
s.add_development_dependency("shoulda",
|
29
|
+
s.add_development_dependency("shoulda", "~> 2.11.3")
|
28
30
|
s.add_development_dependency("capistrano", "~> 2.8.0")
|
31
|
+
s.add_development_dependency("guard" )
|
32
|
+
s.add_development_dependency("guard-test" )
|
33
|
+
s.add_development_dependency("simplecov" )
|
29
34
|
|
30
35
|
s.authors = ["Airbrake"]
|
31
36
|
s.email = %q{support@airbrake.io}
|
data/features/rack.feature
CHANGED
@@ -6,11 +6,13 @@ Feature: Use the notifier in a plain Rack app
|
|
6
6
|
Scenario: Rescue and exception in a Rack app
|
7
7
|
Given the following Rack app:
|
8
8
|
"""
|
9
|
+
require 'logger'
|
9
10
|
require 'rack'
|
10
11
|
require 'airbrake'
|
11
12
|
|
12
13
|
Airbrake.configure do |config|
|
13
14
|
config.api_key = 'my_api_key'
|
15
|
+
config.logger = Logger.new STDOUT
|
14
16
|
end
|
15
17
|
|
16
18
|
app = Rack::Builder.app do
|
@@ -24,12 +26,14 @@ Feature: Use the notifier in a plain Rack app
|
|
24
26
|
Scenario: Ignore user agents
|
25
27
|
Given the following Rack app:
|
26
28
|
"""
|
29
|
+
require 'logger'
|
27
30
|
require 'rack'
|
28
31
|
require 'airbrake'
|
29
32
|
|
30
33
|
Airbrake.configure do |config|
|
31
34
|
config.api_key = 'my_api_key'
|
32
35
|
config.ignore_user_agent << /ignore/
|
36
|
+
config.logger = Logger.new STDOUT
|
33
37
|
end
|
34
38
|
|
35
39
|
class Mock
|
data/features/rails.feature
CHANGED
@@ -94,6 +94,7 @@ Feature: Install the Gem in a Rails application
|
|
94
94
|
And I route "/test/index" to "test#index"
|
95
95
|
And I perform a request to "http://example.com:123/test/index?param=value"
|
96
96
|
Then I should receive a Airbrake notification
|
97
|
+
Then I should see "test"
|
97
98
|
|
98
99
|
Scenario: The gem should not be considered a framework gem
|
99
100
|
When I configure the Airbrake shim
|
@@ -154,6 +155,8 @@ Feature: Install the Gem in a Rails application
|
|
154
155
|
And I route "/test/index" to "test#index"
|
155
156
|
And I perform a request to "http://example.com:123/test/index?param=value"
|
156
157
|
Then I should receive a Airbrake notification
|
158
|
+
Then I should not see "red23"
|
159
|
+
And I should see "FILTERED"
|
157
160
|
|
158
161
|
Scenario: Filtering session in a controller
|
159
162
|
When I configure the Airbrake shim
|
@@ -171,6 +174,8 @@ Feature: Install the Gem in a Rails application
|
|
171
174
|
And I route "/test/index" to "test#index"
|
172
175
|
And I perform a request to "http://example.com:123/test/index?param=value"
|
173
176
|
Then I should receive a Airbrake notification
|
177
|
+
Then I should not see "blue42"
|
178
|
+
And I should see "FILTERED"
|
174
179
|
|
175
180
|
Scenario: Filtering session and params based on Rails parameter filters
|
176
181
|
When I configure the Airbrake shim
|
@@ -185,6 +190,9 @@ Feature: Install the Gem in a Rails application
|
|
185
190
|
And I route "/test/index" to "test#index"
|
186
191
|
And I perform a request to "http://example.com:123/test/index?param=value"
|
187
192
|
Then I should receive a Airbrake notification
|
193
|
+
And I should not see "red23"
|
194
|
+
And I should not see "blue42"
|
195
|
+
And I should see "FILTERED"
|
188
196
|
|
189
197
|
Scenario: Notify airbrake within the controller
|
190
198
|
When I configure the Airbrake shim
|
@@ -198,14 +206,67 @@ Feature: Install the Gem in a Rails application
|
|
198
206
|
And I route "/test/index" to "test#index"
|
199
207
|
And I perform a request to "http://example.com:123/test/index?param=value"
|
200
208
|
Then I should receive a Airbrake notification
|
209
|
+
And I should see "test"
|
201
210
|
|
202
|
-
Scenario: Reporting 404s
|
211
|
+
Scenario: Reporting 404s should be disabled by default
|
203
212
|
When I configure the Airbrake shim
|
204
213
|
And I configure usage of Airbrake
|
205
|
-
And I
|
206
|
-
""
|
207
|
-
|
208
|
-
|
214
|
+
And I perform a request to "http://example.com:123/this/route/does/not/exist"
|
215
|
+
Then I should see "The page you were looking for doesn't exist."
|
216
|
+
And I should not receive a Airbrake notification
|
217
|
+
|
218
|
+
Scenario: Reporting 404s should work when configured properly
|
219
|
+
When I configure the Airbrake shim
|
220
|
+
And I configure usage of Airbrake
|
221
|
+
When I configure the notifier to use the following configuration lines:
|
222
|
+
"""
|
223
|
+
config.ignore_only = []
|
224
|
+
"""
|
209
225
|
And I perform a request to "http://example.com:123/this/route/does/not/exist"
|
210
226
|
Then I should see "The page you were looking for doesn't exist."
|
211
227
|
And I should receive a Airbrake notification
|
228
|
+
|
229
|
+
Scenario: reporting over SSL with utf8 check should work
|
230
|
+
Given PENDING I fix this one
|
231
|
+
When I configure the Airbrake shim
|
232
|
+
And I configure usage of Airbrake
|
233
|
+
When I configure the notifier to use the following configuration lines:
|
234
|
+
"""
|
235
|
+
config.secure = true
|
236
|
+
"""
|
237
|
+
And I define a response for "TestController#index":
|
238
|
+
"""
|
239
|
+
raise RuntimeError, "some message"
|
240
|
+
"""
|
241
|
+
And I route "/test/index" to "test#index"
|
242
|
+
And I perform a request to "http://example.com:123/test/index?utf8=✓"
|
243
|
+
Then I should receive a Airbrake notification
|
244
|
+
|
245
|
+
Scenario: It should also send the user details
|
246
|
+
When I configure the Airbrake shim
|
247
|
+
And I configure usage of Airbrake
|
248
|
+
And I define a response for "TestController#index":
|
249
|
+
"""
|
250
|
+
raise RuntimeError, "some message"
|
251
|
+
"""
|
252
|
+
And I route "/test/index" to "test#index"
|
253
|
+
And I have set up authentication system in my app that uses "current_user"
|
254
|
+
And I perform a request to "http://example.com:123/test/index"
|
255
|
+
Then I should receive a Airbrake notification
|
256
|
+
And the Airbrake notification should contain user details
|
257
|
+
When I have set up authentication system in my app that uses "current_member"
|
258
|
+
And I perform a request to "http://example.com:123/test/index"
|
259
|
+
Then I should receive a Airbrake notification
|
260
|
+
And the Airbrake notification should contain user details
|
261
|
+
|
262
|
+
Scenario: It should log the notice when failure happens
|
263
|
+
When Airbrake server is not responding
|
264
|
+
And I configure usage of Airbrake
|
265
|
+
And I define a response for "TestController#index":
|
266
|
+
"""
|
267
|
+
raise RuntimeError, "some message"
|
268
|
+
"""
|
269
|
+
And I route "/test/index" to "test#index"
|
270
|
+
And I perform a request to "http://example.com:123/test/index?param=value"
|
271
|
+
Then I should see "Notice details:"
|
272
|
+
And I should see "some message"
|
@@ -5,6 +5,24 @@ Given /^I have built and installed the "([^\"]*)" gem$/ do |gem_name|
|
|
5
5
|
@terminal.build_and_install_gem(File.join(PROJECT_ROOT, "#{gem_name}.gemspec"))
|
6
6
|
end
|
7
7
|
|
8
|
+
Given /^PENDING/ do
|
9
|
+
pending
|
10
|
+
end
|
11
|
+
|
12
|
+
Given /^Airbrake server is not responding$/ do
|
13
|
+
bundle_gem("sham_rack")
|
14
|
+
content = <<-CONTENT
|
15
|
+
require 'sham_rack'
|
16
|
+
|
17
|
+
Airbrake.configuration.logger = Logger.new STDOUT
|
18
|
+
|
19
|
+
ShamRack.at("api.airbrake.io") {["500", { "Content-type" => "text/xml" }, ["Internal server error"]]}
|
20
|
+
|
21
|
+
CONTENT
|
22
|
+
target = File.join(rails_root, 'config', 'initializers', 'airbrake_shim.rb')
|
23
|
+
File.open(target,"w") { |f| f.write content }
|
24
|
+
end
|
25
|
+
|
8
26
|
When /^I generate a new Rails application$/ do
|
9
27
|
@terminal.cd(TEMP_DIR)
|
10
28
|
|
@@ -23,14 +41,14 @@ When /^I generate a new Rails application$/ do
|
|
23
41
|
|
24
42
|
@terminal.run(%{ruby -rrubygems -rthread -e "#{load_rails.strip!}" #{rails_create_command} rails_root})
|
25
43
|
if rails_root_exists?
|
26
|
-
@terminal.echo("Generated a Rails #{version_string} application")
|
44
|
+
@terminal.echo("Generated a Rails #{version_string.strip} application")
|
27
45
|
else
|
28
46
|
raise "Unable to generate a Rails application:\n#{@terminal.output}"
|
29
47
|
end
|
30
48
|
require_thread
|
31
49
|
if version_string >= "3.1.0"
|
32
50
|
When %{I configure my application to require the "therubyracer" gem with version "0.10.1"}
|
33
|
-
elsif version_string
|
51
|
+
elsif version_string =~ /2.3.14/
|
34
52
|
monkeypatch_old_version
|
35
53
|
end
|
36
54
|
config_gem_dependencies unless rails3
|
@@ -80,10 +98,10 @@ When /^I run "([^\"]*)"$/ do |command|
|
|
80
98
|
@terminal.run(command)
|
81
99
|
end
|
82
100
|
|
83
|
-
Then /^I should receive a Airbrake notification$/ do
|
84
|
-
Then %{I should see "** [Airbrake] Response from Airbrake:"}
|
85
|
-
And %{I should see "b6817316-9c45-ed26-45eb-780dbb86aadb"}
|
86
|
-
And %{I should see "http://airbrake.io/locate/b6817316-9c45-ed26-45eb-780dbb86aadb"}
|
101
|
+
Then /^I should( not)? receive a Airbrake notification$/ do |or_should_not|
|
102
|
+
Then %{I should#{or_should_not} see "** [Airbrake] Response from Airbrake:"}
|
103
|
+
And %{I should#{or_should_not} see "b6817316-9c45-ed26-45eb-780dbb86aadb"}
|
104
|
+
And %{I should#{or_should_not} see "http://airbrake.io/locate/b6817316-9c45-ed26-45eb-780dbb86aadb"}
|
87
105
|
end
|
88
106
|
|
89
107
|
Then /^I should receive two Airbrake notifications$/ do
|
@@ -94,7 +112,6 @@ When /^I configure the Airbrake shim$/ do
|
|
94
112
|
if bundler_manages_gems?
|
95
113
|
bundle_gem("sham_rack")
|
96
114
|
end
|
97
|
-
|
98
115
|
shim_file = File.join(PROJECT_ROOT, 'features', 'support', 'airbrake_shim.rb.template')
|
99
116
|
if rails_supports_initializers?
|
100
117
|
target = File.join(rails_root, 'config', 'initializers', 'airbrake_shim.rb')
|
@@ -105,6 +122,8 @@ When /^I configure the Airbrake shim$/ do
|
|
105
122
|
file.write IO.read(shim_file)
|
106
123
|
end
|
107
124
|
end
|
125
|
+
target = File.join(rails_root, 'config', 'initializers', 'airbrake_shim.rb')
|
126
|
+
FileUtils.cp(shim_file, target)
|
108
127
|
end
|
109
128
|
|
110
129
|
When /^I configure the notifier to use "([^\"]*)" as an API key$/ do |api_key|
|
@@ -431,3 +450,29 @@ When /^I configure usage of Airbrake$/ do
|
|
431
450
|
When %{I run the airbrake generator with "-k myapikey"}
|
432
451
|
@terminal.flush! # flush the results of setting up Airbrake (generates notification)
|
433
452
|
end
|
453
|
+
|
454
|
+
|
455
|
+
When /^I have set up authentication system in my app that uses "([^\"]*)"$/ do |current_user|
|
456
|
+
application_controller = File.join(rails_root, 'app', 'controllers', "application_controller.rb")
|
457
|
+
definition =
|
458
|
+
"""
|
459
|
+
class ApplicationController < ActionController::Base
|
460
|
+
def consider_all_requests_local; false; end
|
461
|
+
def local_request?; false; end
|
462
|
+
|
463
|
+
# this is the ultimate authentication system, devise is history
|
464
|
+
def #{current_user}
|
465
|
+
Struct.new(:attributes).new({:id => 1,:name => 'Bender',:email => 'bender@beer.com',:username => 'b3nd0r'})
|
466
|
+
end
|
467
|
+
end
|
468
|
+
"""
|
469
|
+
File.open(application_controller, "w") {|file| file.puts definition }
|
470
|
+
end
|
471
|
+
|
472
|
+
Then /^the Airbrake notification should contain user details$/ do
|
473
|
+
Then %{I should see "Bender"}
|
474
|
+
And %{I should see "bender@beer.com"}
|
475
|
+
And %{I should see "<id>1</id>"}
|
476
|
+
And %{I should see "b3nd0r"}
|
477
|
+
end
|
478
|
+
|