2012-08-16 30 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 

等等。這有點不好,但它應該起作用,並將代碼重複降到最低。