1年前に書いたStreaming Log With Capistranoというポストが巡り巡ってgemで利用できるようになりました、というお話。
@sonots だいぶ昔書いたのでいけてなコードですが、こんな感じでしょうか。orihubon.com/blog/2012/02/0…
— Nobuhiro Nikushiさん (@niku4i) 1月 8, 2013
//platform.twitter.com/widgets.js
@sonotsさんがCapistranoの話題のツイートしてて、昔似たことをやったので過去のポストを教えてあげたところgemになった!
@niku4i gemにしてみましたよ! github.com/sonots/capistr…
— そのっつ (SEO Naotoshi)さん (@sonots) 1月 11, 2013
//platform.twitter.com/widgets.js
@sonotsさん仕事早い。
gemにしていただいたので僕はこれをネタにブログを書くことにしました。
コードを読んでみた
alias_method
#lib/capistrano/colorized_stream.rb
alias_method :stream_without_color, :stream
alias_method :stream, :stream_with_color
- alias_methodを使うと既存メソッドは残しつつ、alias_methodで上書くことができるんですね
- 実は
alias
との違いがピンときていないのでまた別途
試してみた。
class A
def hello
'Hello!'
end
end
class A
def aisatsu
'Konichiwa!'
end
alias_method :greet, :hello
alias_method :hello, :aisatsu
end
A.new.hello # => "Konichiwa!"
A.new.greet # => "Hello!"
A#hello
が日本語に変更しつつ、A#greet
にてオリジナルの英語で挨拶することができました。
String#split
#lib/capistrano/colorized_stream.rb
lines = out.split(/r?n/m, -1)
-
/n/
ではなく/r?n/
と各とCRLFとLFをサポートする - splitの第2引数に負の値を与え、改行のみの行を空要素として配列を返す。すると改行がどの位置にあるか気にしなくてもよくなる(!)。
このsplit
の第2引数のようにRubyのコアクラスのAPIの知識に深ければ小さくコードが書ける実例だなとおもいました。
このあたりはプログラミング言語 Rubyの9章Rubyプラットフォームが充実してますね。難しいコードを書いたな….というときは標準のAPIで対応できないか、考え直してみるとよさそうですね。