protected override void Updated(UpdateContentContext context)
        {
            var part = context.ContentItem.As <PipelineSettingsPart>();

            if (part == null)
            {
                return;
            }

            try {
                var cfg = new ShorthandRoot(part.Shorthand, new CfgNetNotifier(_notifier));
                if (!cfg.Errors().Any())
                {
                    return;
                }
                _notifier.Add(NotifyType.Error, T("Shorthand is invalid."));
                foreach (var error in cfg.Errors())
                {
                    _notifier.Add(NotifyType.Error, T(error));
                }
            } catch (Exception ex) {
                _notifier.Add(NotifyType.Error, T(ex.Message));
                Logger.Error(ex, ex.Message);
            }
        }
Esempio n. 2
0
        public void TestShorthandConfiguration()
        {
            var root = new ShorthandRoot(File.ReadAllText(@"shorthand.xml"));

            foreach (var error in root.Errors())
            {
                Console.WriteLine(error);
            }

            Assert.AreEqual(0, root.Errors().Count());
            Assert.AreEqual(5, root.Signatures.Count);
            Assert.AreEqual(7, root.Methods.Count);
        }
Esempio n. 3
0
        protected override void Load(ContainerBuilder builder)
        {
            if (_templateProcessor == null)
            {
                return; // being called on Orchart start up
            }

            builder.RegisterType <Cfg.Net.Serializers.XmlSerializer>().As <ISerializer>();
            builder.Register(ctx => new JintValidator("js")).Named <IValidator>("js");

            builder.Register(ctx => new EnvironmentModifier(
                                 new PlaceHolderModifier(),
                                 new ParameterModifier())
                             ).As <IRootModifier>();

            // 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))
                                       );

            // transform choices
            builder.Register <ITransform>((ctx, p) => new JintTransform(p.TypedAs <PipelineContext>(), ctx.Resolve <IReader>())).Named <ITransform>("js");

            if (_templateProcessor != null)
            {
                builder.Register <ITransform>((ctx, p) => {
                    var c = p.TypedAs <PipelineContext>();
                    try {
                        _templateProcessor.Verify(c.Transform.Template);
                        return(new OrchardRazorTransform(c, _templateProcessor));
                    } catch (Exception ex) {
                        c.Warn(ex.Message);
                        return(new NullTransform(c));
                    }
                }).Named <ITransform>("razor");
            }
            else
            {
                builder.Register <ITransform>((ctx, p) => new NullTransform(p.TypedAs <PipelineContext>())).Named <ITransform>("razor");
            }

            // parser choices
            builder.RegisterType <JintParser>().Named <IParser>("js");

            // input row condition
            builder.Register <IRowCondition>((ctx, p) => new JintRowCondition(p.TypedAs <InputContext>(), p.TypedAs <string>())).As <IRowCondition>();

            builder.Register((ctx, p) => {
                var dependencies = new List <IDependency> {
                    ctx.Resolve <IReader>(),
                    ctx.Resolve <ISerializer>(),
                    new PlaceHolderModifier(),
                    ctx.Resolve <IRootModifier>(),
                    ctx.ResolveNamed <IValidator>("js"),
                    new PlaceHolderValidator()
                };

                if (!string.IsNullOrEmpty(ctx.ResolveNamed <string>("sh")))
                {
                    var shr = new ShorthandRoot(ctx.ResolveNamed <string>("sh"), 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 OrchardLogger(), new Process {
                            Name = "Error"
                        }.WithDefaults());
                        foreach (var error in shr.Errors())
                        {
                            context.Error(error);
                        }
                        context.Error("Please fix you shorthand configuration.  No short-hand is being processed.");
                        dependencies.Add(new NullValidator("sh"));
                        dependencies.Add(new NullNodeModifier("sh"));
                    }
                    else
                    {
                        dependencies.Add(new ShorthandValidator(shr, "sh"));
                        dependencies.Add(new ShorthandModifier(shr, "sh"));
                    }
                }
                else
                {
                    dependencies.Add(new NullValidator("sh"));
                    dependencies.Add(new NullNodeModifier("sh"));
                }

                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;
                }

                // 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.Fields.Any(f => f.Input) && ctx.IsRegistered <ISchemaReader>())
                    {
                        var schemaReader = ctx.Resolve <ISchemaReader>(new TypedParameter(typeof(Process), process));
                        var newEntity    = schemaReader.Read(entity).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 = new Process(process.Serialize(), ctx.Resolve <ISerializer>());
                    }
                }

                return(process);
            }).As <Process>();
        }
Esempio n. 4
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("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 = "map"
            });
            root.Methods.Add(new Method {
                Name = "notin", Signature = "map"
            });
            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. 5
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       = "convert",
                Parameters = new List <Parameter> {
                    new Parameter {
                        Name = "type", Value = "[default]"
                    },
                    new Parameter {
                        Name = "format"
                    }
                }
            });
            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 = "convert"
            });
            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.Methods.Add(new Method {
                Name = "suffix", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "prepend", Signature = "value"
            });
            root.Methods.Add(new Method {
                Name = "prefix", 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());
        }
Esempio n. 6
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType <Cfg.Net.Serializers.XmlSerializer>().As <ISerializer>();
            builder.Register(ctx => new JintValidator()).Named <ICustomizer>("js");

            // 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>(),
                    ctx.Resolve <ISerializer>(),
                    new DateMathModifier(),
                    new EnvironmentModifier(),
                    ctx.ResolveNamed <ICustomizer>("js"),
                    new IllegalCharacterValidator()
                };

                var shr = new ShorthandRoot(Common.DefaultShortHand);
                if (shr.Errors().Any())
                {
                    var context = ctx.IsRegistered <IContext>() ? ctx.Resolve <IContext>() : new PipelineContext(ctx.IsRegistered <IPipelineLogger>() ? ctx.Resolve <IPipelineLogger>() : new OrchardLogger(), 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;
                }

                // 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;
                        process = new Process(process.Serialize(), ctx.Resolve <ISerializer>());
                    }
                }

                return(process);
            }).As <Process>().InstancePerDependency();  // because it has state, if you run it again, it's not so good
        }
Esempio n. 7
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register(ctx => new JintValidator("js")).Named <IValidator>("js");

            builder.Register(ctx => new EnvironmentModifier(
                                 new PlaceHolderModifier(),
                                 new ParameterModifier())
                             ).As <IRootModifier>();

            // 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))
                                       );

            // transform choices
            builder.Register <ITransform>((ctx, p) => new RazorTransform(p.TypedAs <PipelineContext>())).Named <ITransform>("razor");

            // parser choices
            builder.RegisterType <JintParser>().Named <IParser>("js");

            // input row condition
            builder.Register <IRowCondition>((ctx, p) => new JintRowCondition(p.TypedAs <InputContext>(), p.TypedAs <string>())).As <IRowCondition>();

            builder.Register((ctx, p) => {
                var dependencies = new List <IDependency> {
                    ctx.Resolve <IReader>(),
                    new PlaceHolderModifier(),
                    ctx.Resolve <IRootModifier>(),
                    ctx.ResolveNamed <IValidator>("js"),
                    new IllegalCharacterValidator("ipc"),
                    new PlaceHolderValidator()
                };

                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"
                        }.WithDefaults());
                        foreach (var error in shr.Errors())
                        {
                            context.Error(error);
                        }
                        context.Error("Please fix you shorthand configuration.  No short-hand is being processed.");
                        dependencies.Add(new NullValidator("sh"));
                        dependencies.Add(new NullNodeModifier("sh"));
                    }
                    else
                    {
                        dependencies.Add(new ShorthandValidator(shr, "sh"));
                        dependencies.Add(new ShorthandModifier(shr, "sh"));
                    }
                }
                else
                {
                    dependencies.Add(new NullValidator("sh"));
                    dependencies.Add(new NullNodeModifier("sh"));
                }

                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;
                }

                // 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;
                        process = new Process(process.Serialize(), ctx.Resolve <ISerializer>());
                    }
                }

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


                return(process);
            }).As <Process>().InstancePerDependency();  // because it has state, if you run it again, it's not so good
        }
Esempio n. 8
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
        }