読者です 読者をやめる 読者になる 読者になる

bracecomp 0.1.0

https://rubygems.org/gems/bracecomp
https://bitbucket.org/winebarrel/bracecomp
まいどまいどのこまいライブラリのリリースです。

これは何?

bashとかのブレース展開をするライブラリです。
サンプルをみればやりたいことは分かると思います。

require 'bracecomp'

p 'server-{a,b}-{07..10}'.expand
#=> ["server-a-07", "server-a-08", "server-a-09", "server-a-10", "server-b-07", "server-b-08", "server-b-09", "server-b-10"]

p 'zone-{a..c}'.expand
#=> ["zone-a", "zone-b", "zone-c"]

なんでこんなん作ったの?

ブレース展開便利ですよね。
Cluster SSHでターミナルをばーっと開くときとか重宝します。
同じことをcapistranoでもやろうとしたんですよ。
そしたら「ROLES=...」が展開されない…


Rubyのライブラリで展開しようと思ったら、そんなライブラリは見つからないので仕方なく「ruby -e 'puts `echo server-{1..9}`.split(/\s/).join(",")'」としてみたり。


いーやーだーーーと思ったので作りました。

蛇足

rubyにはglobを展開する関数があるんですがstaticなんすよ。
bashのソースはライブラリとして使いにくいし。
(なんかlibglobが切り出されてましたが、文字列の展開には使ってないようです)
glibcのglobは「{1..9}」を展開できない。


結局、Raccでパーサを書きました。
ブレース展開ってそんなに需要ないのかしら?

追記

require 'bracecomp/capistrano'

これで「cap deploy ROLES='server-{01..05}'」とかできるようになりました