Modified:
/convert/addons/shell-skel/arguments.js
=======================================
--- /convert/addons/shell-skel/arguments.js Sat Mar 3 09:33:45 2012
+++ /convert/addons/shell-skel/arguments.js Thu Apr 12 10:24:25 2012
@@ -28,6 +28,70 @@
return rc;
};
+function applyValidation( func, rules ){
+ return function(){
+ var av = Array.prototype.slice.apply(arguments,[0]);
+ rules( av );
+ return func.apply( this, av );
+ }
+};
+
+JSON.stringify = applyValidation( JSON.stringify,
+ function(a){
+ if(!a.length) throw new
Error("!arguments.length");
+ });
+//print("Object: "+{});
+
+(function(){
+ function ArgValidator(){
+ this.$state = {
+ list:[]
+ };
+ }
+ ArgValidator.prototype = {
+ push:function(f){
+ this.$state.list.push(f);
+ return this;
+ },
+ argv:function(a){
+ return Array.prototype.slice.apply(a,[0]);
+ },
+ $fwdValidate:function(f,args){
+ if(f instanceof this.constructor) return f.validate(args);
+ else return f(args);
+ },
+ aEq:function(ndx,val){
+ this.push( function(a){return a[ndx] == val;} );
+ return this;
+ },
+ aEqq:function(ndx,val){
+ this.push( function(a){return a[ndx] === val;} );
+ return this;
+ },
+ aLength:function(min,max){
+ max = arguments.length==1 ? min : max;
+ this.push( function(a){
+ if(max<min) return a.length>=min;
+ else return a.length>=min && a.length<=max;
+ });
+ return this;
+ },
+ validate:function(){
+ var li = this.$state.list, i = 0, r, l = li.length;
+ if(!l) return true;
+ var args = this.argv(arguments);
+ for( ; i < l; ++i ){
+ r = li[i];
+ if(!this.$fwdValidate(r,args)) {
+ throw new Error("Argument validation failed.");
+ }
+ }
+ return true;
+ }
+ };
+})();
+
+
if( 0 === arguments.length ) {
print("You can pass arguments to this script by passing them AFTER "+
"an argument in the form '--'. Example:");