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));
        };
Пример #9
0
        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>());
Пример #12
0
 private Option <double> QueryValueFromUser(IUserInputDescription variable)
 => ValidatedUserInput
 .GetValidatedValue(variable, RequesterValidations(variable))
 .SelectMany(ToDouble);
Пример #13
0
 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));
Пример #17
0
 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));
Пример #20
0
        protected override string InteractiveQuery(IUserInputDescription variable)
        {
            ValidatedUserInput.WriteQuestion(variable, "Please enter a valid double number for '{0}':");

            return(Retry(() => QueryValueFromUser(variable)).ToString(CultureInfo.InvariantCulture));
        }
Пример #21
0
        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>();
Пример #23
0
 protected abstract string InteractiveQuery(IUserInputDescription variable);
Пример #24
0
 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."));
Пример #25
0
 protected abstract IEnumerable <IValidation> RequesterValidations(IUserInputDescription variable);
Пример #26
0
 private Option <string> QueryValueFromUser(IUserInputDescription variable)
 => ValidatedUserInput.GetValidatedValue(variable, RequesterValidations(variable));
Пример #27
0
 public string RequestValue(IUserInputDescription variable, Option <string> userArgument)
 {
     return(ValidatedUserInput.ValidateArgument(variable, userArgument, RequesterValidations(variable))
            .GetOrElse(() => InteractiveQuery(variable)));
 }