tellform/app/models/logic_jump.server.model.js

79 lines
1.4 KiB
JavaScript
Raw Normal View History

2015-09-03 18:21:56 +00:00
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
_ = require('lodash'),
2015-09-10 22:06:28 +00:00
math = require('math');
2015-09-03 18:21:56 +00:00
2015-09-10 22:06:28 +00:00
var BooleanExpressionSchema = new Schema({
2015-09-03 18:21:56 +00:00
expressionString: {
type: String,
},
result: {
type: Boolean,
}
});
2015-09-10 22:06:28 +00:00
BooleanExpressionSchema.methods.evaluate = function(){
2015-09-03 18:21:56 +00:00
//Get headNode
var headNode = math.parse(expressionString);
var expressionScope = {};
var that = this;
//Create scope
headNode.traverse(function (node, path, parent) {
if(node.type === 'SymbolNode'){
mongoose.model('Field')
.findOne({_id: node.name}).exec(function(err, field){
if(err) {
console.log(err);
throw new Error(err);
}
if(!!_.parseInt(field.fieldValue)){
that.expressionScope[node.name] = _.parseInt(field.fieldValue);
}else {
that.expressionScope[node.name] = field.fieldValue;
}
console.log('_id: '+node.name);
console.log('value: '+that.expressionScope[node.name]);
});
}
});
2015-09-12 20:19:21 +00:00
var code = headNode.compile();
2015-09-03 18:21:56 +00:00
var result = code.eval(expressionScope);
this.result = result;
return result;
2015-09-10 22:06:28 +00:00
};
2015-09-03 18:21:56 +00:00
2015-09-10 22:06:28 +00:00
mongoose.model('BooleanExpression', BooleanExpressionSchema);
2015-09-03 18:21:56 +00:00
/**
* Form Schema
*/
var LogicJumpSchema = new Schema({
created: {
type: Date,
default: Date.now
},
lastModified: {
type: Date,
},
BooleanExpression: {
type: Schema.Types.ObjectId,
ref: 'BooleanExpression'
},
});
mongoose.model('LogicJump', LogicJumpSchema);