ただのにっき
2013-11-28(木) [長年日記]
■ 対話型のコンソールアプリをpryの上に構築したらだいぶ楽できた
ゆえあってちょっとした対話型のアプリ、それもWebじゃなくてLinuxコンソールで動くものを作る必要が出てきた。入力をパースしたりするのも面倒だしなーと思い、ためしにpry上のDSLみたいな感じで作ってみたらなかなかいいものが簡単にできた。うん、これは楽でいいなぁ。今後も使おう。
こんな感じのsample.rbを書いて(2013-12-03追記: pryの仕様に合わせて一部リライト):
require 'pry' # business logic module Sample def self.hello(name) "Hello #{name}!" end end # helloというコマンドを定義する Pry.commands.block_command 'hello' do |*args| args.map{|name| output.puts Sample.hello(name)} end # pry標準のhelpはあえて潰してよけいなものを見せない Pry.commands.block_command 'help' do output.puts "hello [name...] : say hello" end # プロンプトをいじると専用アプリっぽさが増す Pry.prompt = [ proc{"sample> "}, proc{"sample* "}, ] puts "type 'help' to help. type 'exit' to terminate.\n\n" pry
実行する:
$ ruby sample.rb type 'help' for help. type 'exit' for terminate. sample> help hello [name...] : say hello sample> hello hoge Hello hoge! sample> hello foo "bar baz" Hello foo! Hello bar baz! sample> exit $
もちろんgemにして依存関係も解決するようにしておけば、導入も簡単になってさらに良い。