New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

waterline

Package Overview
Dependencies
Maintainers
2
Versions
165
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

waterline - npm Package Compare versions

Comparing version 0.9.6 to 0.9.7

lib/waterline/query/validate.js

8

lib/waterline/core/transformations.js

@@ -98,3 +98,5 @@ /**

obj[self._transformations[property]] = _.clone(obj[property]);
delete obj[property];
if(self._transformations[property] !== property) {
delete obj[property];
}

@@ -110,3 +112,5 @@ return recursiveParse(obj[self._transformations[property]]);

obj[self._transformations[property]] = obj[property];
delete obj[property];
if(self._transformations[property] !== property) {
delete obj[property];
}
}

@@ -113,0 +117,0 @@ });

@@ -111,5 +111,2 @@ /**

// Ignore Text type validation
if(curValidation.type === 'text') return cb();
// If Boolean and required manually check

@@ -116,0 +113,0 @@ if(curValidation.required && curValidation.type === 'boolean') {

@@ -95,2 +95,24 @@ /**

/**
* Model.validate()
*
* Takes the currently set attributes and validates the model
* Shorthand for Model.validate({ attributes }, cb)
*
* @param {Function} callback
* @return callback - (err)
*/
validate: function(cb) {
var self = this;
// Collect current values
var values = this.toObject();
context.validate( values, function(err) {
if(err) return cb(err);
cb();
})
},
/**
* Model.save()

@@ -189,2 +211,2 @@ *

return Model.extend(prototype);
};
};

@@ -55,3 +55,3 @@ /**

for(var key in self.attributes) {
if(!record[key] && record[key] !== false && self.attributes[key].hasOwnProperty('defaultsTo')) {
if(record[key] === undefined && self.attributes[key].hasOwnProperty('defaultsTo')) {
record[key] = _.clone(self.attributes[key].defaultsTo);

@@ -66,40 +66,10 @@ }

// Run Before Validate Lifecycle Callbacks
// Run Validation with Validation LifeCycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(record, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.beforeValidation, runner, function(err) {
self.validate(record, function(err) {
if(err) return cb(err);
cb();
});
})
},
// Run Validation
function(cb) {
self._validator.validate(record, function(err) {
if(err) return cb(err);
cb();
});
},
// Run After Validate Lifecycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(record, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.afterValidation, runner, function(err) {
if(err) return cb(err);
cb();
});
},
// Before Create Lifecycle Callback

@@ -244,3 +214,3 @@ function(cb) {

for(var key in self.attributes) {
if(!record[key] && record[key] !== false && self.attributes[key].hasOwnProperty('defaultsTo')) {
if(record[key] === undefined && self.attributes[key].hasOwnProperty('defaultsTo')) {
record[key] = _.clone(self.attributes[key].defaultsTo);

@@ -255,40 +225,10 @@ }

// Run Before Validate Lifecycle Callbacks
// Run Validation with Validation LifeCycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(record, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.beforeValidation, runner, function(err) {
self.validate(record, function(err) {
if(err) return cb(err);
cb();
});
})
},
// Run Validation
function(cb) {
self._validator.validate(record, function(err) {
if(err) return cb(err);
cb();
});
},
// Run After Validate Lifecycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(record, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.afterValidation, runner, function(err) {
if(err) return cb(err);
cb();
});
},
// Before Create Lifecycle Callback

@@ -295,0 +235,0 @@ function(cb) {

@@ -50,3 +50,3 @@ /**

for(var key in this.attributes) {
if(!values[key] && values[key] !== false && this.attributes[key].hasOwnProperty('defaultsTo')) {
if(values[key] === undefined && this.attributes[key].hasOwnProperty('defaultsTo')) {
values[key] = _.clone(this.attributes[key].defaultsTo);

@@ -61,40 +61,10 @@ }

// Run Before Validate Lifecycle Callbacks
// Run Validation with Validation LifeCycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(values, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.beforeValidation, runner, function(err) {
self.validate(values, function(err) {
if(err) return cb(err);
cb();
});
},
})
},
// Run Validation
function(cb) {
self._validator.validate(values, function(err) {
if(err) return cb(err);
cb();
});
},
// Run After Validate Lifecycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(values, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.afterValidation, runner, function(err) {
if(err) return cb(err);
cb();
});
},
// Before Create Lifecycle Callback

@@ -101,0 +71,0 @@ function(cb) {

@@ -8,3 +8,2 @@ /**

normalize = require('../utils/normalize'),
_ = require('underscore'),
Deferred = require('./deferred'),

@@ -67,40 +66,10 @@ async = require('async'),

// Run Before Validate Lifecycle Callbacks
// Run Validation with Validation LifeCycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(values, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.beforeValidation, runner, function(err) {
self.validate(values, function(err) {
if(err) return cb(err);
cb();
});
})
},
// Run Validation
function(cb) {
self._validator.validate(values, function(err) {
if(err) return cb(err);
cb();
});
},
// Run After Validate Lifecycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(values, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.afterValidation, runner, function(err) {
if(err) return cb(err);
cb();
});
},
// Before Create Lifecycle Callback

@@ -199,40 +168,10 @@ function(cb) {

// Run Before Validate Lifecycle Callbacks
// Run Validation with Validation LifeCycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(newValues, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.beforeValidation, runner, function(err) {
self.validate(newValues, true, function(err) {
if(err) return cb(err);
cb();
});
})
},
// Run Validation
function(cb) {
self._validator.validate(newValues, true, function(err) {
if(err) return cb(err);
cb();
});
},
// Run After Validate Lifecycle Callbacks
function(cb) {
var runner = function(item, callback) {
item(newValues, function(err) {
if(err) return callback(err);
callback();
});
};
async.eachSeries(self._callbacks.afterValidation, runner, function(err) {
if(err) return cb(err);
cb();
});
},
// Before Update Lifecycle Callback

@@ -239,0 +178,0 @@ function(cb) {

@@ -30,7 +30,26 @@ /**

// Check if criteria is an integer or string and normalize criteria
// to object, using the id field. If something besides
// an id field is being used as a primary key a where criteria
// should be used and not an integer.
// to object, using the specified primary key field.
if(_.isNumber(criteria) || _.isString(criteria)) {
criteria = { id: criteria };
// Default to id as primary key
var pk = 'id';
// If not autoPK is used, attempt to find a primary key
if (!self.autoPK) {
// Check which attribute is use as primary key
for(var key in self.attributes) {
if(!self.attributes[key].hasOwnProperty('primaryKey')) continue;
// If no custom columnName was set, use the key name
pk = key;
break;
}
}
// Temporary store the given criteria
var pkCriteria = _.clone(criteria);
// Make the criteria object, with the primary key
criteria = {};
criteria[pk] = pkCriteria;
}

@@ -37,0 +56,0 @@

@@ -56,2 +56,3 @@ /**

Query.prototype,
require('./validate'),
require('./ddl'),

@@ -58,0 +59,0 @@ require('./dql'),

{
"name": "waterline",
"description": "An ORM for Node.js and the Sails framework",
"version": "0.9.6",
"version": "0.9.7",
"contributors": [

@@ -20,6 +20,6 @@ {

"dependencies": {
"underscore": "1.4.4",
"async": "0.2.9",
"anchor": "~0.9.5",
"q": "0.9.4"
"underscore": "~1.5.2",
"async": "~0.2.9",
"anchor": "~0.9.6",
"q": "~0.9.7"
},

@@ -26,0 +26,0 @@ "devDependencies": {

@@ -173,9 +173,8 @@ ![image_squidhome@2x.png](http://i.imgur.com/7rMxw.png)

beforeCreate: function(values, cb) {
var self = this;
// an example encrypt function defined somewhere
encrypt(this.password, function(err, password) {
encrypt(values.password, function(err, password) {
if(err) return cb(err);
self.password = password;
values.password = password;
cb();

@@ -182,0 +181,0 @@ });

@@ -55,25 +55,54 @@ var Transformer = require('../../../lib/waterline/core/transformations'),

describe('serialize', function() {
var transformer;
describe('with different names', function() {
var transformer;
before(function() {
var attributes = {
name: 'string',
username: {
columnName: 'login'
}
};
before(function() {
var attributes = {
name: 'string',
username: {
columnName: 'login'
}
};
transformer = new Transformer(attributes);
});
transformer = new Transformer(attributes);
});
it('should change username key to login', function() {
var values = transformer.serialize({ username: 'foo' });
assert(values.login);
assert(values.login === 'foo');
it('should change username key to login', function() {
var values = transformer.serialize({ username: 'foo' });
assert(values.login);
assert(values.login === 'foo');
});
it('should work recursively', function() {
var values = transformer.serialize({ where: { user: { username: 'foo' }}});
assert(values.where.user.login);
assert(values.where.user.login === 'foo');
});
});
it('should work recursively', function() {
var values = transformer.serialize({ where: { user: { username: 'foo' }}});
assert(values.where.user.login);
assert(values.where.user.login === 'foo');
describe('with the same names', function() {
var transformer;
before(function() {
var attributes = {
name: 'string',
username: {
columnName: 'username'
}
};
transformer = new Transformer(attributes);
});
it('should keep the username key', function() {
var values = transformer.serialize({ username: 'foo' });
assert(values.username);
assert(values.username === 'foo');
});
it('should work recursively', function() {
var values = transformer.serialize({ where: { user: { username: 'foo' }}});
assert(values.where.user.username);
assert(values.where.user.username === 'foo');
});
});

@@ -80,0 +109,0 @@ });

@@ -7,60 +7,152 @@ var Collection = require('../../../lib/waterline/collection'),

describe('.findOne()', function() {
var query;
before(function(done) {
describe('with autoPK', function() {
var query;
// Extend for testing purposes
var Model = Collection.extend({
identity: 'user',
adapter: 'foo',
attributes: {
name: {
type: 'string',
defaultsTo: 'Foo Bar'
},
doSomething: function() {}
}
before(function(done) {
// Extend for testing purposes
var Model = Collection.extend({
identity: 'user',
adapter: 'foo',
attributes: {
name: {
type: 'string',
defaultsTo: 'Foo Bar'
},
doSomething: function() {}
}
});
// Fixture Adapter Def
var adapterDef = { find: function(col, criteria, cb) { return cb(null, [criteria]); }};
new Model({ adapters: { foo: adapterDef }}, function(err, coll) {
if(err) done(err);
query = coll;
done();
});
});
// Fixture Adapter Def
var adapterDef = { find: function(col, criteria, cb) { return cb(null, [criteria]); }};
new Model({ adapters: { foo: adapterDef }}, function(err, coll) {
if(err) done(err);
query = coll;
done();
it('should return an instance of Model', function(done) {
query.findOne({ name: 'foo' }, function(err, values) {
assert(typeof values.doSomething === 'function');
done();
});
});
});
it('should return an instance of Model', function(done) {
query.findOne({ name: 'foo' }, function(err, values) {
assert(typeof values.doSomething === 'function');
done();
it('should allow an integer to be passed in as criteria', function(done) {
query.findOne(1, function(err, values) {
assert(!err);
assert(values.where.id === 1);
done();
});
});
});
it('should allow an integer to be passed in as criteria', function(done) {
query.findOne(1, function(err, values) {
assert(!err);
assert(values.where.id === 1);
done();
it('should allow a query to be built using deferreds', function(done) {
query.findOne()
.where({ name: 'Foo Bar' })
.where({ id: { '>': 1 } })
.exec(function(err, results) {
assert(!err);
assert(!Array.isArray(results));
assert(Object.keys(results.where).length === 2);
assert(results.where.name == 'Foo Bar');
assert(results.where.id['>'] == 1);
done();
});
});
});
it('should allow a query to be built using deferreds', function(done) {
query.findOne()
.where({ name: 'Foo Bar' })
.where({ id: { '>': 1 } })
.exec(function(err, results) {
assert(!err);
assert(!Array.isArray(results));
describe('with custom PK', function() {
assert(Object.keys(results.where).length === 2);
assert(results.where.name == 'Foo Bar');
assert(results.where.id['>'] == 1);
describe('with no columnName set', function() {
var query;
done();
before(function(done) {
// Extend for testing purposes
var Model = Collection.extend({
identity: 'user',
adapter: 'foo',
autoPK: false,
attributes: {
name: {
type: 'string',
defaultsTo: 'Foo Bar'
},
myPk: {
type: 'integer',
primaryKey: true,
defaultsTo: 1
}
}
});
// Fixture Adapter Def
var adapterDef = { find: function(col, criteria, cb) { return cb(null, [criteria]); }};
new Model({ adapters: { foo: adapterDef }}, function(err, coll) {
if(err) done(err);
query = coll;
done();
});
});
it('should use the custom primary key when a single value is passed in', function(done) {
query.findOne(1, function(err, values) {
assert(!err);
assert(values.where.myPk === 1);
done();
});
});
});
describe('with custom columnName set', function() {
var query;
before(function(done) {
// Extend for testing purposes
var Model = Collection.extend({
identity: 'user',
adapter: 'foo',
autoPK: false,
attributes: {
name: {
type: 'string',
defaultsTo: 'Foo Bar'
},
myPk: {
type: 'integer',
primaryKey: true,
columnName: 'pkColumn',
defaultsTo: 1
}
}
});
// Fixture Adapter Def
var adapterDef = { find: function(col, criteria, cb) { return cb(null, [criteria]); }};
new Model({ adapters: { foo: adapterDef }}, function(err, coll) {
if(err) done(err);
query = coll;
done();
});
});
it('should use the custom primary key when a single value is passed in', function(done) {
query.findOne(1, function(err, values) {
assert(!err);
assert(values.where.pkColumn === 1);
done();
});
});
});
});
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc