※ ChatGPTを利用し、要約された質問です(原文:gem内部での$LOAD_PATHの制御)
gem内部での$LOAD_PATHの制御
このQ&Aのポイント
gemの中でautoloadされているhelper関数を拡張したい場合、$LOAD_PATHの制御が必要です。
通常はgemspecファイルで制御することができます。
gemspecファイルに$LOAD_PATHの制御を追加することで、拡張gemの方が先に参照されるようにできます。
特定のrailsのgemにさらに機能を追加してくて、新しくgemを作成しました。
gemはtypusというgemです。
https://github.com/typus/typus
これの、gemの中でautoloadされているhelper関数を拡張したいと思っています。
問題はそのためのgemの作り方で、helper関数はautoloadされるので、モンキーパッチングの適応が出来ません。
なので、typusのhelper関数よりも前に、拡張を行うgemの方で、拡張済のhelperを読み込む様にしないといけません。
そうなると、$LOAD_PATHの中で確実にtypusよりも、拡張gemの方が先に参照できる様にしないといけないのですが
普通これはどうすでばいいのでしょうか?
通常はgemspecファイルの中で、次の様に書かれて、これで制御されているので、書かれた順によると思うのです。
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
補足
青い羊さん、ありがとうございます。 initializeと言うのが、どれのinitializeなのか次第です。 railsのinitializeであれば、ここで先に読み込んでしまうとautoloadの良さを消してしまいますし、helper関数はmoduleなのでinitializeは呼べないので、Gemで読み込み順を制御する方法は、対象次第です。