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にして依存関係も解決するようにしておけば、導入も簡単になってさらに良い。
[ツッコミを入れる]