internal ValitRule(IValitRule <TObject, TProperty> previousRule) : this() { var previousRuleAccessor = previousRule.GetAccessor(); _propertySelector = previousRuleAccessor.PropertySelector; _previousRule = previousRule; _messageProvider = previousRuleAccessor.GetMessageProvider(); }
public static IValitRule <TObject, TProperty> Tag <TObject, TProperty>(this IValitRule <TObject, TProperty> rule, params string[] tags) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); tags.ThrowIfNull(); var accessor = rule.GetAccessor(); accessor.AddTags(tags); return(rule); }
public static IValitRule <TObject, TProperty> When <TObject, TProperty>(this IValitRule <TObject, TProperty> rule, Predicate <TObject> condition) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); condition.ThrowIfNull(ValitExceptionMessages.NullPredicate); var accessor = rule.GetAccessor(); accessor.AddCondition(condition); return(rule); }
public static IValitRule <TObject, TProperty> WithErrorCode <TObject, TProperty>(this IValitRule <TObject, TProperty> rule, int errorCode) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); var accessor = rule.GetAccessor(); var error = ValitRuleError.CreateForErrorCode(errorCode); accessor.AddError(error); return(rule); }
public static IValitRule <TObject, TProperty> WithMessageKey <TObject, TProperty, TKey>(this IValitRule <TObject, TProperty> rule, TKey messageKey) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); var accessor = rule.GetAccessor(); var messageProvider = accessor.GetMessageProvider <TKey>(); var error = ValitRuleError.CreateForMessage(() => messageProvider.GetByKey(messageKey)); accessor.AddError(error); return(rule); }
internal static IValitRule <TObject, TProperty> WithDefaultMessage <TObject, TProperty>(this IValitRule <TObject, TProperty> rule, string message, params object[] @params) where TObject : class { var accessor = rule.GetAccessor(); var memberExpression = accessor.PropertySelector.Body as MemberExpression; var propertyName = memberExpression != null ? memberExpression.Member.Name : string.Empty; var messageParams = @params.Any() ? new [] { propertyName }.Concat(@params).ToArray() : new [] { propertyName }; var formattedMessage = string.Format(message, messageParams); return(rule.WithMessage(formattedMessage, true)); }
internal static IValitRule <TObject, TProperty> WithMessage <TObject, TProperty>(this IValitRule <TObject, TProperty> rule, string message, bool isDefault) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); message.ThrowIfNull(); var accessor = rule.GetAccessor(); var error = ValitRuleError.CreateForMessage(() => message, isDefault); accessor.AddError(error); return(rule); }
public static IValitRule <TObject, TProperty> WithMessage <TObject, TProperty>( this IValitRule <TObject, TProperty> rule, Func <string> messageFunc) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); messageFunc.ThrowIfNull(); var accessor = rule.GetAccessor(); var error = ValitRuleError.CreateForMessage(messageFunc); accessor.AddError(error); return(rule); }
internal static IEnumerable <IValitRule <TObject> > GetAllEnsureRules <TObject, TProperty>(this IValitRule <TObject, TProperty> rule) where TObject : class { var rules = new List <IValitRule <TObject> > { rule }; var previousRule = rule.GetAccessor().PreviousRule; while (previousRule != null) { rules.Add(previousRule); previousRule = previousRule.GetAccessor().PreviousRule; } rules.Reverse(); return(rules); }
public static IValitRule <TObject, TProperty> Satisfies <TObject, TProperty>(this IValitRule <TObject, TProperty> rule, Predicate <TProperty> predicate) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); predicate.ThrowIfNull(ValitExceptionMessages.NullPredicate); IValitRuleAccessor <TObject, TProperty> accessor; if (rule.IsFirstInEnsure()) { accessor = rule.GetAccessor(); accessor.SetPredicate(predicate); return(rule); } var newRule = new ValitRule <TObject, TProperty>(rule); accessor = newRule.GetAccessor(); accessor.SetPredicate(predicate); return(newRule); }
internal static bool IsFirstInEnsure <TObject, TProperty>(this IValitRule <TObject, TProperty> rule) where TObject : class => rule.GetAccessor().PreviousRule == null && !rule.GetAccessor().HasPredicate();