示例#1
0
        public void Write(CustomTranslationContext context, string url, string httpMethod, IList <MemberExpression> members)
        {
            var w = context.Writer;

            w.Write("dryv.validateAsync('");
            w.Write(url);
            w.Write("', '");
            w.Write(httpMethod);
            w.Write("', {");

            var sep = string.Empty;

            foreach (var memberExpression in members)
            {
                w.Write(sep);
                w.Write(memberExpression.Member.Name.ToCamelCase());
                w.Write(": ");

                context.Translator.Translate(memberExpression, context);

                sep = ",\n";
            }

            w.Write("})");
        }
示例#2
0
        public bool TryTranslate(CustomTranslationContext context)
        {
            if (!(context.Expression is MemberExpression memberExpression))
            {
                return(false);
            }

            if (!Equals(memberExpression.Member, SuccessProperty))
            {
                return(false);
            }

            if (!(memberExpression.Expression is MethodCallExpression methodCallExpression))
            {
                return(false);
            }

            var result = FindRegularExpression(methodCallExpression);

            if (result == null)
            {
                throw new DryvMethodNotSupportedException(methodCallExpression, "Could not determine regular context.Expression.");
            }

            var clientRegexp = $"/{result.Pattern}/{TranslateRegexOptions(result.Options)}";

            context.Writer.Write(clientRegexp);
            context.Writer.Write(".test(");
            WriteArguments(context.Translator, new[] { result.Test }, context);
            context.Writer.Write(")");

            return(true);
        }
示例#3
0
        public bool TryTranslate(CustomTranslationContext context)
        {
            if (!(context.Expression is MethodCallExpression methodCallExpression))
            {
                return(false);
            }

            if (!typeof(Task).IsAssignableFrom(methodCallExpression.Method.ReturnType))
            {
                return(false);
            }

            if (typeof(Task).IsAssignableFrom(methodCallExpression.Method.DeclaringType))
            {
                if (methodCallExpression.Method.Name != nameof(Task.FromResult))
                {
                    return(false);
                }

                context.Translator.Translate(methodCallExpression.Arguments.First(), context);
                return(true);
            }

            var controller     = this.GenerateController(methodCallExpression, context);
            var url            = this.linkGenerator.GetPathByRouteValues(controller.Name, null);
            var httpMethod     = this.options.Value.HttpMethod.ToString().ToUpper();
            var usedProperties = FindModelPropertiesInExpression(context, methodCallExpression);

            this.controllerCallWriter.Write(context, url, httpMethod, usedProperties);

            return(true);
        }
示例#4
0
        public bool TryTranslate(CustomTranslationContext context)
        {
            if (!(context.Expression is MemberExpression memberExpression) ||
                memberExpression.Member != SuccessMember)
            {
                return(false);
            }

            context.Writer.Write("null");
            return(true);
        }
示例#5
0
        public bool TryTranslate(CustomTranslationContext context)
        {
            if (!TryGetBinaryExpression(context.Expression, out var binaryExpression))
            {
                return(false);
            }

            context.Translator.Translate(binaryExpression.Left, context);
            context.Translator.Translate(binaryExpression.Right, context);

            return(true);
        }
示例#6
0
        private static List <MemberExpression> FindModelPropertiesInExpression(CustomTranslationContext context, MethodCallExpression methodCallExpression)
        {
            var f = new ControllerGenerator.ChildFinder <MemberExpression>();

            foreach (var argument in methodCallExpression.Arguments)
            {
                f.Visit(argument);
            }

            return(f.FoundChildren
                   .Where(e => e.Member is PropertyInfo)
                   .Where(e => e.Member.DeclaringType == context.ModelType)
                   .ToList());
        }
示例#7
0
        public bool TryTranslate(CustomTranslationContext context)
        {
            if (!(context.Expression is MethodCallExpression methodCallExpression))
            {
                return(false);
            }

            if (methodCallExpression.Method.Name != nameof(object.ToString) || methodCallExpression.Arguments.Any())
            {
                return(false);
            }

            context.Writer.Write("String(");
            context.Translator.Translate(methodCallExpression.Object, context);
            context.Writer.Write(")");

            return(true);
        }