public Option <string> GetValidatedValue(IUserInputDescription variable, IEnumerable <IValidation> requesterValidations) { _consoleWriter.WriteLine(); _consoleWriter.Write($"{variable.VariableName}: "); return(Validate(variable, requesterValidations)(_consoleReader.ReadLine())); }
public void WriteQuestion(IUserInputDescription variable, string defaultQuestion) { var question = variable.VariableQuestion.GetOrElse(defaultQuestion); _consoleWriter.WriteLine(); _consoleWriter.WriteLine(FormatWithVariableName(question, variable.VariableName)); }
private Func <string, Option <string> > Validate(IUserInputDescription variable, IEnumerable <IValidation> requesterValidations) => userInput => variable .Validations .Concat(requesterValidations) .Where(validation => validation.Validation(userInput) == false) .Aggregate(Option.Some(userInput), (_, validation) => AggregateValidationErrors(validation, variable.VariableName));
private static void AtLeastOneValueAvailable(IUserInputDescription variable) { if (variable.VariableSelectionValues.Any() == false) { throw new ArgumentOutOfRangeException(nameof(variable)); } }
private Action <string> EchoVariable(IUserInputDescription variable) => argument => { _consoleWriter.WriteLine(); _consoleWriter.WriteLine($"{variable.VariableName}*: {argument}"); };
protected override string InteractiveQuery(IUserInputDescription variable) { AtLeastOneValueAvailable(variable); ValidatedUserInput.WriteQuestion(variable, "Please select one of the given values for '{0}':"); WriteOptions(variable); return(Retry(() => QueryValueFromUser(variable))); }
private static Option CreateOption(IUserInputDescription userInput) { var option = new Option(UserOptionFormat.ToUserOption(userInput.VariableName), userInput.VariableDescription.GetOrElse(string.Empty)) { Argument = new Argument <string>(), }; return(option); }
private static Func <string, bool> IsValuePossible(IUserInputDescription variable) => input => { var maybeValue = input.ParseIntOrNone(); return(maybeValue.Match( false, value => value > 0 && value <= variable.VariableSelectionValues.Count)); };
protected override string InteractiveQuery(IUserInputDescription variable) { ValidatedUserInput.WriteQuestion(variable, "Please enter a valid time for '{0}':"); return(Retry(() => QueryValueFromUser(variable)).ToString()); }
protected override IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable) => Sequence.Return(SimpleValidation.Create(IsValuePossible(variable), $"Please select from the possible options between 1 and {ToHumanIndex(variable.VariableSelectionValues.Count - 1)}"));
private Option <string> QueryValueFromUser(IUserInputDescription variable) => ValidatedUserInput.GetValidatedValue(variable, Enumerable.Empty <IValidation>());
private Option <double> QueryValueFromUser(IUserInputDescription variable) => ValidatedUserInput .GetValidatedValue(variable, RequesterValidations(variable)) .SelectMany(ToDouble);
protected override IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable) => Sequence.Return(SimpleValidation.Create(IsValidInput, "Please enter a valid double value."));
private void WriteOptions(IUserInputDescription variable) => variable .VariableSelectionValues .WithIndex() .ForEach(WriteOption);
private static Option <string> IndexToValue(string input, IUserInputDescription variable) { var index = int.Parse(input); return(Option.Some(variable.VariableSelectionValues[FromHumanIndex(index)].Value !)); }
private Option <string> QueryValueFromUser(IUserInputDescription variable) => ValidatedUserInput .GetValidatedValue(variable, RequesterValidations(variable)) .SelectMany(input => IndexToValue(input, variable));
protected override IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable) => Sequence.Return(SimpleValidation.Create(IsValidInput, $"Please enter a valid time (like: {new TimeSpan(13, 37, 42)})."));
protected override IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable) => Sequence.Return(SimpleValidation.Create(IsValidInput, $"Please enter a valid date and time (like: {new DateTime(2000, 1, 1)})."));
public Option <string> ValidateArgument(IUserInputDescription variable, Option <string> userArgument, IEnumerable <IValidation> requesterValidations) => userArgument .Inspect(EchoVariable(variable)) .SelectMany(Validate(variable, requesterValidations));
protected override string InteractiveQuery(IUserInputDescription variable) { ValidatedUserInput.WriteQuestion(variable, "Please enter a valid double number for '{0}':"); return(Retry(() => QueryValueFromUser(variable)).ToString(CultureInfo.InvariantCulture)); }
protected override string InteractiveQuery(IUserInputDescription variable) { ValidatedUserInput.WriteQuestion(variable, "Please enter a valid path which already exists '{0}':"); return(Retry(() => QueryValueFromUser(variable))); }
protected override IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable) => Enumerable.Empty <IValidation>();
protected abstract string InteractiveQuery(IUserInputDescription variable);
protected override IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable) => Sequence.Return(SimpleValidation.Create(PathExists, "The path you have given does not exists, please enter an existing path."));
protected abstract IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable);
private Option <string> QueryValueFromUser(IUserInputDescription variable) => ValidatedUserInput.GetValidatedValue(variable, RequesterValidations(variable));
public string RequestValue(IUserInputDescription variable, Option <string> userArgument) { return(ValidatedUserInput.ValidateArgument(variable, userArgument, RequesterValidations(variable)) .GetOrElse(() => InteractiveQuery(variable))); }