public string StringifyAllowedValues(Answer answer)
        {
            IEnumerable<string> allowedValues = answer.AllowedValues.Select(
                value => String.Format("'{0}'", value)
            );

            return String.Join(", ", allowedValues);
        }
        internal override void Validate(Answer answer)
        {
            Valid = answer.Optional || !answerUtils.IsEmpty(answer);

            if (!Valid)
            {
                ErrorMessage = "Please answer the question.";
            }
        }
        internal override void Validate(Answer answer)
        {
            Valid = File.Exists(answer.Value);

            if (!Valid)
            {
                ErrorMessage = string.Format("File '{0}' does not exist.", answer.Value);
            }
        }
        public string DetermineDefaultValue(Answer answer)
        {
            if (answer.DefaultValueCallback != null)
            {
                return answer.DefaultValueCallback();
            }

            return answer.DefaultValue;
        }
        internal override void Validate(Answer answer)
        {
            Valid = !answerUtils.AreAllowedValuesSpecified(answer) || answerUtils.IsValueAllowed(answer);

            if (!Valid)
            {
                string template = "Invalid answer. Only the following values are allowed: {0}.";
                ErrorMessage = string.Format(template, answerUtils.StringifyAllowedValues(answer));
            }
        }
        public bool Run(Answer answer)
        {
            foreach (BaseValidator validator in answer.Validators)
            {
                validator.SetAnswerUtils(answerUtils);
                validator.Validate(answer);

                if (!validator.Valid)
                {
                    console.WriteError(validator.ErrorMessage);

                    return true;
                }
            }

            return false;
        }
 internal abstract void Validate(Answer answer);
 public bool IsValueAllowed(Answer answer)
 {
     return new List<string>(answer.AllowedValues).Contains(answer.Value);
 }
 public bool IsEmpty(Answer answer)
 {
     return answer.Value.Length == 0;
 }
 public bool IsDefaultValueSpecified(Answer answer)
 {
     return answer.DefaultValueCallback != null || answer.DefaultValue.Length > 0;
 }
 public bool AreAllowedValuesSpecified(Answer answer)
 {
     return answer.AllowedValues.Length > 0;
 }