public ICommandDescriptor Execute(ref string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return(null);
            }
            var firstToken = input.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();

            if (string.IsNullOrEmpty(firstToken))
            {
                return(null);
            }

            var noun = firstToken.SelectHumps(_commandRepository.Nouns).OneOrDefault();

            if (noun == null)
            {
                return(null);
            }

            var command = _commandRepository.Distinct(CommandDescriptorComparer.VerbNoun).Where(x => x != null && x.Noun.EqualsNoCase(noun) && x.IsDefault).OneOrDefault();

            if (command != null)
            {
                input = input.TrimStart().Substring(noun.Length).TrimStart();
            }

            return(command);
        }
示例#2
0
        public ICommandDescriptor FindCommand(string verbNounToken)
        {
            var commands = _commands.Distinct(CommandDescriptorComparer.VerbNoun).ToDictionary(x => x.Verb + "-" + x.Noun);


            var matching = verbNounToken.Contains('-')
                               ? verbNounToken.SelectHumps(commands.Keys).SingleOrDefault()
                               : null;

            return(matching == null ? null : commands[matching]);
        }