1. 概要
@y_yagiさんのrails commit log流し読みを読んでいてわからなかったこと調べてみました
2. 読んだエントリ
3. わからなかったこと
- PRの中の処理に書かれていた
rack_app < Rails::Engine
とは何だろう?
4. PRを読んでみる
対象のPR
1. どんな修正内容?
Make engine check more explicit
actionpack/lib/action_dispatch/routing/endpoint.rbの修正です。
Routing::Endpoint#engine?メソッドでappがengineかどうかをチェックするのに、routesメソッドが定義されているかどうかで判定していたのを、appかRails::Engineの子クラスかどうかで判定するよう修正しています。
engineではないがroutesメソッドが定義されているケースがある(e.g. Grape APIのendpoint)為。
引用:rails commit log流し読み(2018/03/25)
2. 対象のPRの内容
5. PR読んでてわからない部分調べてみた
1. rack_app < Rails::Engine
とは何だろう?
記述箇所は該当PRの下記部分になります
def engine? rack_app.is_a?(Class) && rack_app < Rails::Engine end
特定のクラスを継承しているかチェックしている処理とのことでした
※ 調べてみたら@semind氏のQiitaに記事がありました
実際の挙動を確認してみました
ChildクラスがParentクラスを継承している場合
継承関係にあったので、戻り値がtrueになっています
つまり、 def engine?
の処理は
rack_app.is_a?(Class) && rack_app < Rails::Engine
rack_app
がクラスであり、かつ Rails::Engine
を継承しているかを判定している処理でした