eva
eva copied to clipboard
Functions to create and call functions and evaluate expressions
eva
Functions to create and call functions and evaluate expressions.
Installation
Node
npm install eva
Bower
bower install eva
AMD, <script>
Use dist/eva.js
or dist/eva.min.js
(minified version).
Usage
Node
var eva = require("eva");
AMD
define(["path/to/dist/eva.js"], function(eva) {
...
});
Bower, <script>
<!-- Use bower_components/eva/dist/eva.js if the library was installed by Bower -->
<script type="text/javascript" src="path/to/dist/eva.js"></script>
<script type="text/javascript">
// eva is available via eva field of window object
...
</script>
Examples
var func = eva.createFunction("(a || 0) + (b || 0) + (c || 0)", {paramNames: "a, b, c", expression: true});
console.log(func("abc")); // abc00
console.log(func(10, 1, 5, 8)); // 16
func = eva.createFunction("if (obj.b) {return a + b;} else {return 'a=' + a;}", {scope: true, paramNames: "obj"});
console.log( func({a: "a", b: "bc"}) ); // abc
console.log( eva.evalWith("this.a + this.b", {a: 1, b: 9}) ); // 10
console.log( eva.evalWith("fn(this.expr)", {expr: "Math.sin(0)"}, {fn: eva.evalWith}) ); // 0
var obj = {};
eva.createDelegateMethod(eva, "evalWith", {destination: obj, destinationMethod: "expr"});
console.log( obj.expr("Math.cos(0)") ); // 1
func = eva.closure(eva.evalWith, ["this.a * this.b"]);
console.log( func({a: 4, b: 7}) ); // 28
console.log( func({a: -3, b: 5}) ); // -15
func = eva.closure(eva.evalWith, [{a: 3, b: -9}], null, {prependArgs: true});
console.log( func("this.a + this.b") ); // -6
console.log( func("this.a - this.b") ); // 12
var funcList = [
eva.closure(eva.evalWith, ["this.a + this.b"]),
eva.closure(eva.evalWith, ["this.a * this.b"]),
eva.closure(eva.evalWith, ["Math.max(this.a, this.b)"])
];
console.log( eva.map(funcList, [{a: 2, b: -7}]) ); // [-5, -14, 2]
API
createFunction(code: String, [settings: Object]): Function
Create function to further use.
evalWith(expression: String, [context: Object], [scope: Object])
Calculate/evaluate value of specified expression using given context and scope.
createDelegateMethod(delegate: Object, method: String, [settings: Object]): Function
Create function that executes specified method of the given object.
closure(action: Function, [paramList: Array], [context: Object], [settings: Object]): Function
Create function that executes specified function with given parameters and context and returns result of call.
map(funcList: Array, [paramList: Array | Function], [context: Object | Function], [settings: Object]): Array
Call each function from specified list and return array containing results of calls.
See doc
folder for details.
Related projects
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.
License
Copyright (c) 2014-2018 Denis Sikuler
Licensed under the MIT license.