From c6ced6607b54ff531008e74f8b6a12591a9fc87b Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 4 Nov 2015 04:20:27 +0000 Subject: [PATCH] Fixes #258. --- src/datastore/index.js | 1 + src/datastore/sync_methods/defineResource.js | 8 +++++++- .../datastore/sync_methods/defineResource.test.js | 13 +++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/datastore/index.js b/src/datastore/index.js index 4f0e9b66..4a297c86 100644 --- a/src/datastore/index.js +++ b/src/datastore/index.js @@ -94,6 +94,7 @@ defaultsPrototype.beforeUpdate = lifecycleNoopCb defaultsPrototype.beforeValidate = lifecycleNoopCb defaultsPrototype.bypassCache = false defaultsPrototype.cacheResponse = !!DSUtils.w +defaultsPrototype.csp = false defaultsPrototype.clearEmptyQueries = true defaultsPrototype.computed = {} defaultsPrototype.defaultAdapter = 'http' diff --git a/src/datastore/sync_methods/defineResource.js b/src/datastore/sync_methods/defineResource.js index a3f3f02d..38efc521 100644 --- a/src/datastore/sync_methods/defineResource.js +++ b/src/datastore/sync_methods/defineResource.js @@ -138,7 +138,11 @@ module.exports = function defineResource (definition) { var _class = def['class'] = DSUtils.pascalCase(def.name) try { if (typeof def.useClass === 'function') { - def[_class] = new Function('def', `return function ${_class}() { def.useClass.call(this); }`)(def) // eslint-disable-line + if (def.csp) { + def[_class] = function () { def.useClass.call(this) } + } else { + def[_class] = new Function('def', `return function ${_class}() { def.useClass.call(this); }`)(def) // eslint-disable-line + } def[_class].prototype = (function (proto) { function Ctor () { } @@ -146,6 +150,8 @@ module.exports = function defineResource (definition) { Ctor.prototype = proto return new Ctor() })(def.useClass.prototype) + } else if (def.csp) { + def[_class] = function () { } } else { def[_class] = new Function(`return function ${_class}() {}`)() // eslint-disable-line } diff --git a/test/both/datastore/sync_methods/defineResource.test.js b/test/both/datastore/sync_methods/defineResource.test.js index 4b94f5d2..bf7aee6a 100644 --- a/test/both/datastore/sync_methods/defineResource.test.js +++ b/test/both/datastore/sync_methods/defineResource.test.js @@ -290,4 +290,17 @@ describe('DS#defineResource', function () { assert.equal(foo.bar.id, 1); assert.isTrue(wasItActivated); }); + it('should work with csp set to true', function () { + var store = new JSData.DS({ + csp: true + }); + var User = store.defineResource({ + name: 'user' + }); + var user = User.createInstance({ name: 'John' }); + assert.isTrue(user instanceof User[User.class]); + assert.equal(User[User.class].name, ''); + + assert.equal(Post[Post.class].name, 'Post'); + }); });