public string CreateConditionalPatchScript <TDocument>(PropertyUpdateDescriptor[] propertyUpdates, Expression <Func <TDocument, bool> > condition, ScriptParameterDictionary parameters) { var scriptCondition = _patchScriptConditionBuilder.CreateScriptCondition(condition, parameters); var scriptBody = _patchScriptBodyBuilder.CreateScriptBody(propertyUpdates, parameters); return(string.Join( "\n", $"if ({scriptCondition}) {{", scriptBody, "}")); }
private static void PrintCondition(Expression <Func <TestDocument, bool> > expression) { var originalColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("***********************************************************************************"); Console.WriteLine("C# Expression:"); Console.Write("\t"); Console.WriteLine(expression.ToString()); Console.WriteLine(); var parameters = new ScriptParameterDictionary(); var script = patchScriptConditionBuilder.CreateScriptCondition(expression, parameters); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Created JavaScript expression:"); Console.Write("\t"); Console.WriteLine(script); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Parameters:"); foreach (var parameter in parameters) { Console.Write("\t"); string value; if (parameter.Value is string || parameter.Value is char) { value = '"' + parameter.Value.ToString().Replace("\"", "\\\"") + '"'; } else if (parameter.Value == null) { value = "null"; } else { value = parameter.Value.ToString(); } Console.WriteLine($"{parameter.Key}: {value}"); } Console.WriteLine(); Console.ForegroundColor = originalColor; Console.WriteLine(); }