Commit 666ce5515732554769af38a50f32f02cb94b2891
1 parent
a0929bc8
Exists in
master
#1044 support and document the airbrake-js xhr reporter
Showing
4 changed files
with
17 additions
and
7 deletions
Show diff stats
README.md
@@ -243,17 +243,20 @@ This tab will be hidden if no user information is available. | @@ -243,17 +243,20 @@ This tab will be hidden if no user information is available. | ||
243 | 243 | ||
244 | Javascript error notifications | 244 | Javascript error notifications |
245 | -------------------------------------- | 245 | -------------------------------------- |
246 | - | ||
247 | You can log javascript errors that occur in your application by including the | 246 | You can log javascript errors that occur in your application by including the |
248 | [airbrake-js](https://github.com/airbrake/airbrake-js) javascript library. | 247 | [airbrake-js](https://github.com/airbrake/airbrake-js) javascript library. |
249 | 248 | ||
250 | -Install airbrake-js according to the docs at | ||
251 | -[airbrake-js](https://github.com/airbrake/airbrake-js) and set your project and | ||
252 | -host as early as possible: | 249 | +Install airbrake-js according to the docs at and set your project and host as |
250 | +soon as you want to start reporting errors. Then follow along with the | ||
251 | +documentation at https://github.com/airbrake/airbrake-js/blob/master/README.md | ||
253 | 252 | ||
254 | ```javascript | 253 | ```javascript |
255 | -Airbrake.setProject("ERRBIT API KEY", "ERRBIT API KEY"); | ||
256 | -Airbrake.setHost("http://errbit.yourdomain.com"); | 254 | +var airbrake = new airbrakeJs.Client({ |
255 | + projectId: 'ERRBIT API KEY', | ||
256 | + projectKey: 'ERRBIT API KEY (again)', | ||
257 | + reporter: 'xhr', | ||
258 | + host: 'https://myerrbit.com' | ||
259 | +}); | ||
257 | ``` | 260 | ``` |
258 | 261 | ||
259 | Plugins and Integrations | 262 | Plugins and Integrations |
app/controllers/api/v3/notices_controller.rb
@@ -10,6 +10,7 @@ class Api::V3::NoticesController < ApplicationController | @@ -10,6 +10,7 @@ class Api::V3::NoticesController < ApplicationController | ||
10 | def create | 10 | def create |
11 | response.headers['Access-Control-Allow-Origin'] = '*' | 11 | response.headers['Access-Control-Allow-Origin'] = '*' |
12 | response.headers['Access-Control-Allow-Headers'] = 'origin, content-type, accept' | 12 | response.headers['Access-Control-Allow-Headers'] = 'origin, content-type, accept' |
13 | + return render(status: 200, text: '') if request.method == 'OPTIONS' | ||
13 | 14 | ||
14 | report = AirbrakeApi::V3::NoticeParser.new( | 15 | report = AirbrakeApi::V3::NoticeParser.new( |
15 | params.merge(JSON.parse(request.raw_post) || {})).report | 16 | params.merge(JSON.parse(request.raw_post) || {})).report |
config/routes.rb
@@ -64,7 +64,7 @@ Rails.application.routes.draw do | @@ -64,7 +64,7 @@ Rails.application.routes.draw do | ||
64 | end | 64 | end |
65 | 65 | ||
66 | match '/api/v3/projects/:project_id/create-notice' => 'api/v3/notices#create', via: [:post] | 66 | match '/api/v3/projects/:project_id/create-notice' => 'api/v3/notices#create', via: [:post] |
67 | - match '/api/v3/projects/:project_id/notices' => 'api/v3/notices#create', via: [:post] | 67 | + match '/api/v3/projects/:project_id/notices' => 'api/v3/notices#create', via: [:post, :options] |
68 | 68 | ||
69 | root to: 'apps#index' | 69 | root to: 'apps#index' |
70 | end | 70 | end |
spec/controllers/api/v3/notices_controller_spec.rb
@@ -12,6 +12,12 @@ describe Api::V3::NoticesController, type: :controller do | @@ -12,6 +12,12 @@ describe Api::V3::NoticesController, type: :controller do | ||
12 | expect(response.headers['Access-Control-Allow-Headers']).to eq('origin, content-type, accept') | 12 | expect(response.headers['Access-Control-Allow-Headers']).to eq('origin, content-type, accept') |
13 | end | 13 | end |
14 | 14 | ||
15 | + it 'responds to an OPTIONS request' do | ||
16 | + process :create, 'OPTIONS', project_id: 'nothingspecial' | ||
17 | + expect(response.headers['Access-Control-Allow-Origin']).to eq('*') | ||
18 | + expect(response.headers['Access-Control-Allow-Headers']).to eq('origin, content-type, accept') | ||
19 | + end | ||
20 | + | ||
15 | it 'returns created notice id in json format' do | 21 | it 'returns created notice id in json format' do |
16 | post :create, legit_body, legit_params | 22 | post :create, legit_body, legit_params |
17 | notice = Notice.last | 23 | notice = Notice.last |