mixlib-cliのオプションで複数の値を渡す

github.com

mixlib-cli、便利ですよね。

この option で同じオプションで複数の値を渡したい時はどうすればいいか

例えば --hosts複数のホストの情報を渡したいとか。

ぱっと調べた感じ&動作を見た感じでは、 cmd --hosts host1 --hosts host2 とかいう渡し方でうまく処理してくれるということはなさそう

:proc オプションを使うとそれっぽくできる

:proc オプションは、 Proc を渡しておくと渡された値をその関数で前処理しておいてくれる。

options :hosts,
             :long => "--hosts",
             :proc => Proc.new { |a| a.split(",") }

↑のようにしておくと cmd --hosts host1,host2複数の値をカンマ区切りで渡せば、プログラム内で config[:hosts] = ["host1", "host2"] として使える。