diff --git a/app/adapters/application.js b/app/adapters/application.js index b04bea0..2aab3ad 100644 --- a/app/adapters/application.js +++ b/app/adapters/application.js @@ -1,8 +1,26 @@ import DS from 'ember-data'; +import Ember from 'ember'; import config from '../config/environment'; export default DS.RESTAdapter.extend({ namespace: 'api/' + config.genus, host: config.apiURL, coalesceFindRequests: true, + ajaxError: function(jqXHR) { + // http://stackoverflow.com/a/24027443 + var error = this._super(jqXHR); + if (jqXHR && jqXHR.status === 422) { + var response = Ember.$.parseJSON(jqXHR.responseText), + errors = {}; + if (response.errors !== undefined) { + var jsonErrors = response.errors; + Ember.EnumerableUtils.forEach(Ember.keys(jsonErrors), function(key) { + errors[Ember.String.camelize(key)] = jsonErrors[key]; + }); + } + return new DS.InvalidError(errors); + } else { + return error; + } + } }); diff --git a/app/components/display-errors.js b/app/components/display-errors.js new file mode 100644 index 0000000..926b613 --- /dev/null +++ b/app/components/display-errors.js @@ -0,0 +1,4 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ +}); diff --git a/app/templates/components/display-errors.hbs b/app/templates/components/display-errors.hbs new file mode 100644 index 0000000..8d95c0d --- /dev/null +++ b/app/templates/components/display-errors.hbs @@ -0,0 +1,3 @@ +{{#each error in a}} +
{{error.message}}
+{{/each}} diff --git a/tests/unit/components/display-error-test.js b/tests/unit/components/display-error-test.js new file mode 100644 index 0000000..e81245a --- /dev/null +++ b/tests/unit/components/display-error-test.js @@ -0,0 +1,21 @@ +import { + moduleForComponent, + test +} from 'ember-qunit'; + +moduleForComponent('display-error', { + // Specify the other units that are required for this test + // needs: ['component:foo', 'helper:bar'] +}); + +test('it renders', function(assert) { + assert.expect(2); + + // Creates the component instance + var component = this.subject(); + assert.equal(component._state, 'preRender'); + + // Renders the component to the page + this.render(); + assert.equal(component._state, 'inDOM'); +});