aboutsummaryrefslogtreecommitdiff
path: root/lib/tree.js
diff options
context:
space:
mode:
authorMatthew Bergman <[email protected]>2014-02-17 22:33:03 -0500
committerMatthew Bergman <[email protected]>2014-02-17 22:33:03 -0500
commit31d526a4897d150ffd90ebddd2ec1291fdaedc72 (patch)
tree0d89bf88523b377f25e5e8fb7160ce10bfbc057e /lib/tree.js
parent47527ec7391b15f915b25e983da80e98360ed04a (diff)
parentd470a1009058a02706c53379c5019ad43ed924e1 (diff)
downloadfaker-31d526a4897d150ffd90ebddd2ec1291fdaedc72.tar.xz
faker-31d526a4897d150ffd90ebddd2ec1291fdaedc72.zip
Merge pull request #70 from FotoVerite/master
Keep up to date.
Diffstat (limited to 'lib/tree.js')
-rw-r--r--lib/tree.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/tree.js b/lib/tree.js
new file mode 100644
index 00000000..e2fd44b6
--- /dev/null
+++ b/lib/tree.js
@@ -0,0 +1,69 @@
+var Faker = require('../index');
+
+var tree = {
+
+ clone: function clone(obj) {
+ if (obj == null || typeof(obj) != 'object')
+ return obj;
+
+ var temp = obj.constructor(); // changed
+
+ for (var key in obj) {
+ temp[key] = this.clone(obj[key]);
+ }
+ return temp;
+ },
+
+ createTree: function (depth, width, obj) {
+ if (!obj) {
+ throw {
+ name: "ObjectError",
+ message: "there needs to be an object passed in"
+ };
+ }
+
+
+ if (width <= 0) {
+ throw {
+ name: "TreeParamError",
+ message: "width must be greater than zero"
+ };
+ }
+
+ var newObj = this.clone(obj);
+
+ for (var prop in newObj) {
+ if (newObj.hasOwnProperty(prop)) {
+ var value = null;
+ if (newObj[prop] !== "__RECURSE__") {
+ value = eval(newObj[prop]);
+ }
+ else {
+ if (depth !== 0) {
+ value = [];
+ var evalWidth = 1;
+
+ if (typeof(width) == "function") {
+ evalWidth = width();
+ }
+ else {
+ evalWidth = width;
+ }
+
+ for (var i = 0; i < evalWidth; i++) {
+ value.push(this.createTree(depth - 1, width, obj));
+ }
+
+ }
+ }
+
+ newObj[prop] = value;
+ }
+ }
+
+ return newObj;
+ }
+
+};
+
+module.exports = tree;