コマンドラインアプリ作成にちょっと便利なStringの拡張
githubをうろうろしていたら「なるほど」と思ったコードを見つけたのでメモっておく。
get-twitter-oauth-token / bin / get-twitter-oauth-token (gistじゃないので残念ながら埋め込むことができない。コピペするのも微妙なのでリンクだけ提示しておく)
これは@jugyoさん作のコマンドラインからTwitterのOAuthのアクセストークンと秘密鍵を取得するスクリプトで、openコマンドを使ってるあたり多分Mac専用なんだと思う(Linuxとかでもあるのかな?)。
なるほどなーと思ったのはStringを拡張しているcolorとaskという二つのメソッド。
colorはその名のとおり文字列に色をつけるもので、引数numにはANSIエスケープシーケンス(?)で指定できる色の番号を渡す(「bashのプロンプトに色をつける」などを参照。zshでもいける)。
もうひとつのaskはユーザからの入力を受け付けを表示するもので、レシーバの文字列を印字してから入力された内容を返す。凄く短いメソッドだけど、これひとつだけで可読性が向上するから感動してしまった。
ただこれだとパスワードの入力もみえてしまうので、sttyを使って入力中の文字列を表示しないメソッドもあったほうが便利だと思い、ちょっと書いてみた。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# coding: utf-8 | |
class String | |
def color num | |
"\e[#{num}m#{self}\e[0m" | |
end | |
def ask | |
print "#{self}" | |
gets.strip | |
end | |
def ask_password | |
system("stty -echo") | |
print "#{self}" | |
gets.strip | |
ensure | |
system("stty echo") | |
end | |
end | |
if __FILE__ == $0 | |
login = "Login: ".color(36).ask | |
pass = "Password: ".color(31).ask_password | |
puts "" | |
end |
ask_passwordなんて長ったらしいけど、パスワードはそうそう聞くものでもないしまぁいいかな、と。askとcolorはそのまま拝借した。これがあるだけでコマンドラインアプリがちょっと書きやすくなるんじゃないかと思う。