Commit 33abb5b80251548c9dbefb3edaef2efaa31abfb1

Authored by Marcin Ciunelis
1 parent 1e637035
Exists in master and in 1 other branch production

airbrake API 2.3 support

app/models/error_report.rb
@@ -2,7 +2,7 @@ require 'digest/md5' @@ -2,7 +2,7 @@ require 'digest/md5'
2 require 'hoptoad_notifier' 2 require 'hoptoad_notifier'
3 3
4 class ErrorReport 4 class ErrorReport
5 - attr_reader :error_class, :message, :backtrace, :request, :server_environment, :api_key, :notifier, :user_attributes 5 + attr_reader :error_class, :message, :backtrace, :request, :server_environment, :api_key, :notifier, :user_attributes, :current_user
6 6
7 def initialize(xml_or_attributes) 7 def initialize(xml_or_attributes)
8 @attributes = (xml_or_attributes.is_a?(String) ? Hoptoad.parse_xml!(xml_or_attributes) : xml_or_attributes).with_indifferent_access 8 @attributes = (xml_or_attributes.is_a?(String) ? Hoptoad.parse_xml!(xml_or_attributes) : xml_or_attributes).with_indifferent_access
@@ -41,7 +41,9 @@ class ErrorReport @@ -41,7 +41,9 @@ class ErrorReport
41 :request => request, 41 :request => request,
42 :server_environment => server_environment, 42 :server_environment => server_environment,
43 :notifier => notifier, 43 :notifier => notifier,
44 - :user_attributes => user_attributes) 44 + :user_attributes => user_attributes,
  45 + :current_user => current_user
  46 + )
45 47
46 err = app.find_or_create_err!( 48 err = app.find_or_create_err!(
47 :error_class => error_class, 49 :error_class => error_class,
app/models/notice.rb
@@ -11,6 +11,7 @@ class Notice @@ -11,6 +11,7 @@ class Notice
11 field :request, :type => Hash 11 field :request, :type => Hash
12 field :notifier, :type => Hash 12 field :notifier, :type => Hash
13 field :user_attributes, :type => Hash 13 field :user_attributes, :type => Hash
  14 + field :current_user, :type => Hash
14 field :error_class 15 field :error_class
15 16
16 belongs_to :err 17 belongs_to :err
lib/hoptoad.rb
@@ -3,7 +3,7 @@ require 'hoptoad/v2' @@ -3,7 +3,7 @@ require 'hoptoad/v2'
3 module Hoptoad 3 module Hoptoad
4 class ApiVersionError < StandardError 4 class ApiVersionError < StandardError
5 def initialize 5 def initialize
6 - super "Wrong API Version: Expecting 2.0, 2.1, or 2.2" 6 + super "Wrong API Version: Expecting 2.0, 2.1, 2.2 or 2.3"
7 end 7 end
8 end 8 end
9 9
@@ -16,7 +16,7 @@ module Hoptoad @@ -16,7 +16,7 @@ module Hoptoad
16 private 16 private
17 def self.get_version_processor(version) 17 def self.get_version_processor(version)
18 case version 18 case version
19 - when /2\.[012]/; Hoptoad::V2 19 + when /2\.[0123]/; Hoptoad::V2
20 else; raise ApiVersionError 20 else; raise ApiVersionError
21 end 21 end
22 end 22 end
lib/hoptoad/v2.rb
@@ -59,7 +59,8 @@ module Hoptoad @@ -59,7 +59,8 @@ module Hoptoad
59 59
60 :api_key => notice['api-key'], 60 :api_key => notice['api-key'],
61 :notifier => notice['notifier'], 61 :notifier => notice['notifier'],
62 - :user_attributes => notice['user-attributes'] || {} 62 + :user_attributes => notice['user-attributes'] || {},
  63 + :current_user => notice['current-user'] || {}
63 } 64 }
64 end 65 end
65 end 66 end
spec/fixtures/hoptoad_test_notice.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 -<notice version="2.0"> 2 +<notice version="2.3">
3 <api-key>APIKEY</api-key> 3 <api-key>APIKEY</api-key>
4 <notifier> 4 <notifier>
5 <name>Hoptoad Notifier</name> 5 <name>Hoptoad Notifier</name>
@@ -144,4 +144,10 @@ @@ -144,4 +144,10 @@
144 <project-root>/path/to/sample/project</project-root> 144 <project-root>/path/to/sample/project</project-root>
145 <environment-name>development</environment-name> 145 <environment-name>development</environment-name>
146 </server-environment> 146 </server-environment>
  147 + <current-user>
  148 + <id>123</id>
  149 + <name>Mr. Bean</name>
  150 + <email>mr.bean@example.com</email>
  151 + <username>mrbean</username>
  152 + </current-user>
147 </notice> 153 </notice>
spec/models/app_spec.rb
@@ -230,6 +230,15 @@ describe App do @@ -230,6 +230,15 @@ describe App do
230 lambda { @notice = App.report_error!(xml) }.should_not raise_error 230 lambda { @notice = App.report_error!(xml) }.should_not raise_error
231 @notice.backtrace.length.should == 1 231 @notice.backtrace.length.should == 1
232 end 232 end
  233 +
  234 + it 'captures the current_user' do
  235 + @notice = App.report_error!(@xml)
  236 + @notice.current_user['id'].should == '123'
  237 + @notice.current_user['name'].should == 'Mr. Bean'
  238 + @notice.current_user['email'].should == 'mr.bean@example.com'
  239 + @notice.current_user['username'].should == 'mrbean'
  240 + end
  241 +
233 end 242 end
234 243
235 244