30 June 2014
チリドッグでRubyのヒアドキュメントを良くしよう! Introduce Tildoc gem for better heredocs
プロジェクト本体でヒアドキュメントを使うことはそんなに多くはないんですが、これがテストでは意外と使われるということがわかってきまして。そうすると、どうしてもこの醜さには耐え難いものがあるんです。
describe ATool::CLI do
before do
@expected = <<-EOS
Hello, Ruby!
I'm Here with Dog!
Where are You?
EOS
end
...
end
Pythonistaでなくともこの飛び出ちゃった感じはちょっとねぇ。
で、随分以前に先頭空白を除去するコードをString#~
に割り当てるという荒業を考えまして。
class String
def ~
margin = scan(/^ +/).map(&:size).min
gsub(/^ {#{margin}}/, '')
end
end
このコードをspec_helper
当たりに差しておくと、ヒアドキュメントの<<
の前に~
(チルダ)を入れるだけで、平和がやって来ます。
describe ATool::CLI do
before(:all) do
@expected = ~<<-EOS
Hello, Ruby!
I'm Here with Dog!
Where are You?
EOS
end
...
end
で、毎回、先の記事を開いてコードをhelperにコピペするという作業をしていたのですが、それも骨が折れます。
そんなわけで…。
またチンピラGemを一つ増やしました。
tilde + heredoc = tildoc
です😅
#gemspec
spec.add_development_dependency "tildoc"
とか
#Gemfile
group :development, :test do
gem "tildoc"
end
とすれば幸せになれるかもしれません。ActiveSupportのString#strip_heredoc
やHomebrewのString#undent
と等価なものですが、EOS
(開始ラベル)の後ろにこれらメソッド名書くのどうなのと思っている人に。
そういえばこれ前に、Featureリスエストも出してみたんですけど、やっぱり採用には至りませんでした…。
Feature #6801: String#~ for a here document - ruby-trunk - Ruby Issue Tracking System
blog comments powered by Disqus