public ValidatedCommand ValidateCommand(CommandName commandName)
 {
     var command = _allCommands.FirstOrDefault(cn => cn.Name.ToLower().Equals(commandName.Name.ToLower()));
     if (command == null)
     {
         return null;
     }
     var clone = CreateCleanCommandClone(command);
     return new ValidatedCommand { FoundCommand = command, CloneCommand = clone };
 }
        public IList<Option> GetOptions(CommandName name, Command command)
        {
            if (!name.CleanInput.Contains('-'))
            {
                return null;
            }
            var rawOptions = name.CleanInput.Split('-');
            if (!rawOptions.Any())
            {
                return null;
            }
            var options = new List<Option>();
            foreach (var rawOption in rawOptions)
            {
                if (string.IsNullOrWhiteSpace(rawOption))
                {
                    continue;
                }
                string optionName = String.Empty;
                try
                {
                    int firstWhitespace = rawOption.IndexOf(' ');
                    if (firstWhitespace == -1)
                    {
                        optionName = rawOption;
                    }
                    else
                    {
                        optionName = rawOption.Substring(0, firstWhitespace);
                    }
                }
                catch
                {
                    continue;
                }

                var cOption =
                        command.Options.FirstOrDefault(c => c.Identifier.ToLower().Equals(optionName.ToLower()));
                if (cOption == null)
                {
                    continue;
                }
                var clone = new Option();
                clone = Mapper.Map(cOption, clone);
                if (!cOption.HaveParameters)
                {
                    options.Add(clone);
                    continue;
                }
                var parameters = GetParameters(rawOption.Replace(optionName + " ", ""));
                if (parameters == null)
                {
                    options.Add(clone);
                    continue;
                }
                clone.Parameters = parameters;
                options.Add(clone);

            }
            return options;
        }