プロジェクト本体でヒアドキュメントを使うことはそんなに多くはないんですが、これがテストでは意外と使われるということがわかってきまして。そうすると、どうしてもこの醜さには耐え難いものがあるんです。

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

チルダがRubyのヒアドキュメントをもっと良くする

このコードを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を一つ増やしました。

tildoc

melborne/tildoc

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
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS