Commit 5145c399fabec1d70cf03338681a848b5e2cc8ac
1 parent
9feadde1
Exists in
master
v3 API allow notifier in the context hash
According to @zefer, the notifier can be passed in the context hash as well as the top level when creating a notice through the JSON api. https://github.com/airbrake/airbrake-js/pull/174#issuecomment-164918928
Showing
3 changed files
with
33 additions
and
12 deletions
Show diff stats
README.md
| ... | ... | @@ -249,10 +249,6 @@ Airbrake.setProject("ERRBIT API KEY", "ERRBIT API KEY"); |
| 249 | 249 | Airbrake.setHost("http://errbit.yourdomain.com"); |
| 250 | 250 | ``` |
| 251 | 251 | |
| 252 | -NOTE: Errbit is known to work with airbrake-js v0.5.2. Newer versions of | |
| 253 | -will not work until we figure out how to deal with: | |
| 254 | -https://github.com/airbrake/airbrake-js/pull/174#issuecomment-164918928 | |
| 255 | - | |
| 256 | 252 | Plugins and Integrations |
| 257 | 253 | ------------------------ |
| 258 | 254 | You can extend Errbit by adding Ruby gems and plugins which are typically gems. | ... | ... |
lib/airbrake_api/v3/notice_parser.rb
| ... | ... | @@ -9,18 +9,20 @@ module AirbrakeApi |
| 9 | 9 | @params = params || {} |
| 10 | 10 | end |
| 11 | 11 | |
| 12 | - def report | |
| 13 | - attributes = { | |
| 12 | + def attributes | |
| 13 | + { | |
| 14 | 14 | error_class: error['type'], |
| 15 | 15 | message: error['message'], |
| 16 | 16 | backtrace: backtrace, |
| 17 | 17 | request: request, |
| 18 | 18 | server_environment: server_environment, |
| 19 | 19 | api_key: params['key'].present? ? params['key'] : params['project_id'], |
| 20 | - notifier: params['notifier'], | |
| 20 | + notifier: context['notifier'] || params['notifier'], | |
| 21 | 21 | user_attributes: user_attributes |
| 22 | 22 | } |
| 23 | + end | |
| 23 | 24 | |
| 25 | + def report | |
| 24 | 26 | ErrorReport.new(attributes) |
| 25 | 27 | end |
| 26 | 28 | ... | ... |
spec/lib/airbrake_api/v3/notice_parser_spec.rb
| 1 | 1 | describe AirbrakeApi::V3::NoticeParser do |
| 2 | 2 | let(:app) { Fabricate(:app) } |
| 3 | + let(:notifier_params) do | |
| 4 | + { | |
| 5 | + 'name' => 'notifiername', | |
| 6 | + 'version' => 'notifierversion', | |
| 7 | + 'url' => 'notifierurl' | |
| 8 | + } | |
| 9 | + end | |
| 3 | 10 | |
| 4 | 11 | it 'raises error when errors attribute is missing' do |
| 5 | 12 | expect do |
| 6 | - AirbrakeApi::V3::NoticeParser.new({}).report | |
| 13 | + described_class.new({}).report | |
| 7 | 14 | end.to raise_error(AirbrakeApi::ParamsError) |
| 8 | 15 | |
| 9 | 16 | expect do |
| 10 | - AirbrakeApi::V3::NoticeParser.new('errors' => []).report | |
| 17 | + described_class.new('errors' => []).report | |
| 11 | 18 | end.to raise_error(AirbrakeApi::ParamsError) |
| 12 | 19 | end |
| 13 | 20 | |
| 14 | 21 | it 'parses JSON payload and returns ErrorReport' do |
| 15 | 22 | params = build_params(key: app.api_key) |
| 16 | 23 | |
| 17 | - report = AirbrakeApi::V3::NoticeParser.new(params).report | |
| 24 | + report = described_class.new(params).report | |
| 18 | 25 | notice = report.generate_notice! |
| 19 | 26 | |
| 20 | 27 | expect(report.error_class).to eq('Error') |
| ... | ... | @@ -37,7 +44,7 @@ describe AirbrakeApi::V3::NoticeParser do |
| 37 | 44 | it 'parses JSON payload when api_key is missing but project_id is present' do |
| 38 | 45 | params = build_params(key: nil, project_id: app.api_key) |
| 39 | 46 | |
| 40 | - report = AirbrakeApi::V3::NoticeParser.new(params).report | |
| 47 | + report = described_class.new(params).report | |
| 41 | 48 | expect(report).to be_valid |
| 42 | 49 | end |
| 43 | 50 | |
| ... | ... | @@ -46,7 +53,7 @@ describe AirbrakeApi::V3::NoticeParser do |
| 46 | 53 | params = JSON.parse(json) |
| 47 | 54 | params['key'] = app.api_key |
| 48 | 55 | |
| 49 | - report = AirbrakeApi::V3::NoticeParser.new(params).report | |
| 56 | + report = described_class.new(params).report | |
| 50 | 57 | report.generate_notice! |
| 51 | 58 | |
| 52 | 59 | expect(report.error_class).to eq('Error') |
| ... | ... | @@ -54,6 +61,22 @@ describe AirbrakeApi::V3::NoticeParser do |
| 54 | 61 | expect(report.backtrace.lines.size).to eq(0) |
| 55 | 62 | end |
| 56 | 63 | |
| 64 | + it 'takes the notifier from root' do | |
| 65 | + parser = described_class.new( | |
| 66 | + 'errors' => ['MyError'], | |
| 67 | + 'notifier' => notifier_params, | |
| 68 | + 'environment' => {}) | |
| 69 | + expect(parser.attributes[:notifier]).to eq(notifier_params) | |
| 70 | + end | |
| 71 | + | |
| 72 | + it 'takes the notifier from the context' do | |
| 73 | + parser = described_class.new( | |
| 74 | + 'errors' => ['MyError'], | |
| 75 | + 'context' => { 'notifier' => notifier_params }, | |
| 76 | + 'environment' => {}) | |
| 77 | + expect(parser.attributes[:notifier]).to eq(notifier_params) | |
| 78 | + end | |
| 79 | + | |
| 57 | 80 | def build_params(options = {}) |
| 58 | 81 | json = Rails.root.join('spec', 'fixtures', 'api_v3_request.json').read |
| 59 | 82 | data = JSON.parse(json) | ... | ... |