airbrake 3.1.6 → 11.0.0

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 +7 -0
  2. data/lib/airbrake.rb +23 -150
  3. data/lib/airbrake/capistrano.rb +6 -42
  4. data/lib/airbrake/capistrano/capistrano2.rb +40 -0
  5. data/lib/airbrake/capistrano/capistrano3.rb +23 -0
  6. data/lib/airbrake/delayed_job.rb +66 -0
  7. data/lib/airbrake/logger.rb +103 -0
  8. data/lib/airbrake/rack.rb +30 -45
  9. data/lib/airbrake/rack/context_filter.rb +65 -0
  10. data/lib/airbrake/rack/http_headers_filter.rb +44 -0
  11. data/lib/airbrake/rack/http_params_filter.rb +27 -0
  12. data/lib/airbrake/rack/instrumentable.rb +136 -0
  13. data/lib/airbrake/rack/middleware.rb +102 -0
  14. data/lib/airbrake/rack/request_body_filter.rb +33 -0
  15. data/lib/airbrake/rack/request_store.rb +34 -0
  16. data/lib/airbrake/rack/route_filter.rb +51 -0
  17. data/lib/airbrake/rack/session_filter.rb +25 -0
  18. data/lib/airbrake/rack/user.rb +74 -0
  19. data/lib/airbrake/rack/user_filter.rb +25 -0
  20. data/lib/airbrake/rails.rb +25 -31
  21. data/lib/airbrake/rails/action_cable.rb +35 -0
  22. data/lib/airbrake/rails/action_cable/notify_callback.rb +22 -0
  23. data/lib/airbrake/rails/action_controller.rb +40 -0
  24. data/lib/airbrake/rails/action_controller_notify_subscriber.rb +32 -0
  25. data/lib/airbrake/rails/action_controller_performance_breakdown_subscriber.rb +51 -0
  26. data/lib/airbrake/rails/action_controller_route_subscriber.rb +33 -0
  27. data/lib/airbrake/rails/active_job.rb +50 -0
  28. data/lib/airbrake/rails/active_record.rb +36 -0
  29. data/lib/airbrake/rails/active_record_subscriber.rb +46 -0
  30. data/lib/airbrake/rails/app.rb +78 -0
  31. data/lib/airbrake/rails/backtrace_cleaner.rb +23 -0
  32. data/lib/airbrake/rails/curb.rb +32 -0
  33. data/lib/airbrake/rails/event.rb +81 -0
  34. data/lib/airbrake/rails/excon_subscriber.rb +25 -0
  35. data/lib/airbrake/rails/http.rb +14 -0
  36. data/lib/airbrake/rails/http_client.rb +16 -0
  37. data/lib/airbrake/rails/net_http.rb +18 -0
  38. data/lib/airbrake/rails/railtie.rb +151 -0
  39. data/lib/airbrake/rails/typhoeus.rb +16 -0
  40. data/lib/airbrake/rake.rb +65 -0
  41. data/lib/airbrake/rake/tasks.rb +112 -0
  42. data/lib/airbrake/resque.rb +61 -0
  43. data/lib/airbrake/shoryuken.rb +54 -0
  44. data/lib/airbrake/sidekiq.rb +55 -0
  45. data/lib/airbrake/sidekiq/retryable_jobs_filter.rb +53 -0
  46. data/lib/airbrake/sneakers.rb +72 -0
  47. data/lib/airbrake/version.rb +5 -1
  48. data/lib/generators/airbrake_generator.rb +25 -0
  49. data/lib/generators/airbrake_initializer.rb.erb +80 -0
  50. metadata +206 -259
  51. data/CHANGELOG +0 -944
  52. data/Gemfile +0 -3
  53. data/Guardfile +0 -6
  54. data/INSTALL +0 -20
  55. data/MIT-LICENSE +0 -22
  56. data/README.md +0 -556
  57. data/README_FOR_HEROKU_ADDON.md +0 -94
  58. data/Rakefile +0 -223
  59. data/SUPPORTED_RAILS_VERSIONS +0 -38
  60. data/TESTING.md +0 -41
  61. data/airbrake.gemspec +0 -40
  62. data/bin/airbrake +0 -12
  63. data/features/metal.feature +0 -18
  64. data/features/rack.feature +0 -60
  65. data/features/rails.feature +0 -272
  66. data/features/rails_with_js_notifier.feature +0 -97
  67. data/features/rake.feature +0 -27
  68. data/features/sinatra.feature +0 -29
  69. data/features/step_definitions/file_steps.rb +0 -10
  70. data/features/step_definitions/metal_steps.rb +0 -23
  71. data/features/step_definitions/rack_steps.rb +0 -23
  72. data/features/step_definitions/rails_application_steps.rb +0 -478
  73. data/features/step_definitions/rake_steps.rb +0 -17
  74. data/features/support/airbrake_shim.rb.template +0 -16
  75. data/features/support/env.rb +0 -18
  76. data/features/support/matchers.rb +0 -35
  77. data/features/support/rails.rb +0 -201
  78. data/features/support/rake/Rakefile +0 -68
  79. data/features/support/terminal.rb +0 -107
  80. data/features/user_informer.feature +0 -63
  81. data/generators/airbrake/airbrake_generator.rb +0 -94
  82. data/generators/airbrake/lib/insert_commands.rb +0 -34
  83. data/generators/airbrake/lib/rake_commands.rb +0 -24
  84. data/generators/airbrake/templates/airbrake_tasks.rake +0 -25
  85. data/generators/airbrake/templates/capistrano_hook.rb +0 -6
  86. data/generators/airbrake/templates/initializer.rb +0 -6
  87. data/install.rb +0 -1
  88. data/lib/airbrake/backtrace.rb +0 -108
  89. data/lib/airbrake/cli/client.rb +0 -68
  90. data/lib/airbrake/cli/options.rb +0 -41
  91. data/lib/airbrake/cli/printer.rb +0 -30
  92. data/lib/airbrake/cli/project.rb +0 -17
  93. data/lib/airbrake/cli/project_factory.rb +0 -36
  94. data/lib/airbrake/cli/runner.rb +0 -48
  95. data/lib/airbrake/cli/validator.rb +0 -8
  96. data/lib/airbrake/configuration.rb +0 -311
  97. data/lib/airbrake/extensions/blank.rb +0 -73
  98. data/lib/airbrake/notice.rb +0 -390
  99. data/lib/airbrake/rails/action_controller_catcher.rb +0 -30
  100. data/lib/airbrake/rails/controller_methods.rb +0 -87
  101. data/lib/airbrake/rails/error_lookup.rb +0 -33
  102. data/lib/airbrake/rails/javascript_notifier.rb +0 -47
  103. data/lib/airbrake/rails/middleware/exceptions_catcher.rb +0 -33
  104. data/lib/airbrake/rails3_tasks.rb +0 -98
  105. data/lib/airbrake/railtie.rb +0 -48
  106. data/lib/airbrake/rake_handler.rb +0 -71
  107. data/lib/airbrake/sender.rb +0 -128
  108. data/lib/airbrake/shared_tasks.rb +0 -47
  109. data/lib/airbrake/tasks.rb +0 -83
  110. data/lib/airbrake/user_informer.rb +0 -27
  111. data/lib/airbrake_tasks.rb +0 -64
  112. data/lib/rails/generators/airbrake/airbrake_generator.rb +0 -100
  113. data/lib/templates/javascript_notifier.erb +0 -15
  114. data/lib/templates/rescue.erb +0 -91
  115. data/rails/init.rb +0 -1
  116. data/resources/README.md +0 -34
  117. data/resources/ca-bundle.crt +0 -3376
  118. data/script/integration_test.rb +0 -38
  119. data/test/airbrake_2_3.xsd +0 -88
  120. data/test/airbrake_tasks_test.rb +0 -170
  121. data/test/backtrace_test.rb +0 -162
  122. data/test/capistrano_test.rb +0 -34
  123. data/test/catcher_test.rb +0 -333
  124. data/test/configuration_test.rb +0 -233
  125. data/test/helper.rb +0 -263
  126. data/test/javascript_notifier_test.rb +0 -51
  127. data/test/logger_test.rb +0 -79
  128. data/test/notice_test.rb +0 -490
  129. data/test/notifier_test.rb +0 -276
  130. data/test/rack_test.rb +0 -58
  131. data/test/rails_initializer_test.rb +0 -36
  132. data/test/recursion_test.rb +0 -10
  133. data/test/sender_test.rb +0 -288
  134. data/test/user_informer_test.rb +0 -29
@@ -1,38 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'logger'
4
- require 'fileutils'
5
-
6
- RAILS_ENV = "production"
7
- RAILS_ROOT = FileUtils.pwd
8
- RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
9
-
10
- $: << File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
11
- require 'airbrake'
12
- require 'rails/init'
13
-
14
- fail "Please supply an API Key as the first argument" if ARGV.empty?
15
-
16
- host = ARGV[1]
17
- host ||= "api.airbrake.io"
18
-
19
- secure = (ARGV[2] == "secure")
20
-
21
- exception = begin
22
- raise "Testing airbrake notifier with secure = #{secure}. If you can see this, it works."
23
- rescue => foo
24
- foo
25
- end
26
-
27
- Airbrake.configure do |config|
28
- config.secure = secure
29
- config.host = host
30
- config.api_key = ARGV.first
31
- end
32
- puts "Configuration:"
33
- Airbrake.configuration.to_hash.each do |key, value|
34
- puts sprintf("%25s: %s", key.to_s, value.inspect.slice(0, 55))
35
- end
36
- puts "Sending #{secure ? "" : "in"}secure notification to project with key #{ARGV.first}"
37
- Airbrake.notify(exception)
38
-
@@ -1,88 +0,0 @@
1
- <?xml version="1.0"?>
2
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
-
4
- <xs:element name="notice">
5
- <xs:complexType>
6
- <xs:all>
7
- <xs:element name="api-key" type="xs:string"/>
8
- <xs:element name="notifier" type="notifier"/>
9
- <xs:element name="error" type="error"/>
10
- <xs:element name="request" type="request" minOccurs="0"/>
11
- <xs:element name="server-environment" type="serverEnvironment"/>
12
- <xs:element name="current-user" type="current-user" minOccurs="0"/>
13
- </xs:all>
14
- <xs:attribute name="version" type="xs:string" use="required"/>
15
- </xs:complexType>
16
- </xs:element>
17
-
18
- <xs:complexType name="notifier">
19
- <xs:all>
20
- <xs:element name="name" type="xs:string"/>
21
- <xs:element name="version" type="xs:string"/>
22
- <xs:element name="url" type="xs:string"/>
23
- </xs:all>
24
- </xs:complexType>
25
-
26
- <xs:complexType name="error">
27
- <xs:all>
28
- <xs:element name="class" type="xs:string"/>
29
- <xs:element name="message" type="xs:string" minOccurs="0"/>
30
- <xs:element name="backtrace" type="backtrace"/>
31
- </xs:all>
32
- </xs:complexType>
33
-
34
- <xs:complexType name="backtrace">
35
- <xs:sequence>
36
- <xs:element name="line" maxOccurs="unbounded" minOccurs="0">
37
- <xs:complexType>
38
- <xs:attribute name="file" type="xs:string" use="required"/>
39
- <xs:attribute name="number" type="xs:string" use="required"/>
40
- <xs:attribute name="method" type="xs:string" use="optional"/>
41
- </xs:complexType>
42
- </xs:element>
43
- </xs:sequence>
44
- </xs:complexType>
45
-
46
- <xs:complexType name="request">
47
- <xs:all>
48
- <xs:element name="url" type="xs:string"/>
49
- <xs:element name="component" type="xs:string"/>
50
- <xs:element name="action" type="xs:string" minOccurs="0"/>
51
- <xs:element name="params" type="varList" minOccurs="0"/>
52
- <xs:element name="session" type="varList" minOccurs="0"/>
53
- <xs:element name="cgi-data" type="varList" minOccurs="0"/>
54
- </xs:all>
55
- </xs:complexType>
56
-
57
- <xs:complexType name="varList">
58
- <xs:sequence>
59
- <xs:element name="var" type="var" maxOccurs="unbounded"/>
60
- </xs:sequence>
61
- </xs:complexType>
62
-
63
- <xs:complexType name="var" mixed="true">
64
- <xs:sequence>
65
- <xs:element name="var" type="var" minOccurs="0" maxOccurs="unbounded"/>
66
- </xs:sequence>
67
- <xs:attribute name="key" type="xs:string" use="required"/>
68
- </xs:complexType>
69
-
70
- <xs:complexType name="serverEnvironment">
71
- <xs:sequence>
72
- <xs:element name="project-root" type="xs:string" minOccurs="0"/>
73
- <xs:element name="environment-name" type="xs:string"/>
74
- <xs:element name="app-version" type="xs:string" minOccurs="0"/>
75
- <xs:element name="hostname" type="xs:string" minOccurs="0"/>
76
- </xs:sequence>
77
- </xs:complexType>
78
-
79
- <xs:complexType name="current-user">
80
- <xs:all>
81
- <xs:element name="id" type="xs:string"/>
82
- <xs:element name="name" type="xs:string" minOccurs="0"/>
83
- <xs:element name="email" type="xs:string" minOccurs="0"/>
84
- <xs:element name="username" type="xs:string" minOccurs="0"/>
85
- </xs:all>
86
- </xs:complexType>
87
-
88
- </xs:schema>
@@ -1,170 +0,0 @@
1
- require File.expand_path '../helper', __FILE__
2
- require 'rubygems'
3
-
4
- require File.dirname(__FILE__) + '/../lib/airbrake_tasks'
5
- require 'fakeweb'
6
-
7
- FakeWeb.allow_net_connect = false
8
-
9
- class AirbrakeTasksTest < Test::Unit::TestCase
10
- def successful_response(body = "")
11
- response = Net::HTTPSuccess.new('1.2', '200', 'OK')
12
- response.stubs(:body).returns(body)
13
- return response
14
- end
15
-
16
- def unsuccessful_response(body = "")
17
- response = Net::HTTPClientError.new('1.2', '200', 'OK')
18
- response.stubs(:body).returns(body)
19
- return response
20
- end
21
-
22
- context "being quiet" do
23
- setup { AirbrakeTasks.stubs(:puts) }
24
-
25
- context "in a configured project" do
26
- setup { Airbrake.configure { |config| config.api_key = "1234123412341234" } }
27
-
28
- context "on deploy({})" do
29
- setup { @output = AirbrakeTasks.deploy({}) }
30
-
31
- before_should "complain about missing rails env" do
32
- AirbrakeTasks.expects(:puts).with(regexp_matches(/rails environment/i))
33
- end
34
-
35
- should "return false" do
36
- assert !@output
37
- end
38
- end
39
-
40
- context "given an optional HTTP proxy and valid options" do
41
- setup do
42
- @response = stub("response", :body => "stub body")
43
- @http_proxy = stub("proxy", :request => @response)
44
- @http_proxy_class = stub("proxy_class", :new => @http_proxy)
45
- @post = stub("post", :set_form_data => nil)
46
-
47
- Net::HTTP.expects(:Proxy).
48
- with(Airbrake.configuration.proxy_host,
49
- Airbrake.configuration.proxy_port,
50
- Airbrake.configuration.proxy_user,
51
- Airbrake.configuration.proxy_pass).
52
- returns(@http_proxy_class)
53
- Net::HTTP::Post.expects(:new).with("/deploys.txt").returns(@post)
54
-
55
- @options = { :rails_env => "staging", :dry_run => false }
56
- end
57
-
58
- context "performing a dry run" do
59
- setup { @output = AirbrakeTasks.deploy(@options.merge(:dry_run => true)) }
60
-
61
- should "return true without performing any actual request" do
62
- assert_equal true, @output
63
- assert_received(@http_proxy, :request) do |expects|
64
- expects.never
65
- end
66
- end
67
- end
68
-
69
- context "on deploy(options)" do
70
- setup do
71
- @output = AirbrakeTasks.deploy(@options)
72
- end
73
-
74
- before_should "post to http://api.airbrake.io:80/deploys.txt" do
75
- @http_proxy_class.expects(:new).with("api.airbrake.io", 80).returns(@http_proxy)
76
- @post.expects(:set_form_data).with(kind_of(Hash))
77
- @http_proxy.expects(:request).with(any_parameters).returns(successful_response)
78
- end
79
-
80
- before_should "use the project api key" do
81
- @post.expects(:set_form_data).
82
- with(has_entries('api_key' => "1234123412341234"))
83
- end
84
-
85
- before_should "use send the rails_env param" do
86
- @post.expects(:set_form_data).
87
- with(has_entries("deploy[rails_env]" => "staging"))
88
- end
89
-
90
- [:local_username, :scm_repository, :scm_revision].each do |key|
91
- before_should "use send the #{key} param if it's passed in." do
92
- @options[key] = "value"
93
- @post.expects(:set_form_data).
94
- with(has_entries("deploy[#{key}]" => "value"))
95
- end
96
- end
97
-
98
- before_should "use the :api_key param if it's passed in." do
99
- @options[:api_key] = "value"
100
- @post.expects(:set_form_data).
101
- with(has_entries("api_key" => "value"))
102
- end
103
-
104
- before_should "puts the response body on success" do
105
- AirbrakeTasks.expects(:puts).with("body")
106
- @http_proxy.expects(:request).with(any_parameters).returns(successful_response('body'))
107
- end
108
-
109
- before_should "puts the response body on failure" do
110
- AirbrakeTasks.expects(:puts).with("body")
111
- @http_proxy.expects(:request).with(any_parameters).returns(unsuccessful_response('body'))
112
- end
113
-
114
- should "return false on failure", :before => lambda {
115
- @http_proxy.expects(:request).with(any_parameters).returns(unsuccessful_response('body'))
116
- } do
117
- assert !@output
118
- end
119
-
120
- should "return true on success", :before => lambda {
121
- @http_proxy.expects(:request).with(any_parameters).returns(successful_response('body'))
122
- } do
123
- assert @output
124
- end
125
- end
126
- end
127
- end
128
-
129
- context "in a configured project with custom host" do
130
- setup do
131
- Airbrake.configure do |config|
132
- config.api_key = "1234123412341234"
133
- config.host = "custom.host"
134
- end
135
- end
136
-
137
- context "on deploy(:rails_env => 'staging')" do
138
- setup { @output = AirbrakeTasks.deploy(:rails_env => "staging") }
139
-
140
- before_should "post to the custom host" do
141
- @post = stub("post", :set_form_data => nil)
142
- @http_proxy = stub("proxy", :request => @response)
143
-
144
- @http_proxy_class = stub("proxy_class", :new => @http_proxy)
145
- @http_proxy_class.expects(:new).with("custom.host", 80).returns(@http_proxy)
146
- Net::HTTP.expects(:Proxy).with(any_parameters).returns(@http_proxy_class)
147
- Net::HTTP::Post.expects(:new).with("/deploys.txt").returns(@post)
148
- @post.expects(:set_form_data).with(kind_of(Hash))
149
- @http_proxy.expects(:request).with(any_parameters).returns(successful_response)
150
- end
151
- end
152
- end
153
-
154
- context "when not configured" do
155
- setup { Airbrake.configure { |config| config.api_key = "" } }
156
-
157
- context "on deploy(:rails_env => 'staging')" do
158
- setup { @output = AirbrakeTasks.deploy(:rails_env => "staging") }
159
-
160
- before_should "complain about missing api key" do
161
- AirbrakeTasks.expects(:puts).with(regexp_matches(/api key/i))
162
- end
163
-
164
- should "return false" do
165
- assert !@output
166
- end
167
- end
168
- end
169
- end
170
- end
@@ -1,162 +0,0 @@
1
- require File.expand_path '../helper', __FILE__
2
-
3
- class BacktraceTest < Test::Unit::TestCase
4
-
5
- should "parse a backtrace into lines" do
6
- array = [
7
- "app/models/user.rb:13:in `magic'",
8
- "app/controllers/users_controller.rb:8:in `index'"
9
- ]
10
-
11
- backtrace = Airbrake::Backtrace.parse(array)
12
-
13
- line = backtrace.lines.first
14
- assert_equal '13', line.number
15
- assert_equal 'app/models/user.rb', line.file
16
- assert_equal 'magic', line.method
17
-
18
- line = backtrace.lines.last
19
- assert_equal '8', line.number
20
- assert_equal 'app/controllers/users_controller.rb', line.file
21
- assert_equal 'index', line.method
22
- end
23
-
24
- should "parse a windows backtrace into lines" do
25
- array = [
26
- "C:/Program Files/Server/app/models/user.rb:13:in `magic'",
27
- "C:/Program Files/Server/app/controllers/users_controller.rb:8:in `index'"
28
- ]
29
-
30
- backtrace = Airbrake::Backtrace.parse(array)
31
-
32
- line = backtrace.lines.first
33
- assert_equal '13', line.number
34
- assert_equal 'C:/Program Files/Server/app/models/user.rb', line.file
35
- assert_equal 'magic', line.method
36
-
37
- line = backtrace.lines.last
38
- assert_equal '8', line.number
39
- assert_equal 'C:/Program Files/Server/app/controllers/users_controller.rb', line.file
40
- assert_equal 'index', line.method
41
- end
42
-
43
- should "be equal with equal lines" do
44
- one = build_backtrace_array
45
- two = one.dup
46
-
47
- assert_equal Airbrake::Backtrace.parse(one), Airbrake::Backtrace.parse(two)
48
- end
49
-
50
- should "parse massive one-line exceptions into multiple lines" do
51
- original_backtrace = Airbrake::Backtrace.
52
- parse(["one:1:in `one'\n two:2:in `two'\n three:3:in `three`"])
53
- expected_backtrace = Airbrake::Backtrace.
54
- parse(["one:1:in `one'", "two:2:in `two'", "three:3:in `three`"])
55
-
56
- assert_equal expected_backtrace, original_backtrace
57
- end
58
-
59
- context "with a project root" do
60
- setup do
61
- @project_root = '/some/path'
62
- Airbrake.configure {|config| config.project_root = @project_root }
63
- end
64
-
65
- teardown do
66
- reset_config
67
- end
68
-
69
- should "filter out the project root" do
70
- backtrace_with_root = Airbrake::Backtrace.parse(
71
- ["#{@project_root}/app/models/user.rb:7:in `latest'",
72
- "#{@project_root}/app/controllers/users_controller.rb:13:in `index'",
73
- "/lib/something.rb:41:in `open'"],
74
- :filters => default_filters)
75
- backtrace_without_root = Airbrake::Backtrace.parse(
76
- ["[PROJECT_ROOT]/app/models/user.rb:7:in `latest'",
77
- "[PROJECT_ROOT]/app/controllers/users_controller.rb:13:in `index'",
78
- "/lib/something.rb:41:in `open'"])
79
-
80
- assert_equal backtrace_without_root, backtrace_with_root
81
- end
82
- end
83
-
84
- context "with a project root equals to a part of file name" do
85
- setup do
86
- # Heroku-like
87
- @project_root = '/app'
88
- Airbrake.configure {|config| config.project_root = @project_root }
89
- end
90
-
91
- teardown do
92
- reset_config
93
- end
94
-
95
- should "filter out the project root" do
96
- backtrace_with_root = Airbrake::Backtrace.parse(
97
- ["#{@project_root}/app/models/user.rb:7:in `latest'",
98
- "#{@project_root}/app/controllers/users_controller.rb:13:in `index'",
99
- "/lib/something.rb:41:in `open'"],
100
- :filters => default_filters)
101
- backtrace_without_root = Airbrake::Backtrace.parse(
102
- ["[PROJECT_ROOT]/app/models/user.rb:7:in `latest'",
103
- "[PROJECT_ROOT]/app/controllers/users_controller.rb:13:in `index'",
104
- "/lib/something.rb:41:in `open'"])
105
-
106
- assert_equal backtrace_without_root, backtrace_with_root
107
- end
108
- end
109
-
110
- context "with a blank project root" do
111
- setup do
112
- Airbrake.configure {|config| config.project_root = '' }
113
- end
114
-
115
- teardown do
116
- reset_config
117
- end
118
-
119
- should "not filter line numbers with respect to any project root" do
120
- backtrace = ["/app/models/user.rb:7:in `latest'",
121
- "/app/controllers/users_controller.rb:13:in `index'",
122
- "/lib/something.rb:41:in `open'"]
123
-
124
- backtrace_with_root =
125
- Airbrake::Backtrace.parse(backtrace, :filters => default_filters)
126
-
127
- backtrace_without_root =
128
- Airbrake::Backtrace.parse(backtrace)
129
-
130
- assert_equal backtrace_without_root, backtrace_with_root
131
- end
132
- end
133
-
134
- should "remove notifier trace" do
135
- inside_notifier = ['lib/airbrake.rb:13:in `voodoo`']
136
- outside_notifier = ['users_controller:8:in `index`']
137
-
138
- without_inside = Airbrake::Backtrace.parse(outside_notifier)
139
- with_inside = Airbrake::Backtrace.parse(inside_notifier + outside_notifier,
140
- :filters => default_filters)
141
-
142
- assert_equal without_inside, with_inside
143
- end
144
-
145
- should "run filters on the backtrace" do
146
- filters = [lambda { |line| line.sub('foo', 'bar') }]
147
- input = Airbrake::Backtrace.parse(["foo:13:in `one'", "baz:14:in `two'"],
148
- :filters => filters)
149
- expected = Airbrake::Backtrace.parse(["bar:13:in `one'", "baz:14:in `two'"])
150
- assert_equal expected, input
151
- end
152
-
153
- def build_backtrace_array
154
- ["app/models/user.rb:13:in `magic'",
155
- "app/controllers/users_controller.rb:8:in `index'"]
156
- end
157
-
158
- def default_filters
159
- Airbrake::Configuration::DEFAULT_BACKTRACE_FILTERS
160
- end
161
-
162
- end