protected override async Task<Variable> EvaluateAsync(ParsingScript script) { List<Variable> args = script.GetFunctionArgs(); Utils.CheckArgs(args.Count, 2, m_name); string method = args[0].AsString().ToUpper(); string uri = args[1].AsString(); string load = Utils.GetSafeString(args, 2); string tracking = Utils.GetSafeString(args, 3); string onSuccess = Utils.GetSafeString(args, 4); string onFailure = Utils.GetSafeString(args, 5, onSuccess); string contentType = Utils.GetSafeString(args, 6, "application/x-www-form-urlencoded"); Variable headers = Utils.GetSafeVariable(args, 7); int timeoutMs = Utils.GetSafeInt(args, 8, 10 * 1000); bool justFire = Utils.GetSafeInt(args, 9) > 0; if (!s_allowedMethods.Contains(method)) { throw new ArgumentException("Unknown web request method: " + method); } await ProcessWebRequestAsync(uri, method, load, onSuccess, onFailure, tracking, contentType, headers, timeoutMs, justFire); return Variable.EmptyInstance; }
protected override Variable Evaluate(ParsingScript script) { List<Variable> args = script.GetFunctionArgs(); Utils.CheckArgs(args.Count, 1, m_name); string source = Utils.GetSafeString(args, 0); string argument = Utils.GetSafeString(args, 1); string parameter = Utils.GetSafeString(args, 2, "case"); int startFrom = Utils.GetSafeInt(args, 3, 0); int length = Utils.GetSafeInt(args, 4, source.Length); StringComparison comp = StringComparison.Ordinal; if (parameter.Equals("nocase") || parameter.Equals("no_case")) { comp = StringComparison.OrdinalIgnoreCase; } source = source.Replace("\\\"", "\""); argument = argument.Replace("\\\"", "\""); switch (m_mode) { case Mode.CONTAINS: return new Variable(source.IndexOf(argument, comp) >= 0); case Mode.STARTS_WITH: return new Variable(source.StartsWith(argument, comp)); case Mode.ENDS_WITH: return new Variable(source.EndsWith(argument, comp)); case Mode.INDEX_OF: return new Variable(source.IndexOf(argument, startFrom, comp)); case Mode.EQUALS: return new Variable(source.Equals(argument, comp)); case Mode.REPLACE: return new Variable(source.Replace(argument, parameter)); case Mode.UPPER: return new Variable(source.ToUpper()); case Mode.LOWER: return new Variable(source.ToLower()); case Mode.TRIM: return new Variable(source.Trim()); case Mode.SUBSTRING: startFrom = Utils.GetSafeInt(args, 1, 0); length = Utils.GetSafeInt(args, 2, source.Length); length = Math.Min(length, source.Length - startFrom); return new Variable(source.Substring(startFrom, length)); case Mode.BEETWEEN: case Mode.BEETWEEN_ANY: int index1 = source.IndexOf(argument, comp); int index2 = m_mode == Mode.BEETWEEN ? source.IndexOf(parameter, index1 + 1, comp) : source.IndexOfAny(parameter.ToCharArray(), index1 + 1); startFrom = index1 + argument.Length; if (index1 < 0 || index2 < index1) { throw new ArgumentException("Couldn't extract string between [" + argument + "] and [" + parameter + "] + from " + source); } string result = source.Substring(startFrom, index2 - startFrom); return new Variable(result); } return new Variable(-1); }