2012-08-16 86 views
1

我在寻找gem或想法如何在Ruby中明确路由CLI命令。 Thor是我已经使用的解决方案,它允许您构建特定的命令行结构,这很好。例如:在Ruby中路由CLI命令

person show 1    => Info about person Id 1 
person show all    => Show all people 
person delete 2    => Delete person with Id 2 

Thor在这个伟大的,我强烈推荐它。现在我有一个需要更多的语义定向CLI结构,例如:

show person 1    => Same as 'show person 1' 
show people     => Same as 'show person all' 
etc... 

Thor不支持这个,所以我需要实现它。我将在thor上面建立一个预处理命令并将它们发送给thor的图层。我正在寻找最好的方式来做到这一点。我在跳转以避免case/when/when...的混乱结构。谢谢。

+0

我在跳一些回答这个问题,用可卡因宝石链接说:“我强烈推荐可卡因!” :) – 2012-08-16 12:38:18

回答

0

一个简单的方法是创建两个可执行文件:一个是您当前的一个person,它实现了所有的功能。

第二个可能被称为'person-app`,并被设计为符号链接。例如

> ln -s person-app show 
> ln -s person-app delete 
> whatever else 

所以,现在您有几个符号链接到同一个应用程序,person-appperson-app可以检测使用了哪个符号链接通过检查$0,然后制定一个电话person

case File.basename($0) 
when 'show' then system("person show #{ARGV.join(' ')}") 
when 'delete' then system("person delete #{ARGV.join(' ')}") 
end 

等等。这有点不好,但它应该起作用,并将代码重复降到最低。