From bd46b7fc283a0de2d93d548a2495b17be5c0fe7e Mon Sep 17 00:00:00 2001 From: chris-hamper Date: Fri, 17 Mar 2017 14:18:04 -0400 Subject: [PATCH 1/4] Account for recent changes to JSON API Drupal module Change API namespace from "api" to "jsonapi", don't add "_format=api_json" query parameter any more --- addon/adapter.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/addon/adapter.js b/addon/adapter.js index 7c45644..df31fc1 100644 --- a/addon/adapter.js +++ b/addon/adapter.js @@ -7,7 +7,7 @@ const { } = Ember; export default DS.JSONAPIAdapter.extend({ - namespace: 'api', + namespace: 'jsonapi', drupalMapper: service(), pathForType(modelName) { @@ -40,7 +40,6 @@ export default DS.JSONAPIAdapter.extend({ query = this.sortQueryParams(drupalQuery); } - query._format = 'api_json'; return this.ajax(url, 'GET', { data: query }); }, -}); \ No newline at end of file +}); From 7fc97e57a09ccf6486a35c0076de9f449de95ace Mon Sep 17 00:00:00 2001 From: chris-hamper Date: Mon, 27 Mar 2017 12:36:30 -0400 Subject: [PATCH 2/4] buildQuery() override no longer needed to add _format query param --- addon/adapter.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/addon/adapter.js b/addon/adapter.js index df31fc1..3f0e4d4 100644 --- a/addon/adapter.js +++ b/addon/adapter.js @@ -17,12 +17,6 @@ export default DS.JSONAPIAdapter.extend({ return entity + '/' + bundle; }, - buildQuery(snapshot) { - let query = this._super(...arguments); - query._format = 'api_json'; - return query; - }, - query(store, type, query) { let drupalQuery = { filter: {} }, queryFields = Object.keys(query), From c1b5a050b12573107c218722950f1c9514c78577 Mon Sep 17 00:00:00 2001 From: Chris Hamper Date: Mon, 10 Apr 2017 16:13:20 -0400 Subject: [PATCH 3/4] Add helper functions to drupal-mapper service --- addon/services/drupal-mapper.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/addon/services/drupal-mapper.js b/addon/services/drupal-mapper.js index 8cdab3e..d5c881f 100644 --- a/addon/services/drupal-mapper.js +++ b/addon/services/drupal-mapper.js @@ -32,5 +32,21 @@ export default Service.extend({ return DRUPAL_FIELD_PREFIX + underscore(fieldName); } return underscore(fieldName); + }, + + isMapped(modelName) { + return this.map.hasOwnProperty(modelName); + }, + + modelNameFor(entity, bundle) { + return Object.keys(this.map).find(modelName => { + const modelMap = this.map[modelName]; + modelMap.entity = modelMap.entity || 'node'; + + const bundleMatches = modelMap.bundle === bundle || modelMap.bundle === undefined && modelName === bundle; + if (bundleMatches && modelMap.entity === entity) { + return true; + } + }); } }); \ No newline at end of file From c8b4999653869281afb9daf714a70dc71ac5e815 Mon Sep 17 00:00:00 2001 From: Chris Hamper Date: Mon, 10 Apr 2017 16:20:27 -0400 Subject: [PATCH 4/4] Payload keys (JSON API types) should be mapped when possible --- addon/serializer.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/addon/serializer.js b/addon/serializer.js index 822dfb6..ec33555 100644 --- a/addon/serializer.js +++ b/addon/serializer.js @@ -27,14 +27,25 @@ const DrupalJSONAPISerializer = JSONAPISerializer.extend({ }, modelNameFromPayloadKey(key) { - let parts = key.split('--'); + const parts = key.split('--'); if (parts.length === 2) { - let bundle = parts[1]; - return singularize(normalizeModelName(bundle)); + const entity = parts[0]; + const bundle = parts[1]; + return this.get('drupalMapper').modelNameFor(entity, bundle) || singularize(normalizeModelName(bundle)); } return singularize(normalizeModelName(key)); }, + payloadKeyFromModelName(modelName) { + const drupalMapper = this.get('drupalMapper'); + if (drupalMapper.isMapped(modelName)) { + const entity = drupalMapper.entityFor(modelName); + const bundle = drupalMapper.bundleFor(modelName); + return `${entity}--${bundle}`; + } + return modelName; + }, + extractAttributes(modelClass, resourceHash) { let modelClassString = modelClass.toString(), modelName = modelClassString.split(':')[1],