public override bool Evaluate(object value, ModelPathSettings settings, Func <string, string>?propertyNameTransformer) { Preconditions.NotNull(value, nameof(value)); var valueType = value.GetType(); var contract = JsonHelper.InternalPrivateContractResolver.ResolveContract(valueType); if (!(contract is JsonObjectContract objectContract)) { throw new InvalidOperationException($"value's type must resolve to a json object contract"); } var propertyName = propertyNameTransformer?.Invoke(PropertyName) ?? PropertyName; var property = objectContract.Properties.GetClosestMatchProperty(propertyName); if (property == null) { throw new InvalidOperationException($"Could not find property {propertyName} on {valueType}"); } var retrievedValue = property.ValueProvider.GetValue(value); string?defaultValue = null; if (retrievedValue == null && settings != null && settings.DefaultValues?.TryGetValue(propertyName, out defaultValue) == true) { retrievedValue = defaultValue !; } return(string.Equals(Value, retrievedValue?.ToString() ?? "false", StringComparison.OrdinalIgnoreCase)); }
public virtual bool Evaluate(object value, ModelPathSettings settings, Func <string, string>?propertyNameTransformer) => _terms.All(term => term.Evaluate(value, settings, propertyNameTransformer));