Esempio n. 1
0
        private ICustomizer BuildShortHandValidateCustomizer()
        {
            var root = new ShorthandRoot();

            root.Signatures.Add(new Signature {
                Name = "none"
            });
            root.Signatures.Add(Simple("length"));
            root.Signatures.Add(Simple("separator", ","));
            root.Signatures.Add(Simple("value", "[default]"));
            root.Signatures.Add(Simple("type", "[default]"));
            root.Signatures.Add(Simple("pattern"));
            root.Signatures.Add(new Signature {
                Name       = "any",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "value"
                    },
                    new Parameter {
                        Name = "operator", Value = "equal"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "range",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "min"
                    },
                    new Parameter {
                        Name = "max"
                    }
                }
            });
            root.Signatures.Add(Simple("domain"));
            root.Signatures.Add(Simple("map"));

            root.Methods.Add(new Method {
                Name = "required", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "maxlength", Signature = "length"
            });
            root.Methods.Add(new Method {
                Name = "minlength", Signature = "length"
            });
            root.Methods.Add(new Method {
                Name = "range", Signature = "range"
            });
            root.Methods.Add(new Method {
                Name = "max", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "min", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "any", Signature = "any"
            });
            root.Methods.Add(new Method {
                Name = "contains", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "equals", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "is", Signature = "type"
            });
            root.Methods.Add(new Method {
                Name = "in", Signature = "domain"
            });
            root.Methods.Add(new Method {
                Name = "matches", Signature = "pattern"
            });
            root.Methods.Add(new Method {
                Name = "startswith", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "endswith", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "isdefault", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "isempty", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "numeric", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "isdaylightsavings", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "map", Signature = "map"
            });
            root.Methods.Add(new Method {
                Name = "length", Signature = "length"
            });
            root.Methods.Add(new Method {
                Name = "alphanum", Signature = "none"
            });

            root.Check();

            if (!root.Errors().Any())
            {
                return(new ShorthandCustomizer(root, new[] { "fields", "calculated-fields" }, "v", "validators", "method"));
            }

            foreach (var error in root.Errors())
            {
                Logger.Error(error);
            }
            Logger.Error("Please fix you shorthand configuration.  No short-hand is being processed for v attribute.");

            return(new NullCustomizer());
        }
Esempio n. 2
0
        private ICustomizer BuildShortHandTransformCustomizer()
        {
            var root = new ShorthandRoot();

            root.Signatures.Add(new Signature {
                Name = "none"
            });
            root.Signatures.Add(Simple("format"));
            root.Signatures.Add(Simple("length"));
            root.Signatures.Add(Simple("separator", ","));
            root.Signatures.Add(new Signature {
                Name       = "separator-space",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "separator", Value = " "
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "padding",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "total-width"
                    },
                    new Parameter {
                        Name = "padding-char", Value = "0"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "timezone",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "from-time-zone"
                    },
                    new Parameter {
                        Name = "to-time-zone"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "fromtimezone",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "from-time-zone", Value = "UTC"
                    }
                }
            });
            root.Signatures.Add(Simple("value", "[default]"));
            root.Signatures.Add(Simple("type", "[default]"));
            root.Signatures.Add(new Signature {
                Name       = "trim",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "trim-chars", Value = " "
                    }
                }
            });
            root.Signatures.Add(Simple("script"));
            root.Signatures.Add(Simple("map"));
            root.Signatures.Add(Simple("dayofweek"));
            root.Signatures.Add(new Signature {
                Name       = "substring",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "start-index"
                    },
                    new Parameter {
                        Name = "length", Value = "0"
                    }
                }
            });
            root.Signatures.Add(Simple("timecomponent"));
            root.Signatures.Add(new Signature {
                Name       = "dateadd",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "value"
                    },
                    new Parameter {
                        Name = "timecomponent", Value = "days"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "replace",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "old-value"
                    },
                    new Parameter {
                        Name = "new-value", Value = ""
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "regexreplace",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "pattern"
                    },
                    new Parameter {
                        Name = "new-value"
                    },
                    new Parameter {
                        Name = "count", Value = "0"
                    }
                }
            });
            root.Signatures.Add(Simple("pattern"));
            root.Signatures.Add(new Signature {
                Name       = "insert",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "start-index"
                    },
                    new Parameter {
                        Name = "value"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "remove",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "start-index"
                    },
                    new Parameter {
                        Name = "count", Value = "0"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "template",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "template"
                    },
                    new Parameter {
                        Name = "content-type", Value = "raw"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "any",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "value"
                    },
                    new Parameter {
                        Name = "operator", Value = "equals"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "property",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "name"
                    },
                    new Parameter {
                        Name = "property"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "file",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "extension", Value = "true"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "xpath",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "expression"
                    },
                    new Parameter {
                        Name = "name-space", Value = ""
                    },
                    new Parameter {
                        Name = "url", Value = ""
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "datediff",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "time-component"
                    },
                    new Parameter {
                        Name = "from-time-zone", Value = "UTC"
                    }
                }
            });
            root.Signatures.Add(Simple("domain"));
            root.Signatures.Add(new Signature {
                Name       = "tag",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "tag"
                    },
                    new Parameter {
                        Name = "class", Value = ""
                    },
                    new Parameter {
                        Name = "style", Value = ""
                    },
                    new Parameter {
                        Name = "title", Value = ""
                    },
                    new Parameter {
                        Name = "href", Value = ""
                    },
                    new Parameter {
                        Name = "role", Value = ""
                    },
                    new Parameter {
                        Name = "target", Value = ""
                    },
                    new Parameter {
                        Name = "body", Value = ""
                    },
                    new Parameter {
                        Name = "encode", Value = "true"
                    },
                    new Parameter {
                        Name = "src", Value = ""
                    },
                    new Parameter {
                        Name = "width", Value = "0"
                    },
                    new Parameter {
                        Name = "height", Value = "0"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "decimals",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "decimals", Value = "0"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "iif",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "expression"
                    },
                    new Parameter {
                        Name = "true-field"
                    },
                    new Parameter {
                        Name = "false-field"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "geohash",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "latitude"
                    },
                    new Parameter {
                        Name = "longitude"
                    },
                    new Parameter {
                        Name = "length", Value = "6"
                    }
                }
            });
            root.Signatures.Add(Simple("direction"));
            root.Signatures.Add(new Signature {
                Name       = "distance",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "fromlat"
                    },
                    new Parameter {
                        Name = "fromlon"
                    },
                    new Parameter {
                        Name = "tolat"
                    },
                    new Parameter {
                        Name = "tolon"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "humanize",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "format", Value = "[default]"
                    }
                }
            });
            root.Signatures.Add(new Signature {
                Name       = "web",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "url", Value = ""
                    },
                    new Parameter {
                        Name = "web-method", Value = "GET"
                    },
                    new Parameter {
                        Name = "body", Value = ""
                    }
                }
            });
            root.Signatures.Add(Simple("expression"));
            root.Signatures.Add(Simple("key"));
            root.Signatures.Add(new Signature {
                Name = "slice",
                NamedParameterIndicator = string.Empty,
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "expression"
                    },
                    new Parameter {
                        Name = "separator", Value = ""
                    },
                }
            });
            root.Signatures.Add(Simple("units"));

            root.Methods.Add(new Method {
                Name = "add", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "abs", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "all", Signature = "any"
            });
            root.Methods.Add(new Method {
                Name = "any", Signature = "any"
            });
            root.Methods.Add(new Method {
                Name = "ceiling", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "concat", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "connection", Signature = "property"
            });
            root.Methods.Add(new Method {
                Name = "contains", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "convert", Signature = "type"
            });
            root.Methods.Add(new Method {
                Name = "copy", Signature = "none", Ignore = true
            });
            root.Methods.Add(new Method {
                Name = "cs", Signature = "script"
            });
            root.Methods.Add(new Method {
                Name = "csharp", Signature = "script"
            });
            root.Methods.Add(new Method {
                Name = "datediff", Signature = "datediff"
            });
            root.Methods.Add(new Method {
                Name = "datepart", Signature = "timecomponent"
            });
            root.Methods.Add(new Method {
                Name = "decompress", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "compress", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "equal", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "equals", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "fileext", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "filename", Signature = "file"
            });
            root.Methods.Add(new Method {
                Name = "filepath", Signature = "file"
            });
            root.Methods.Add(new Method {
                Name = "floor", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "format", Signature = "format"
            });
            root.Methods.Add(new Method {
                Name = "formatphone", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "formatxml", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "hashcode", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "htmldecode", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "insert", Signature = "insert"
            });
            root.Methods.Add(new Method {
                Name = "is", Signature = "type"
            });
            root.Methods.Add(new Method {
                Name = "javascript", Signature = "script"
            });
            root.Methods.Add(new Method {
                Name = "join", Signature = "separator"
            });
            root.Methods.Add(new Method {
                Name = "js", Signature = "script"
            });
            root.Methods.Add(new Method {
                Name = "last", Signature = "dayofweek"
            });
            root.Methods.Add(new Method {
                Name = "left", Signature = "length"
            });
            root.Methods.Add(new Method {
                Name = "lower", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "map", Signature = "map"
            });
            root.Methods.Add(new Method {
                Name = "multiply", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "next", Signature = "dayofweek"
            });
            root.Methods.Add(new Method {
                Name = "now", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "padleft", Signature = "padding"
            });
            root.Methods.Add(new Method {
                Name = "padright", Signature = "padding"
            });
            root.Methods.Add(new Method {
                Name = "razor", Signature = "template"
            });
            root.Methods.Add(new Method {
                Name = "regexreplace", Signature = "regexreplace"
            });
            root.Methods.Add(new Method {
                Name = "remove", Signature = "remove"
            });
            root.Methods.Add(new Method {
                Name = "replace", Signature = "replace"
            });
            root.Methods.Add(new Method {
                Name = "right", Signature = "length"
            });
            root.Methods.Add(new Method {
                Name = "round", Signature = "decimals"
            });
            root.Methods.Add(new Method {
                Name = "roundto", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "roundupto", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "rounddownto", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "splitlength", Signature = "separator"
            });
            root.Methods.Add(new Method {
                Name = "substring", Signature = "substring"
            });
            root.Methods.Add(new Method {
                Name = "sum", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "timeago", Signature = "fromtimezone"
            });
            root.Methods.Add(new Method {
                Name = "timeahead", Signature = "fromtimezone"
            });
            root.Methods.Add(new Method {
                Name = "timezone", Signature = "timezone"
            });
            root.Methods.Add(new Method {
                Name = "tolower", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "tostring", Signature = "format"
            });
            root.Methods.Add(new Method {
                Name = "totime", Signature = "timecomponent"
            });
            root.Methods.Add(new Method {
                Name = "toupper", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "toyesno", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "trim", Signature = "trim"
            });
            root.Methods.Add(new Method {
                Name = "trimend", Signature = "trim"
            });
            root.Methods.Add(new Method {
                Name = "trimstart", Signature = "trim"
            });
            root.Methods.Add(new Method {
                Name = "upper", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "utcnow", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "velocity", Signature = "template"
            });
            root.Methods.Add(new Method {
                Name = "xmldecode", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "xpath", Signature = "xpath"
            });
            root.Methods.Add(new Method {
                Name = "in", Signature = "domain"
            });
            root.Methods.Add(new Method {
                Name = "match", Signature = "pattern"
            });
            root.Methods.Add(new Method {
                Name = "matching", Signature = "pattern"
            });
            root.Methods.Add(new Method {
                Name = "coalesce", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "startswith", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "endswith", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "invert", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "isdefault", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "isempty", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "tag", Signature = "tag"
            });
            root.Methods.Add(new Method {
                Name = "include", Signature = "any"
            });
            root.Methods.Add(new Method {
                Name = "exclude", Signature = "any"
            });
            root.Methods.Add(new Method {
                Name = "slugify", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "camelize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "dasherize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "hyphenate", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "frommetric", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "fromroman", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "humanize", Signature = "humanize"
            });
            root.Methods.Add(new Method {
                Name = "dehumanize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "ordinalize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "pascalize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "pluralize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "singularize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "titleize", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "tometric", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "toordinalwords", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "toroman", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "towords", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "underscore", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "bytes", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "dateadd", Signature = "dateadd"
            });
            root.Methods.Add(new Method {
                Name = "iif", Signature = "iif"
            });
            root.Methods.Add(new Method {
                Name = "geohashencode", Signature = "geohash"
            });
            root.Methods.Add(new Method {
                Name = "isnumeric", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "geohashneighbor", Signature = "direction"
            });
            root.Methods.Add(new Method {
                Name = "commonprefix", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "commonprefixes", Signature = "separator"
            });
            root.Methods.Add(new Method {
                Name = "distance", Signature = "distance"
            });

            root.Methods.Add(new Method {
                Name = "web", Signature = "web"
            });
            root.Methods.Add(new Method {
                Name = "urlencode", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "fromjson", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "datemath", Signature = "expression"
            });
            root.Methods.Add(new Method {
                Name = "eval", Signature = "expression"
            });

            // VIN, Vehicle Identification Number
            root.Methods.Add(new Method {
                Name = "isvin", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "vinisvalid", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "vingetworldmanufacturer", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "vingetmodelyear", Signature = "none"
            });

            root.Methods.Add(new Method {
                Name = "isdaylightsavings", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "htmlencode", Signature = "none"
            });
            root.Methods.Add(new Method {
                Name = "fromaddress", Signature = "key"
            });
            root.Methods.Add(new Method {
                Name = "distinct", Signature = "separator-space"
            });
            root.Methods.Add(new Method {
                Name = "ismatch", Signature = "pattern"
            });
            root.Methods.Add(new Method {
                Name = "matchcount", Signature = "pattern"
            });
            root.Methods.Add(new Method {
                Name = "slice", Signature = "slice"
            });
            root.Methods.Add(new Method {
                Name = "bytesize", Signature = "units"
            });
            root.Methods.Add(new Method {
                Name = "append", Signature = "value"
            });
            root.Check();

            if (!root.Errors().Any())
            {
                return(new ShorthandCustomizer(root, new[] { "fields", "calculated-fields" }, "t", "transforms", "method"));
            }

            foreach (var error in root.Errors())
            {
                Logger.Error(error);
            }
            Logger.Error("Please fix you shorthand configuration.  No short-hand is being processed for t attribute.");

            return(new NullCustomizer());
        }
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <IDependency>((ctx, p) => {
                ShorthandRoot root;
                if (ctx.IsRegisteredWithName <string>(Name))
                {
                    root = new ShorthandRoot(ctx.ResolveNamed <string>(Name), ctx.ResolveNamed <IReader>("file"));
                }
                else
                {
                    root = new ShorthandRoot();
                    root.Signatures.Add(new Signature {
                        Name = "none"
                    });
                    root.Signatures.Add(Simple("length"));
                    root.Signatures.Add(Simple("separator", ","));
                    root.Signatures.Add(Simple("value", "[default]"));
                    root.Signatures.Add(Simple("type", "[default]"));
                    root.Signatures.Add(Simple("pattern"));
                    root.Signatures.Add(new Signature {
                        Name       = "any",
                        Parameters = new List <Parameter> {
                            new Parameter {
                                Name = "value"
                            },
                            new Parameter {
                                Name = "operator", Value = "equal"
                            }
                        }
                    });
                    root.Signatures.Add(new Signature {
                        Name       = "range",
                        Parameters = new List <Parameter> {
                            new Parameter {
                                Name = "min"
                            },
                            new Parameter {
                                Name = "max"
                            }
                        }
                    });
                    root.Signatures.Add(Simple("domain"));
                    root.Signatures.Add(Simple("map"));

                    root.Methods.Add(new Method {
                        Name = "required", Signature = "none"
                    });
                    root.Methods.Add(new Method {
                        Name = "maxlength", Signature = "length"
                    });
                    root.Methods.Add(new Method {
                        Name = "minlength", Signature = "length"
                    });
                    root.Methods.Add(new Method {
                        Name = "range", Signature = "range"
                    });
                    root.Methods.Add(new Method {
                        Name = "max", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "min", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "any", Signature = "any"
                    });
                    root.Methods.Add(new Method {
                        Name = "contains", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "equals", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "equal", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "notequal", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "unequal", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "is", Signature = "type"
                    });
                    root.Methods.Add(new Method {
                        Name = "in", Signature = "domain"
                    });
                    root.Methods.Add(new Method {
                        Name = "matches", Signature = "pattern"
                    });
                    root.Methods.Add(new Method {
                        Name = "startswith", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "endswith", Signature = "value"
                    });
                    root.Methods.Add(new Method {
                        Name = "isdefault", Signature = "none"
                    });
                    root.Methods.Add(new Method {
                        Name = "isempty", Signature = "none"
                    });
                    root.Methods.Add(new Method {
                        Name = "numeric", Signature = "none"
                    });
                    root.Methods.Add(new Method {
                        Name = "isdaylightsavings", Signature = "none"
                    });
                    root.Methods.Add(new Method()
                    {
                        Name = "map", Signature = "map"
                    });
                    root.Methods.Add(new Method {
                        Name = "alphanum", Signature = "none"
                    });
                    root.Check();
                }

                if (root.Errors().Any())
                {
                    var context = ctx.IsRegistered <IContext>() ? ctx.Resolve <IContext>() : new PipelineContext(ctx.IsRegistered <IPipelineLogger>() ? ctx.Resolve <IPipelineLogger>() : new TraceLogger(), new Process {
                        Name = "Error"
                    });
                    foreach (var error in root.Errors())
                    {
                        context.Error(error);
                    }
                    context.Error("Please fix you shorthand configuration.  No short-hand is being processed for the v attribute.");
                }
                else
                {
                    return(new ShorthandCustomizer(root, new[] { "fields", "calculated-fields" }, "v", "validators", "method"));
                }

                return(new NullCustomizer());
            }).Named <IDependency>(Name);
        }
Esempio n. 4
0
        protected override void Load(ContainerBuilder builder)
        {
            // This reader is used to load the initial configuration and nested resources for tfl actions, etc.
            builder.RegisterType <FileReader>().Named <IReader>("file");
            builder.RegisterType <WebReader>().Named <IReader>("web");
            builder.Register <IReader>(ctx => new DefaultReader(
                                           ctx.ResolveNamed <IReader>("file"),
                                           new ReTryingReader(ctx.ResolveNamed <IReader>("web"), attempts: 3))
                                       );

            builder.Register((ctx, p) => {
                var dependencies = new List <IDependency> {
                    ctx.Resolve <IReader>(),
                    new DateMathModifier(),
                    new EnvironmentModifier(),
                    new JintValidator()
                };

                if (!string.IsNullOrEmpty(_shorthand))
                {
                    var shr = new ShorthandRoot(_shorthand, ctx.ResolveNamed <IReader>("file"));
                    if (shr.Errors().Any())
                    {
                        var context = ctx.IsRegistered <IContext>() ? ctx.Resolve <IContext>() : new PipelineContext(ctx.IsRegistered <IPipelineLogger>() ? ctx.Resolve <IPipelineLogger>() : new TraceLogger(), new Process {
                            Name = "Error"
                        });
                        foreach (var error in shr.Errors())
                        {
                            context.Error(error);
                        }
                        context.Error("Please fix you shorthand configuration.  No short-hand is being processed.");
                    }
                    else
                    {
                        dependencies.Add(new ShorthandCustomizer(shr, new[] { "fields", "calculated-fields" }, "t", "transforms", "method"));
                    }
                }

                var process = new Process(dependencies.ToArray());

                switch (p.Count())
                {
                case 2:
                    process.Load(
                        p.Named <string>("cfg"),
                        p.Named <Dictionary <string, string> >("parameters")
                        );
                    break;

                default:
                    process.Load(p.Named <string>("cfg"));
                    break;
                }

                if (process.Errors().Any())
                {
                    return(process);
                }

                // this might be put into it's own type and injected (or not)
                if (process.Entities.Count == 1)
                {
                    var entity = process.Entities.First();
                    if (!entity.HasInput() && ctx.IsRegistered <ISchemaReader>())
                    {
                        var schemaReader = ctx.Resolve <ISchemaReader>(new TypedParameter(typeof(Process), process));
                        var schema       = schemaReader.Read(entity);
                        var newEntity    = schema.Entities.First();
                        foreach (var sf in newEntity.Fields.Where(f => f.Name == Constants.TflKey || f.Name == Constants.TflDeleted || f.Name == Constants.TflBatchId || f.Name == Constants.TflHashCode))
                        {
                            sf.Alias = newEntity.Name + sf.Name;
                        }
                        process.Entities.Clear();
                        process.Entities.Add(newEntity);
                        process.Connections.First(c => c.Name == newEntity.Connection).Delimiter = schema.Connection.Delimiter;
                    }
                }

                if (process.Output().IsInternal())
                {
                    try {
                        Console.WindowHeight = Console.WindowHeight + 1 - 1;
                        Console.Title        = process.Name;
                        if (!System.Environment.CommandLine.Contains("TESTWINDOW"))
                        {
                            process.Output().Provider = "console";
                        }
                    } catch (Exception) {
                        // just a hack to determine if in console
                    }
                }

                // handling multiple entities with non-relational output
                var originalOutput  = process.Output().Clone();
                originalOutput.Name = Constants.OriginalOutput;
                originalOutput.Key  = process.Name + originalOutput.Name;

                if (!process.OutputIsRelational() && (process.Entities.Count > 1 || process.Buffer))
                {
                    process.Output().Provider = process.InternalProvider;
                    var folder                      = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), Constants.ApplicationFolder);
                    var file                        = new FileInfo(Path.Combine(folder, SlugifyTransform.Slugify(process.Name) + "." + (process.InternalProvider == "sqlce" ? "sdf" : "sqlite3")));
                    var exists                      = file.Exists;
                    process.Output().File           = file.FullName;
                    process.Output().RequestTimeout = process.InternalProvider == "sqlce" ? 0 : process.Output().RequestTimeout;
                    process.Flatten                 = process.InternalProvider == "sqlce";
                    process.Mode                    = exists ? process.Mode : "init";
                    process.Connections.Add(originalOutput);

                    if (!exists)
                    {
                        if (!Directory.Exists(file.DirectoryName))
                        {
                            Directory.CreateDirectory(folder);
                        }
                    }
                }

                return(process);
            }).As <Process>().InstancePerDependency();  // because it has state, if you run it again, it's not so good
        }
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <IDependency>((ctx, p) => {
                ShorthandRoot root;
                if (ctx.IsRegisteredWithName <ShorthandRoot>(Name))
                {
                    root = ctx.ResolveNamed <ShorthandRoot>(Name);
                }
                else
                {
                    root = new ShorthandRoot();
                    builder.Register(c => root).Named <ShorthandRoot>(Name).InstancePerLifetimeScope();
                }

                root.Signatures.Add(new Signature {
                    Name = "none"
                });
                root.Signatures.Add(Simple("separator", ","));
                root.Signatures.Add(new Signature {
                    Name       = "separator-space",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "separator", Value = " "
                        }
                    }
                });
                root.Signatures.Add(Simple("value", "[default]"));
                root.Signatures.Add(Simple("type", "[default]"));
                root.Signatures.Add(Simple("script"));
                root.Signatures.Add(Simple("pattern"));

                root.Signatures.Add(new Signature {
                    Name       = "template",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "template"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "content-type", Value = "raw"
                        }
                    }
                });
                root.Signatures.Add(new Signature {
                    Name       = "any",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "value"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "operator", Value = "equals"
                        }
                    }
                });

                root.Signatures.Add(new Signature {
                    Name       = "xpath",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "expression"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "name-space", Value = ""
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "url", Value = ""
                        }
                    }
                });
                root.Signatures.Add(Simple("domain"));
                root.Signatures.Add(new Signature {
                    Name       = "iif",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "expression"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "true-field"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "false-field"
                        }
                    }
                });
                root.Signatures.Add(new Signature {
                    Name       = "geohash",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "latitude"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "longitude"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "length", Value = "6"
                        }
                    }
                });
                root.Signatures.Add(Simple("direction"));
                root.Signatures.Add(new Signature {
                    Name       = "distance",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "fromlat"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "fromlon"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "tolat"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "tolon"
                        }
                    }
                });
                root.Signatures.Add(new Signature {
                    Name       = "web",
                    Parameters = new List <Cfg.Net.Shorthand.Parameter> {
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "url", Value = ""
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "web-method", Value = "GET"
                        },
                        new Cfg.Net.Shorthand.Parameter {
                            Name = "body", Value = ""
                        }
                    }
                });
                root.Signatures.Add(Simple("expression"));
                root.Signatures.Add(Simple("key"));
                root.Signatures.Add(Simple("units"));

                root.Methods.Add(new Method {
                    Name = "any", Signature = "any"
                });

                root.Methods.Add(new Method {
                    Name = "contains", Signature = "value"
                });

                root.Methods.Add(new Method {
                    Name = "is", Signature = "type"
                });
                root.Methods.Add(new Method {
                    Name = "javascript", Signature = "script"
                });

                root.Methods.Add(new Method {
                    Name = "js", Signature = "script"
                });
                root.Methods.Add(new Method {
                    Name = "toupper", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "upper", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "velocity", Signature = "template"
                });
                root.Methods.Add(new Method {
                    Name = "xpath", Signature = "xpath"
                });
                root.Methods.Add(new Method {
                    Name = "in", Signature = "domain"
                });
                root.Methods.Add(new Method {
                    Name = "startswith", Signature = "value"
                });
                root.Methods.Add(new Method {
                    Name = "endswith", Signature = "value"
                });
                root.Methods.Add(new Method {
                    Name = "isdefault", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "isempty", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "include", Signature = "any"
                });
                root.Methods.Add(new Method {
                    Name = "exclude", Signature = "any"
                });
                root.Methods.Add(new Method {
                    Name = "slugify", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "iif", Signature = "iif"
                });
                root.Methods.Add(new Method {
                    Name = "geohashencode", Signature = "geohash"
                });
                root.Methods.Add(new Method {
                    Name = "isnumeric", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "geohashneighbor", Signature = "direction"
                });
                root.Methods.Add(new Method {
                    Name = "commonprefix", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "commonprefixes", Signature = "separator"
                });
                root.Methods.Add(new Method {
                    Name = "distance", Signature = "distance"
                });

                root.Methods.Add(new Method {
                    Name = "web", Signature = "web"
                });
                root.Methods.Add(new Method {
                    Name = "urlencode", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "fromjson", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "datemath", Signature = "expression"
                });

                root.Methods.Add(new Method {
                    Name = "isdaylightsavings", Signature = "none"
                });
                root.Methods.Add(new Method {
                    Name = "fromaddress", Signature = "key"
                });
                root.Methods.Add(new Method {
                    Name = "distinct", Signature = "separator-space"
                });
                root.Methods.Add(new Method {
                    Name = "ismatch", Signature = "pattern"
                });
                root.Methods.Add(new Method {
                    Name = "matchcount", Signature = "pattern"
                });
                root.Methods.Add(new Method {
                    Name = "append", Signature = "value"
                });
                root.Methods.Add(new Method {
                    Name = "prepend", Signature = "value"
                });
                root.Methods.Add(new Method {
                    Name = "prefix", Signature = "value"
                });
                root.Methods.Add(new Method {
                    Name = "suffix", Signature = "value"
                });
                root.Check();


                if (root.Errors().Any())
                {
                    var context = ctx.IsRegistered <IContext>() ? ctx.Resolve <IContext>() : new PipelineContext(ctx.IsRegistered <IPipelineLogger>() ? ctx.Resolve <IPipelineLogger>() : new TraceLogger(), new Process {
                        Name = "Error"
                    });
                    foreach (var error in root.Errors())
                    {
                        context.Error(error);
                    }
                    context.Error("Please fix you shorthand configuration.  No short-hand is being processed for the t attribute.");
                }
                else
                {
                    return(new ShorthandCustomizer(root, new[] { "fields", "calculated-fields" }, "t", "transforms", "method"));
                }

                return(new NullCustomizer());
            }).Named <IDependency>(Name).InstancePerLifetimeScope();
        }
 public ValidateBuilder(Process process, ContainerBuilder builder, HashSet <string> methods, ShorthandRoot shortHand, List <ValidatorHolder> validators, IPipelineLogger logger)
 {
     _process    = process;
     _logger     = logger;
     _methods    = methods;
     _shortHand  = shortHand;
     _builder    = builder;
     _validators = validators;
 }