1

gemRubyでCLIコマンドをエレガントにルーティングする方法を探しているか、考えています。Thor私がすでに使用しているソリューションであり、特定のコマンドライン構造を構築できるという意味で素晴らしいです。例:

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はこれをサポートしていないので、実装する必要があります。コマンドを前処理してトールに送信するレイヤーをトールの上に構築します。私はそれを行うための最良の方法を探しています。の乱雑な構造を避けるためにホッピングしていcase/when/when...ます。ありがとうございました。

4

4 に答える 4

1

コカインを強くお勧めします!https://rubygems.org/gems/cocaine

于 2012-08-16T13:49:05.183 に答える
0

これを行う簡単な方法は、2 つの実行可能ファイルを作成することです。1 つは、personすべての機能を実装する現在の実行可能ファイルです。

2 つ目は「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

などなど。ちょっとハックですが、動作し、コードの重複を最小限に抑える必要があります。

于 2012-08-17T12:36:46.313 に答える