ActiveSupportのstrip_heredocのコードを読んだ
Pepabo Advent Calendar 2015の12日目の記事です。昨日の担当は@udzuraさんで RailsGirls Fukuoka の準備を支えた技術 - ローファイ日記 でした。
<<~
本日から、RubyKaigi2015というイベントに参加しています。
Rubyの開発者であるMatzことまつもとさんのKeynoteでRuby2.3のキーノートで、1週間前くらいに <<~
というヒアドキュメントが使えるようになったと発表がありました。
これはActiveSupportの strip_heredoc
相当のもので、
先頭のインデントの一番浅いところにあわせて、先頭のスペース(またはタブ)を削除してくれます。
ActiveSupportの strip_heredoc
の実装を読んでみたくなったので、ざっと読みました。
実装は activesupport/lib/active_support/core_ext/string/strip.rb に書いてあります。
class String def strip_heredoc gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, ''.freeze) end end
scanして一番小さい(インデントが浅い)空白をgsubで置き換えているんですね、 以下はテストコードです。
def test_strip_heredoc_on_a_regular_indented_heredoc assert_equal "foo\n bar\nbaz\n", <<-EOS.strip_heredoc foo bar baz EOS end
ふむふむ、なるほど。
余談です
ruby2.3.0-preview2 をruby-buildでインストールしようとしたら、BUILD FAILEDになってしまった。
https://gist.github.com/kurotaky/726a442fc8812fb2e142
他にも同じ現象起きている人いるみたいですね。
原因はなんだろう...。 明日の担当者は未定ですが、担当不在の場合はruby2.3.0-preview2ビルドできない問題の近況報告かRubyKaigi2015のレポートなどを書いてみようと思います!