From 13d529cf7494a86a388370c112cd9d1fdbe5ae8b Mon Sep 17 00:00:00 2001 From: Kevin Ansfield Date: Tue, 17 Dec 2019 20:42:42 +0000 Subject: [PATCH] Added hacky method for accessing `meta` value of single-record requests no issue - Ember Data does not support accessing meta data included in the response to single-record requests such as save/delete - approach to allow it taken from https://github.com/emberjs/data/pull/4077#issuecomment-200780097 --- app/models/base.js | 12 ++++++++++++ app/models/user.js | 4 ++-- app/serializers/application.js | 10 ++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 app/models/base.js diff --git a/app/models/base.js b/app/models/base.js new file mode 100644 index 00000000000..3cdf36f5484 --- /dev/null +++ b/app/models/base.js @@ -0,0 +1,12 @@ +import Model from 'ember-data/model'; + +export default Model.extend({ + // this is a hack that gives us access to meta data in single resource responses + // allows similar response.get('_meta') as with multi-resource responses but can + // suffer from race conditions + // TODO: review once the record links and meta RFC lands + // https://github.com/emberjs/rfcs/blob/master/text/0332-ember-data-record-links-and-meta.md + get _meta() { + return this._internalModel.type.___meta; + } +}); diff --git a/app/models/user.js b/app/models/user.js index 5865a55310f..b6060011cf2 100644 --- a/app/models/user.js +++ b/app/models/user.js @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import Model from 'ember-data/model'; +import BaseModel from './base'; import ValidationEngine from 'ghost-admin/mixins/validation-engine'; import attr from 'ember-data/attr'; import {computed} from '@ember/object'; @@ -8,7 +8,7 @@ import {hasMany} from 'ember-data/relationships'; import {inject as service} from '@ember/service'; import {task} from 'ember-concurrency'; -export default Model.extend(ValidationEngine, { +export default BaseModel.extend(ValidationEngine, { validationType: 'user', name: attr('string'), diff --git a/app/serializers/application.js b/app/serializers/application.js index f307929c676..300b181f14b 100644 --- a/app/serializers/application.js +++ b/app/serializers/application.js @@ -3,6 +3,16 @@ import {camelize, decamelize, underscore} from '@ember/string'; import {pluralize} from 'ember-inflector'; export default RESTSerializer.extend({ + // hacky method for getting access to meta data for single-resource responses + // https://github.com/emberjs/data/pull/4077#issuecomment-200780097 + // TODO: review once the record links and meta RFC lands + // https://github.com/emberjs/rfcs/blob/master/text/0332-ember-data-record-links-and-meta.md + extractMeta(store, typeClass) { + let meta = this._super(...arguments); + typeClass.___meta = meta; + return meta; + }, + serialize(/*snapshot, options*/) { let json = this._super(...arguments);