deploy1 6 年 前
コミット
a012f580ea
1 ファイル変更77 行追加7 行削除
  1. 77 7
      electra2020.js

+ 77 - 7
electra2020.js

@@ -6,6 +6,7 @@ var async = require("async");
 function uberfactory(uuid, slugger) {
 
     var ignores = [
+        "_isdirty",
         "uninherits",
         "inherits",
         "unextends",
@@ -18,6 +19,8 @@ function uberfactory(uuid, slugger) {
         "emitas",
         "data2",
         "getStuff",
+        "getStuff2",
+        "getStuff3",
         "pingup",
         "data",
         "metas2",
@@ -93,6 +96,11 @@ function uberfactory(uuid, slugger) {
             if (parent) {
                 this.parents[parent.name] = parent;
                 this.path = parent.path + "/" + name
+                if(parent._metas.copyonchild){
+                    _.map(parent._metas.copyonchild,function(k){
+                        self._metas[k] = parent._metas[k];    
+                    })
+                }
             }
             if (isroot) {
                 this.isroot = true;
@@ -394,11 +402,64 @@ function uberfactory(uuid, slugger) {
                 return par.getStuff.apply(par, [stuff, applybefore, "isa_" + named_, true]);
             }))
             arr = arr.filter(function(a) {
-                return a.data ? a.data.length > 0 : false
+                return a.data ? (typeof(a.data) === "function" || a.data.length > 0) : false
             });
             return arr
         }
 
+        electra.prototype.getStuff2 = function(stuff, applybefore, named_, dd, inas) {
+            var self = this;
+            var named = named_ || "data";
+            var dd = dd || false;
+            var inass = inas || [];
+            var obj = {
+                name: this.path,
+                from: named,
+                data: applybefore(getpath(this, stuff)),
+                inas: inass
+            }
+
+            var arr = [obj];
+            if (dd) {
+                return arr
+            }
+            arr = [].concat.apply(arr, _.map(this._inherits, function(par, nam) {
+                return par.getStuff2.apply(par, [stuff, applybefore, "inherit_" + named_, false, inass.concat([self.path])]);
+            }))
+            arr = [].concat.apply(arr, _.map(this.parents, function(par, nam) {
+                return par.getStuff2.apply(par, [stuff, applybefore, "parent_" + named_, false, inass.concat([self.path])]);
+            }))
+            arr = [].concat.apply(arr, _.map(this._isa, function(par, nam) {
+                return par.getStuff2.apply(par, [stuff, applybefore, "isa_" + named_, false, inass.concat([self.path])]);
+            }))
+            arr = arr.filter(function(a) {
+                return a.data ? (typeof(a.data) === "function" || a.data.length > 0) : false
+            });
+            return arr
+        }
+        electra.prototype.getStuff3 = function(stuff, applybefore, named_, dd) {
+            var named = named_ || "data";
+            var dd = dd || false;
+            var obj = {
+                name: this.path,
+                from: named,
+                data: applybefore(getpath(this, stuff))
+            }
+            var arr = [obj];
+            if (dd) {
+                return arr
+            }
+            arr = [].concat.apply(arr, _.map(this._inherits, function(par, nam) {
+                return par.getStuff.apply(par, [stuff, applybefore, "inherit_" + named_]);
+            }))
+            arr = [].concat.apply(arr, _.map(this.parents, function(par, nam) {
+                return par.getStuff.apply(par, [stuff, applybefore, "parent_" + named_]);
+            }))
+            arr = arr.filter(function(a) {
+                return a.data ? (typeof(a.data) === "function" || a.data.length > 0) : false
+            });
+            return arr
+        }
 
 
         electra.prototype.pingup = function() {
@@ -531,7 +592,9 @@ function uberfactory(uuid, slugger) {
 
         electra.prototype.exportSync = function(path, serializers) {
             var self = this;
-
+            if (self._metas.unsaveable) {
+                return undefined;
+            }
             var obj = self.innerExport(path, serializers);
 
             var collect = _.map(self.children, function(child, name) {
@@ -565,6 +628,9 @@ function uberfactory(uuid, slugger) {
         }
         electra.prototype.innerExport = function(path, serializers) {
             var self = this;
+            if (self._metas.unsaveable) {
+                return {};
+            }
             var obj = {};
             // obj._id = self._id;
             obj.name = self.name;
@@ -626,8 +692,7 @@ function uberfactory(uuid, slugger) {
                     if (serializers && serializers[ke]) {
                         obj[ke] = serializers[ke](val);
                     } else {
-                        _.map(val,function(cval,cprop){
-                        })
+                        _.map(val, function(cval, cprop) {})
                         obj[ke] = val;
                     }
                 }
@@ -638,13 +703,15 @@ function uberfactory(uuid, slugger) {
             return obj
         }
 
-        function seriadeep(rest, obj, serializers,one) {
-            if(one>2){return }
+        function seriadeep(rest, obj, serializers, one) {
+            if (one > 2) {
+                return
+            }
             _.map(rest, function(val, ke) {
                 if (typeof(val) === "function") {
                     obj[ke] = "$$$FUNCTION$$$" + val;
                 } else if (typeof(val) === "object") {
-                    obj[ke] = seriadeep(val, obj, serializers, (one||1) +1);
+                    obj[ke] = seriadeep(val, obj, serializers, (one || 1) + 1);
                 } else {
                     if (serializers && serializers[ke]) {
                         obj[ke] = serializers[ke](val)
@@ -754,6 +821,7 @@ function setpath(obj, path, value) {
 
 
 uberfactory.ignores = ignores = [
+    "_isdirty",
     "inherits",
     "uninherits",
     "unextends",
@@ -766,6 +834,8 @@ uberfactory.ignores = ignores = [
     "emitas",
     "data2",
     "getStuff",
+    "getStuff2",
+    "getStuff3",
     "pingup",
     "data",
     "metas2",