From 0cee335a62da130696187ae2e631a7645d2ff18b Mon Sep 17 00:00:00 2001 From: Stefano Valicchia Date: Mon, 24 Jul 2017 14:33:45 +0200 Subject: [PATCH 1/3] Added option to extract a field name from response --- addon/utils/collection-action.js | 29 ++++++++++++++++++++--------- addon/utils/member-action.js | 29 ++++++++++++++++++++--------- jsconfig.json | 1 + 3 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 jsconfig.json diff --git a/addon/utils/collection-action.js b/addon/utils/collection-action.js index 6912e679..8a4f965e 100644 --- a/addon/utils/collection-action.js +++ b/addon/utils/collection-action.js @@ -4,12 +4,23 @@ import { buildOperationUrl } from './build-url'; const { merge } = Ember; export default function instanceOp(options) { - return function(payload) { - let modelName = this.constructor.modelName || this.constructor.typeKey; - let requestType = (options.type || 'PUT').toUpperCase(); - let urlType = options.urlType || requestType; - let adapter = this.store.adapterFor(modelName); - let fullUrl = buildOperationUrl(this, options.path, urlType, false); - return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })); - }; -} + return function(payload) { + let modelName = this.constructor.modelName || this.constructor.typeKey; + let requestType = (options.type || 'PUT').toUpperCase(); + let urlType = options.urlType || requestType; + let adapter = this.store.adapterFor(modelName); + let fullUrl = buildOperationUrl(this, options.path, urlType, false); + let extract = options.extract; + return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { + if (extract) { + if (response && response[extract] !== null) { + return Ember.RSVP.response(response[extract]); + } else { + return Ember.RSVP.reject(new Error('Response malformed')); + } + } else { + return Ember.RSVP.response(response); + } + }); + }; +} \ No newline at end of file diff --git a/addon/utils/member-action.js b/addon/utils/member-action.js index 05ca171b..808eab2c 100644 --- a/addon/utils/member-action.js +++ b/addon/utils/member-action.js @@ -4,12 +4,23 @@ import { buildOperationUrl } from './build-url'; const { merge } = Ember; export default function instanceOp(options) { - return function(payload) { - let modelName = this.constructor.modelName || this.constructor.typeKey; - let requestType = (options.type || 'PUT').toUpperCase(); - let urlType = options.urlType || requestType; - let adapter = this.store.adapterFor(modelName); - let fullUrl = buildOperationUrl(this, options.path, urlType); - return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })); - }; -} + return function(payload) { + let modelName = this.constructor.modelName || this.constructor.typeKey; + let requestType = (options.type || 'PUT').toUpperCase(); + let urlType = options.urlType || requestType; + let adapter = this.store.adapterFor(modelName); + let fullUrl = buildOperationUrl(this, options.path, urlType); + let extract = options.extract; + return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { + if (extract) { + if (response && response[extract] !== null) { + return Ember.RSVP.response(response[extract]); + } else { + return Ember.RSVP.reject(new Error('Response malformed')); + } + } else { + return Ember.RSVP.response(response); + } + }); + }; +} \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 00000000..f408cac8 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1 @@ +{"compilerOptions":{"target":"es6","experimentalDecorators":true},"exclude":["node_modules","bower_components","tmp","vendor",".git","dist"]} \ No newline at end of file From 4fddeb040fdb8833c7e4fd1d34860b672b87bce4 Mon Sep 17 00:00:00 2001 From: Stefano Valicchia Date: Mon, 24 Jul 2017 14:48:09 +0200 Subject: [PATCH 2/3] fixed resolve --- addon/utils/collection-action.js | 4 ++-- addon/utils/member-action.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addon/utils/collection-action.js b/addon/utils/collection-action.js index 8a4f965e..405407ce 100644 --- a/addon/utils/collection-action.js +++ b/addon/utils/collection-action.js @@ -14,12 +14,12 @@ export default function instanceOp(options) { return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { if (extract) { if (response && response[extract] !== null) { - return Ember.RSVP.response(response[extract]); + return Ember.RSVP.resolve(response[extract]); } else { return Ember.RSVP.reject(new Error('Response malformed')); } } else { - return Ember.RSVP.response(response); + return Ember.RSVP.resolve(response); } }); }; diff --git a/addon/utils/member-action.js b/addon/utils/member-action.js index 808eab2c..f4dc4e3a 100644 --- a/addon/utils/member-action.js +++ b/addon/utils/member-action.js @@ -14,12 +14,12 @@ export default function instanceOp(options) { return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { if (extract) { if (response && response[extract] !== null) { - return Ember.RSVP.response(response[extract]); + return Ember.RSVP.resolve(response[extract]); } else { return Ember.RSVP.reject(new Error('Response malformed')); } } else { - return Ember.RSVP.response(response); + return Ember.RSVP.resolve(response); } }); }; From 086e3e3fc650df36f87c72ae3863d8e1f0abc4d2 Mon Sep 17 00:00:00 2001 From: Stefano Valicchia Date: Mon, 24 Jul 2017 15:05:26 +0200 Subject: [PATCH 3/3] Fixed extract code --- addon/utils/collection-action.js | 18 ++++++++++-------- addon/utils/member-action.js | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/addon/utils/collection-action.js b/addon/utils/collection-action.js index 405407ce..4c817d98 100644 --- a/addon/utils/collection-action.js +++ b/addon/utils/collection-action.js @@ -11,16 +11,18 @@ export default function instanceOp(options) { let adapter = this.store.adapterFor(modelName); let fullUrl = buildOperationUrl(this, options.path, urlType, false); let extract = options.extract; - return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { - if (extract) { - if (response && response[extract] !== null) { - return Ember.RSVP.resolve(response[extract]); + return new Ember.RSVP.Promise(function(resolve, reject) { + return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { + if (extract) { + if (response && response[extract] !== null) { + return resolve(response[extract]); + } else { + return reject(new Error('Response malformed')); + } } else { - return Ember.RSVP.reject(new Error('Response malformed')); + return resolve(response); } - } else { - return Ember.RSVP.resolve(response); - } + }).catch(reject); }); }; } \ No newline at end of file diff --git a/addon/utils/member-action.js b/addon/utils/member-action.js index f4dc4e3a..940e06d4 100644 --- a/addon/utils/member-action.js +++ b/addon/utils/member-action.js @@ -11,16 +11,18 @@ export default function instanceOp(options) { let adapter = this.store.adapterFor(modelName); let fullUrl = buildOperationUrl(this, options.path, urlType); let extract = options.extract; - return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { - if (extract) { - if (response && response[extract] !== null) { - return Ember.RSVP.resolve(response[extract]); + return new Ember.RSVP.Promise(function(resolve, reject) { + return adapter.ajax(fullUrl, requestType, merge(options.ajaxOptions || {}, { data: payload })).then(function(response) { + if (extract) { + if (response && response[extract] !== null) { + return resolve(response[extract]); + } else { + return reject(new Error('Response malformed')); + } } else { - return Ember.RSVP.reject(new Error('Response malformed')); + return resolve(response); } - } else { - return Ember.RSVP.resolve(response); - } + }).catch(reject); }); }; } \ No newline at end of file