Mongoose order/limit/offset and more
- Lazy dependencies loading - Travis mongoose inetration - All tests should run on travis - Model.count for mongoose
This commit is contained in:
parent
393db580c4
commit
643c2879fe
|
@ -6,3 +6,4 @@ before_install: git submodule init && git submodule --quiet update
|
||||||
before_script:
|
before_script:
|
||||||
- "mysql -e 'create database myapp_test;'"
|
- "mysql -e 'create database myapp_test;'"
|
||||||
- "psql -c 'create database myapp_test;' -U postgres"
|
- "psql -c 'create database myapp_test;' -U postgres"
|
||||||
|
- mongo mydb_test --eval 'db.addUser("travis", "test");'
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
|
var safeRequire = require('../utils').safeRequire;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies
|
* Module dependencies
|
||||||
*/
|
*/
|
||||||
var mongoose = require('mongoose');
|
var mongoose = safeRequire('mongoose');
|
||||||
|
|
||||||
exports.initialize = function initializeSchema(schema, callback) {
|
exports.initialize = function initializeSchema(schema, callback) {
|
||||||
|
if (!mongoose) return;
|
||||||
|
|
||||||
if (!schema.settings.url) {
|
if (!schema.settings.url) {
|
||||||
var url = schema.settings.host || 'localhost';
|
var url = schema.settings.host || 'localhost';
|
||||||
if (schema.settings.port) url += ':' + schema.settings.port;
|
if (schema.settings.port) url += ':' + schema.settings.port;
|
||||||
|
@ -113,36 +117,27 @@ MongooseAdapter.prototype.all = function all(model, filter, callback) {
|
||||||
if (!filter) {
|
if (!filter) {
|
||||||
filter = {};
|
filter = {};
|
||||||
}
|
}
|
||||||
this._models[model].find(typeof filter.where === 'function' ? {} : filter.where, function (err, data) {
|
var query = this._models[model].find({});
|
||||||
|
if (filter.where) {
|
||||||
|
Object.keys(filter.where).forEach(function (k) {
|
||||||
|
query.where(k, filter.where[k]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (filter.order) {
|
||||||
|
query.asc(filter.order);
|
||||||
|
}
|
||||||
|
if (filter.limit) {
|
||||||
|
query.limit(filter.limit);
|
||||||
|
}
|
||||||
|
if (filter.skip) {
|
||||||
|
query.skip(filter.skip);
|
||||||
|
}
|
||||||
|
query.exec(function (err, data) {
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
callback(null, data);
|
callback(null, data);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function applyFilter(filter) {
|
|
||||||
if (typeof filter === 'function') {
|
|
||||||
return filter;
|
|
||||||
}
|
|
||||||
var keys = Object.keys(filter);
|
|
||||||
return function (obj) {
|
|
||||||
var pass = true;
|
|
||||||
keys.forEach(function (key) {
|
|
||||||
if (!test(filter[key], obj[key])) {
|
|
||||||
pass = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return pass;
|
|
||||||
}
|
|
||||||
|
|
||||||
function test(example, value) {
|
|
||||||
if (typeof value === 'string' && example && example.constructor.name === 'RegExp') {
|
|
||||||
return value.match(example);
|
|
||||||
}
|
|
||||||
// not strict equality
|
|
||||||
return example == value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MongooseAdapter.prototype.destroyAll = function destroyAll(model, callback) {
|
MongooseAdapter.prototype.destroyAll = function destroyAll(model, callback) {
|
||||||
var wait = 0;
|
var wait = 0;
|
||||||
this._models[model].find(function (err, data) {
|
this._models[model].find(function (err, data) {
|
||||||
|
@ -163,8 +158,8 @@ MongooseAdapter.prototype.destroyAll = function destroyAll(model, callback) {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MongooseAdapter.prototype.count = function count(model, callback) {
|
MongooseAdapter.prototype.count = function count(model, callback, where) {
|
||||||
this._models[model].count(callback);
|
this._models[model].count(where || {}, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
MongooseAdapter.prototype.updateAttributes = function updateAttrs(model, id, data, cb) {
|
MongooseAdapter.prototype.updateAttributes = function updateAttrs(model, id, data, cb) {
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
|
var safeRequire = require('../utils').safeRequire;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies
|
* Module dependencies
|
||||||
*/
|
*/
|
||||||
var mysql = require('mysql');
|
var mysql = safeRequire('mysql');
|
||||||
|
|
||||||
exports.initialize = function initializeSchema(schema, callback) {
|
exports.initialize = function initializeSchema(schema, callback) {
|
||||||
|
if (!mysql) return;
|
||||||
|
|
||||||
var s = schema.settings;
|
var s = schema.settings;
|
||||||
schema.client = mysql.createClient({
|
schema.client = mysql.createClient({
|
||||||
host: s.host || 'localhost',
|
host: s.host || 'localhost',
|
||||||
|
|
|
@ -299,7 +299,6 @@ function applyFilter(filter) {
|
||||||
if (typeof value === 'object' && value.constructor.name === 'Date' && typeof example === 'object' && example.constructor.name === 'Date') {
|
if (typeof value === 'object' && value.constructor.name === 'Date' && typeof example === 'object' && example.constructor.name === 'Date') {
|
||||||
return example.toString() === value.toString();
|
return example.toString() === value.toString();
|
||||||
}
|
}
|
||||||
console.log(example,'==', value, example == value);
|
|
||||||
// not strict equality
|
// not strict equality
|
||||||
return example == value;
|
return example == value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
|
var safeRequire = require('../utils').safeRequire;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies
|
* Module dependencies
|
||||||
*/
|
*/
|
||||||
var Client = require('pg').Client;
|
var pg = safeRequire('pg');
|
||||||
var Hash = require('hashish');
|
var Hash = require('hashish');
|
||||||
|
|
||||||
exports.initialize = function initializeSchema(schema, callback) {
|
exports.initialize = function initializeSchema(schema, callback) {
|
||||||
|
if (!pg) return;
|
||||||
|
|
||||||
|
var Client = pg.Client;
|
||||||
var s = schema.settings;
|
var s = schema.settings;
|
||||||
schema.client = new Client(s.url ? s.url : {
|
schema.client = new Client(s.url ? s.url : {
|
||||||
host: s.host || 'localhost',
|
host: s.host || 'localhost',
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
|
var safeRequire = require('../utils').safeRequire;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies
|
* Module dependencies
|
||||||
*/
|
*/
|
||||||
var redis = require('redis');
|
var redis = safeRequire('redis');
|
||||||
|
|
||||||
exports.initialize = function initializeSchema(schema, callback) {
|
exports.initialize = function initializeSchema(schema, callback) {
|
||||||
|
if (!redis) return;
|
||||||
|
|
||||||
schema.client = redis.createClient(
|
schema.client = redis.createClient(
|
||||||
schema.settings.port,
|
schema.settings.port,
|
||||||
schema.settings.host,
|
schema.settings.host,
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
var Sequelize = require('sequelize');
|
var safeRequire = require('../utils').safeRequire;
|
||||||
|
|
||||||
|
var Sequelize = safeRequire('sequelize');
|
||||||
|
|
||||||
exports.initialize = function initializeSchema(schema, callback) {
|
exports.initialize = function initializeSchema(schema, callback) {
|
||||||
|
if (!Sequelize) return;
|
||||||
|
|
||||||
schema.adapter = new SequelizeAdapter(schema);
|
schema.adapter = new SequelizeAdapter(schema);
|
||||||
process.nextTick(callback);
|
process.nextTick(callback);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
|
var safeRequire = require('../utils').safeRequire;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies
|
* Module dependencies
|
||||||
*/
|
*/
|
||||||
var sqlite3 = require('sqlite3').verbose();
|
var sqlite3 = safeRequire('sqlite3');
|
||||||
|
|
||||||
exports.initialize = function initializeSchema(schema, callback) {
|
exports.initialize = function initializeSchema(schema, callback) {
|
||||||
|
if (!sqlite3) return;
|
||||||
var s = schema.settings;
|
var s = schema.settings;
|
||||||
var db = new sqlite3.Database(s.database);
|
var Database = sqlite3.verbose().Database;
|
||||||
|
var db = new Database(s.database);
|
||||||
|
|
||||||
schema.client = db;
|
schema.client = db;
|
||||||
|
|
||||||
|
|
12
package.json
12
package.json
|
@ -1,28 +1,28 @@
|
||||||
{
|
{
|
||||||
"name": "jugglingdb",
|
"name": "jugglingdb",
|
||||||
"author": "Anatoliy Chakkaev",
|
"author": "Anatoliy Chakkaev",
|
||||||
"description": "ORM for every database: redis, mysql, neo4j, mongodb, postgres",
|
"description": "ORM for every database: redis, mysql, neo4j, mongodb, postgres, sqlite",
|
||||||
"version": "0.0.8",
|
"version": "0.0.8",
|
||||||
"repository": {
|
"repository": {
|
||||||
"url": "https://github.com/1602/jugglingdb"
|
"url": "https://github.com/1602/jugglingdb"
|
||||||
},
|
},
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "ONLY=memory ./support/nodeunit/bin/nodeunit test/*_test.* && ONLY=redis nodeunit test/common_test.js && ONLY=mysql nodeunit test/common_test.js && ONLY=postgres nodeunit test/common_test.js && ONLY=sqlite3 nodeunit test/common_test.js"
|
"test": "EXCEPT=sequelize nodeunit test/*_test*"
|
||||||
},
|
},
|
||||||
"engines": [
|
"engines": [
|
||||||
"node >= 0.4.0"
|
"node >= 0.4.0"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"hashish": "*"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
"redis": ">= 0.6.7",
|
"redis": ">= 0.6.7",
|
||||||
"mongoose": ">= 2.2.3",
|
"mongoose": ">= 2.2.3",
|
||||||
"mysql": ">= 0.9.4",
|
"mysql": ">= 0.9.4",
|
||||||
"sequelize": "*",
|
"sequelize": "*",
|
||||||
"pg": "*",
|
"pg": "*",
|
||||||
"hashish": "*",
|
"sqlite3": "*",
|
||||||
"sqlite3": "*"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"nodeunit": ">= 0",
|
"nodeunit": ">= 0",
|
||||||
"coffee-script": ">= 0"
|
"coffee-script": ">= 0"
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,10 +23,8 @@ var schemas = {
|
||||||
database: ':memory:'
|
database: ':memory:'
|
||||||
},
|
},
|
||||||
neo4j: { url: 'http://localhost:7474/' },
|
neo4j: { url: 'http://localhost:7474/' },
|
||||||
// mongoose: { url: 'mongodb://localhost/test' },
|
mongoose: { url: 'mongodb://travis:test@localhost:27017/myapp' },
|
||||||
mongoose: {
|
// mongoose: { database: 'test' },
|
||||||
database: 'test'
|
|
||||||
},
|
|
||||||
redis: {},
|
redis: {},
|
||||||
memory: {}
|
memory: {}
|
||||||
};
|
};
|
||||||
|
@ -35,9 +33,10 @@ var specificTest = getSpecificTests();
|
||||||
|
|
||||||
Object.keys(schemas).forEach(function (schemaName) {
|
Object.keys(schemas).forEach(function (schemaName) {
|
||||||
if (process.env.ONLY && process.env.ONLY !== schemaName) return;
|
if (process.env.ONLY && process.env.ONLY !== schemaName) return;
|
||||||
|
if (process.env.EXCEPT && process.env.EXCEPT === schemaName) return;
|
||||||
context(schemaName, function () {
|
context(schemaName, function () {
|
||||||
var schema = new Schema(schemaName, schemas[schemaName]);
|
var schema = new Schema(schemaName, schemas[schemaName]);
|
||||||
schema.log = console.log;
|
// schema.log = console.log;
|
||||||
testOrm(schema);
|
testOrm(schema);
|
||||||
if (specificTest[schemaName]) specificTest[schemaName](schema);
|
if (specificTest[schemaName]) specificTest[schemaName](schema);
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,7 +2,7 @@ juggling = require('../index')
|
||||||
Schema = juggling.Schema
|
Schema = juggling.Schema
|
||||||
Text = Schema.Text
|
Text = Schema.Text
|
||||||
|
|
||||||
DBNAME = process.env.DBNAME || 'migrationtest'
|
DBNAME = process.env.DBNAME || 'myapp_test'
|
||||||
DBUSER = process.env.DBUSER || 'root'
|
DBUSER = process.env.DBUSER || 'root'
|
||||||
DBPASS = ''
|
DBPASS = ''
|
||||||
DBENGINE = process.env.DBENGINE || 'mysql'
|
DBENGINE = process.env.DBENGINE || 'mysql'
|
||||||
|
|
Loading…
Reference in New Issue