/
CommandUsage.cs
43 lines (36 loc) · 1.38 KB
/
CommandUsage.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.Collections.Generic;
using System.Linq;
namespace FubuCore.CommandLine
{
public class CommandUsage
{
public string Description { get; set; }
public IEnumerable<Argument> Arguments { get; set; }
public IEnumerable<ITokenHandler> ValidFlags { get; set; }
public UsageReport ToReport(string appName, string commandName)
{
return new UsageReport
{
Description = Description,
Usage = ToUsage(appName, commandName)
};
}
public string ToUsage(string appName, string commandName)
{
return "{0} {1} {2}".ToFormat(appName, commandName,
(Arguments.Cast<ITokenHandler>().Union(ValidFlags).Select(x => x.ToUsageDescription()))
.Join(" "));
}
public bool IsValidUsage(IEnumerable<ITokenHandler> handlers)
{
var actualArgs = handlers.OfType<Argument>();
if (actualArgs.Count() != Arguments.Count()) return false;
if (!Arguments.All(x => actualArgs.Contains(x)))
{
return false;
}
var flags = handlers.Where(x => !(x is Argument));
return flags.All(x => ValidFlags.Contains(x));
}
}
}