diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 0000000..5e9462c --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1,3 @@ +{ + "ignore_dirs": ["tmp"] +} diff --git a/addon/adapters/sails-base.js b/addon/adapters/sails-base.js index 0eeee49..0d34191 100644 --- a/addon/adapters/sails-base.js +++ b/addon/adapters/sails-base.js @@ -107,10 +107,7 @@ export default DS.RESTAdapter.extend(Ember.Evented, WithLoggerMixin, { this.debug(' → request:', options.data); this.debug(' ← response:', response); if (this.isErrorObject(response)) { - if (response.errors) { - return RSVP.reject(new DS.InvalidError(this.formatError(response))); - } - return RSVP.reject(response); + return RSVP.reject(new DS.InvalidError(this.formatError(response))); } return response; })) @@ -149,7 +146,7 @@ export default DS.RESTAdapter.extend(Ember.Evented, WithLoggerMixin, { data = jqXHR.responseText; } - if (data.errors) { + if (this.isErrorObject(data)) { this.error('error returned from Sails', data); return new DS.InvalidError(this.formatError(data)); } diff --git a/addon/adapters/sails-rest.js b/addon/adapters/sails-rest.js index 74792bb..1bb45be 100644 --- a/addon/adapters/sails-rest.js +++ b/addon/adapters/sails-rest.js @@ -20,26 +20,30 @@ export default SailsBaseAdapter.extend({ * @property csrfTokenUrl * @type String */ - csrfTokenUrl: computed('host', 'namespace', 'csrfTokenPath', function (key, value) { - var csrfTokenUrl, csrfTokenPath; - if (arguments.length > 1) { - this._csrfTokenUrl = csrfTokenUrl = value; - } - else if (this._csrfTokenUrl !== undefined) { - csrfTokenUrl = this._csrfTokenUrl; - } - else { - csrfTokenPath = this.get('csrfTokenPath'); - csrfTokenUrl = Ember.A([ - this.get('host'), - csrfTokenPath.charAt(0) === '/' ? null : this.get('namespace'), - csrfTokenPath.replace(/^\//, '') - ]).filter(Boolean).join('/'); - if (!/^(https?:)?\/\//.test(csrfTokenUrl)) { - csrfTokenUrl = '/' + csrfTokenUrl; + csrfTokenUrl: computed('host', 'namespace', 'csrfTokenPath',{ + get: function(key) { + var csrfTokenUrl, csrfTokenPath; + if (this._csrfTokenUrl !== undefined) { + csrfTokenUrl = this._csrfTokenUrl; } + else { + csrfTokenPath = this.get('csrfTokenPath'); + csrfTokenUrl = Ember.A([ + this.get('host'), + csrfTokenPath.charAt(0) === '/' ? null : this.get('namespace'), + csrfTokenPath.replace(/^\//, '') + ]).filter(Boolean).join('/'); + if (!/^(https?:)?\/\//.test(csrfTokenUrl)) { + csrfTokenUrl = '/' + csrfTokenUrl; + } + } + return csrfTokenUrl; + }, + set: function(key, value) { + this._csrfTokenUrl = value; + return this._csrfTokenUrl; } - return csrfTokenUrl; + }), diff --git a/addon/adapters/sails-socket.js b/addon/adapters/sails-socket.js index caed9d1..90f50ed 100644 --- a/addon/adapters/sails-socket.js +++ b/addon/adapters/sails-socket.js @@ -227,7 +227,7 @@ export default SailsBaseAdapter.extend({ payload[k] = Object.keys(data[k]); this._listenToSocket(k); } - self.debug(fmt('asking the API to subscribe to some records of type %@', Ember.keys(data).join(', '))); + self.debug(fmt('asking the API to subscribe to some records of type %@', Object.keys(data).join(', '))); // ask the API to subscribe to those records this.fetchCSRFToken().then(function () { self.checkCSRF(payload); diff --git a/addon/serializers/sails.js b/addon/serializers/sails.js index 36fa9ec..66f719b 100644 --- a/addon/serializers/sails.js +++ b/addon/serializers/sails.js @@ -23,6 +23,9 @@ function blueprintsWrapMethod(method) { * @extends DS.RESTSerializer */ var SailsSerializer = DS.RESTSerializer.extend(WithLogger, { + + isNewSerializerAPI: true, + /** * The config of the addon will be set here by the initializer * @since 0.0.17 @@ -44,7 +47,7 @@ var SailsSerializer = DS.RESTSerializer.extend(WithLogger, { * @method extractArray * @inheritDoc */ - extractArray: blueprintsWrapMethod(function (store, primaryType, payload) { + normalizeArrayResponse: blueprintsWrapMethod(function (store, primaryType, payload) { var newPayload = {}; newPayload[pluralize(primaryType.modelName)] = payload; return this._super(store, primaryType, newPayload); @@ -55,7 +58,7 @@ var SailsSerializer = DS.RESTSerializer.extend(WithLogger, { * @method extractSingle * @inheritDoc */ - extractSingle: blueprintsWrapMethod(function (store, primaryType, payload, recordId) { + normalizeSingleResponse: blueprintsWrapMethod(function (store, primaryType, payload, recordId) { var newPayload; if (payload === null) { return this._super.apply(this, arguments); @@ -70,7 +73,7 @@ var SailsSerializer = DS.RESTSerializer.extend(WithLogger, { * @method extractDeleteRecord * @inheritDoc */ - extractDeleteRecord: blueprintsWrapMethod(function (store, type, payload, id, requestType) { + normalizeDeleteRecordResponse: blueprintsWrapMethod(function (store, type, payload, id, requestType) { return this._super(store, type, null, id, requestType); }), @@ -81,7 +84,7 @@ var SailsSerializer = DS.RESTSerializer.extend(WithLogger, { */ serializeIntoHash: blueprintsWrapMethod(function (data, type, record, options) { var json; - if (Ember.keys(data).length > 0) { + if (Object.keys(data).length > 0) { this.error( fmt('trying to serialize multiple records in one hash for type %@', type.modelName), data @@ -108,7 +111,7 @@ var SailsSerializer = DS.RESTSerializer.extend(WithLogger, { * @method extract * @inheritDoc */ - extract: function (store, type/*, payload, id, requestType*/) { + normalizeResponse: function (store, type/*, payload, id, requestType*/) { var adapter, modelName, isUsingSocketAdapter; // this is the only place we have access to the store, so that we can get the adapter and check // if it is an instance of sails socket adapter, and so register for events if necessary on that @@ -118,7 +121,7 @@ var SailsSerializer = DS.RESTSerializer.extend(WithLogger, { } modelName = type.modelName; if (this._modelsUsingSailsSocketAdapter[modelName] === undefined) { - adapter = store.adapterFor(type); + adapter = store.adapterFor(modelName); this._modelsUsingSailsSocketAdapter[modelName] = isUsingSocketAdapter = adapter instanceof SailsSocketAdapter; if (isUsingSocketAdapter) { adapter._listenToSocket(modelName); diff --git a/bower.json b/bower.json index b14d7b0..63bd015 100644 --- a/bower.json +++ b/bower.json @@ -1,16 +1,16 @@ { "name": "ember-data-sails", "dependencies": { - "ember": "1.10.0", + "ember": "1.13.7", "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", "ember-cli-test-loader": "ember-cli-test-loader#0.1.3", - "ember-data": "1.0.0-beta.16", - "ember-load-initializers": "ember-cli/ember-load-initializers#0.0.2", - "ember-qunit": "0.2.8", + "ember-data": "1.13.8", + "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.5", + "ember-qunit": "0.4.9", "ember-qunit-notifications": "0.0.7", - "ember-resolver": "~0.1.14", - "jquery": "^1.11.1", - "loader.js": "ember-cli/loader.js#3.2.0", - "qunit": "~1.17.1" + "ember-resolver": "~0.1.18", + "jquery": "^1.11.3", + "loader.js": "ember-cli/loader.js#3.2.1", + "qunit": "~1.18.0" } } diff --git a/config/ember-try.js b/config/ember-try.js new file mode 100644 index 0000000..83dab0f --- /dev/null +++ b/config/ember-try.js @@ -0,0 +1,35 @@ +module.exports = { + scenarios: [ + { + name: 'default', + dependencies: { } + }, + { + name: 'ember-release', + dependencies: { + 'ember': 'components/ember#release' + }, + resolutions: { + 'ember': 'release' + } + }, + { + name: 'ember-beta', + dependencies: { + 'ember': 'components/ember#beta' + }, + resolutions: { + 'ember': 'beta' + } + }, + { + name: 'ember-canary', + dependencies: { + 'ember': 'components/ember#canary' + }, + resolutions: { + 'ember': 'canary' + } + } + ] +}; diff --git a/ember-cli-build.js b/ember-cli-build.js new file mode 100644 index 0000000..d37d64c --- /dev/null +++ b/ember-cli-build.js @@ -0,0 +1,17 @@ +/* global require, module */ +var EmberApp = require('ember-cli/lib/broccoli/ember-addon'); + +module.exports = function(defaults) { + var app = new EmberApp(defaults, { + // Add options here + }); + + /* + This build file specifes the options for the dummy test app of this + addon, located in `/tests/dummy` + This build file does *not* influence how the addon or the app using it + behave. You most likely want to be modifying `./index.js` or app's build file + */ + + return app.toTree(); +}; diff --git a/package.json b/package.json index 6592a5f..36eabc0 100644 --- a/package.json +++ b/package.json @@ -18,19 +18,21 @@ "author": "Huafu Gandon ", "license": "MIT", "devDependencies": { - "broccoli-asset-rev": "^2.0.2", - "ember-cli": "0.2.1", - "ember-cli-app-version": "0.3.3", - "ember-cli-babel": "^4.0.0", + "broccoli-asset-rev": "^2.1.2", + "ember-cli": "1.13.8", + "ember-cli-app-version": "0.5.0", "ember-cli-content-security-policy": "0.4.0", - "ember-cli-dependency-checker": "0.0.8", - "ember-cli-htmlbars": "0.7.4", - "ember-cli-ic-ajax": "0.1.1", - "ember-cli-inject-live-reload": "^1.3.0", - "ember-cli-qunit": "0.3.9", - "ember-cli-uglify": "1.0.1", - "ember-data": "1.0.0-beta.16", - "ember-export-application-global": "^1.0.2" + "ember-cli-dependency-checker": "^1.0.1", + "ember-cli-htmlbars": "0.7.9", + "ember-cli-ic-ajax": "0.2.1", + "ember-cli-inject-live-reload": "^1.3.1", + "ember-cli-qunit": "^1.0.0", + "ember-cli-uglify": "^1.2.0", + "ember-data": "1.13.8", + "ember-disable-proxy-controllers": "^1.0.0", + "ember-export-application-global": "^1.0.3", + "ember-disable-prototype-extensions": "^1.0.0", + "ember-try": "0.0.6" }, "keywords": [ "ember-addon",