Remove globals, read yaml

This commit is contained in:
Anatoliy Chakkaev 2012-10-29 03:21:51 +04:00
parent c27a624d02
commit 8b4da9e5e9
2 changed files with 63 additions and 34 deletions

View File

@ -5,10 +5,13 @@ exports.Schema = require('./lib/schema').Schema;
exports.AbstractClass = require('./lib/abstract-class').AbstractClass; exports.AbstractClass = require('./lib/abstract-class').AbstractClass;
exports.Validatable = require('./lib/validatable').Validatable; exports.Validatable = require('./lib/validatable').Validatable;
exports.init = function (root) { exports.init = function (rw) {
if (!global.railway) return; if (global.railway) {
railway.orm = exports; railway.orm = exports;
require('./lib/railway')(root); } else {
rw.orm = {Schema: exports.Schema, AbstractClass: exports.AbstractClass};
}
require('./lib/railway')(rw);
}; };
try { try {

View File

@ -1,36 +1,57 @@
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
var Schema = railway.orm.Schema; var Schema = require('./schema').Schema;
var existsSync = fs.existsSync || path.existsSync; var existsSync = fs.existsSync || path.existsSync;
railway.orm._schemas = []; if (global.railway) {
railway.orm._schemas = [];
}
module.exports = function init(root) { module.exports = function init(root) {
var railway, app;
var confFile = (root || app.root) + '/config/database.json'; if (typeof root !== 'object' || root.constructor.name !== 'Railway') {
var config; railway = global.railway;
app = global.app;
if (existsSync(confFile)) { railway.models = app.models;
try { } else {
config = JSON.parse(fs.readFileSync(confFile, 'utf-8'))[app.set('env')]; railway = root;
// when driver name started with point - look for driver in app root (relative path) app = railway.app;
if (config.driver && config.driver.match(/^\./)) { root = railway.root;
config.driver = path.join(app.root, config.driver);
} }
railway.orm._schemas = [];
var confFile = (root || app.root) + '/config/database';
var config;
if (existsSync(confFile + '.json')) {
try {
config = JSON.parse(fs.readFileSync(confFile + '.json', 'utf-8'))[app.set('env')];
} catch (e) { } catch (e) {
console.log('Could not parse config/database.json'); console.log('Could not parse config/database.json');
throw e; throw e;
} }
} else { } else if (existsSync(confFile + '.yml')) {
try {
config = railway.utils.readYaml(confFile + '.yml')[app.set('env')];
} catch (e) {
console.log('Could not parse config/database.yml');
throw e;
}
config = {}; config = {};
} }
// when driver name started with point - look for driver in app root (relative path)
if (config.driver && config.driver.match(/^\./)) {
config.driver = path.join(app.root, config.driver);
}
var schema = new Schema(config && config.driver || 'memory', config); var schema = new Schema(config && config.driver || 'memory', config);
schema.log = log; schema.log = log;
railway.orm._schemas.push(schema); railway.orm._schemas.push(schema);
context = prepareContext(schema); var context = prepareContext(railway, app, schema);
// run schema first // run schema first
var schemaFile = (root || app.root) + '/db/schema.'; var schemaFile = (root || app.root) + '/db/schema.';
@ -43,7 +64,12 @@ if (existsSync(schemaFile + 'js')) {
} }
if (schemaFile) { if (schemaFile) {
railway.utils.runCode(schemaFile, context); var code = fs.readFileSync(schemaFile);
if (schemaFile.match(/\.coffee$/)) {
code = require('coffee-script').compile(code);
}
var fn = new Function('context', 'require', 'with(context){(function(){' + code + '})()}');
fn(context, require);
} }
// and freeze schemas // and freeze schemas
@ -54,8 +80,8 @@ railway.orm._schemas.forEach(function (schema) {
// check validations and display warning // check validations and display warning
var displayWarning = false; var displayWarning = false;
Object.keys(app.models).forEach(function (model) { Object.keys(railway.models).forEach(function (model) {
var Model = app.models[model]; var Model = railway.models[model];
if (Model._validations) { if (Model._validations) {
displayWarning = true; displayWarning = true;
} }
@ -77,7 +103,7 @@ function log(str, startTime) {
}); });
} }
function prepareContext(defSchema, done) { function prepareContext(railway, app, defSchema, done) {
var ctx = {app: app}, var ctx = {app: app},
models = {}, models = {},
settings = {}, settings = {},
@ -145,7 +171,7 @@ function prepareContext(defSchema, done) {
callback && callback(); callback && callback();
m = (schema || defSchema).define(className, models[cname], settings[cname]); m = (schema || defSchema).define(className, models[cname], settings[cname]);
} }
return global[cname] = app.models[cname] = ctx[cname] = m; return railway.models[cname] = ctx[cname] = m;
}; };
/** /**