==、eql?、equal?

equal? は、同一オブジェクトの場合にtrue
Object#equal?(other) は決してオーバーライドされない。これは、otherと同一オブジェクトの場合、つまりobject_idが等しい場合のみ、trueを返す。
== と eql? は、等価の場合にtrue
一方、==とeql?は、各サブクラスによってオーバーライドされる。
通常は、==とeql?はともに、等価の場合にtrueを返すが、例外としてNumericタイプでは、以下のように==とeql?は異なる。
例外としてNumericタイプでは、==とeql?は異なる
Class: Numeric

1 == 1.0          #=> true
1.eql?(1.0)       #=> false
(1.0).eql?(1.0)   #=> true

ヒアドキュメント (行指向文字列リテラル)

Rubyリファレンスマニュアル - リテラル

<<識別子' を含む行の次の行から `識別子' だけの行の直前までを文字列とする。

ヒアドキュメントでは、開始ラベル `<<識別子' が文法要素としての式にあたります。これは、開始ラベルを使ってヒアドキュメント全体を引数に渡したりレシーバにしたりすることができるということを意味します。

開始ラベルを `<<-識別子' のように `-' を付けて書くことで終端行をインデントすることができます。

一行に複数のヒアドキュメントを書くこともできます。

開始ラベル `<<識別子' の `識別子' を(""、''、``)のいずれかで囲むことで、ヒアドキュメントとなる文字列リテラルの性質は対応する文字列リテラルと同じ扱いになります。

Developer Blog