public PatchRequest CreatePatchRequest <TDocument>(PropertyUpdateDescriptor[] propertyUpdates, Expression <Func <TDocument, bool> > condition) { var parameters = new ScriptParameterDictionary(); var patchRequest = new PatchRequest { Values = parameters, Script = _patchScriptBuilder.CreateConditionalPatchScript(propertyUpdates, condition, parameters) }; return(patchRequest); }
public string CreateScriptBody(PropertyUpdateDescriptor[] propertyUpdates, ScriptParameterDictionary parameters) { var assignmentScripts = new List <string>(propertyUpdates.Length); foreach (var propertyUpdate in propertyUpdates) { var transformedMemberSelector = GetNormalizedExpression(propertyUpdate.MemberSelector); var assignmentExpression = Expression.Assign( transformedMemberSelector, Expression.Constant(propertyUpdate.NewValue)); assignmentScripts.Add(_expressionProcessorPipeline.ProcessExpression(assignmentExpression, parameters)); } return(string.Join( "\n", assignmentScripts.Select(script => $"\t{script};"))); }
public string CreateScriptCondition <TDocument>(Expression <Func <TDocument, bool> > condition, ScriptParameterDictionary parameters) { if (condition == null) { throw new ArgumentNullException(nameof(condition)); } if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } var normalizedConditionBody = GetNormalizedConditionBody(condition); return(_expressionProcessorPipeline.ProcessExpression(normalizedConditionBody, parameters)); }
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, "}")); }