ライブラリをrequire/loadするRubyコード内からライブラリのソースコードにアクセスする方法はいくつかあります。これらの方法の中には、ライブラリ ファイルを直接読み取って解析するものがあります。また、ソースに関する情報を提供する組み込みメソッド (抽象構文ツリーなど) を介してソースにアクセスするものもあります。(以前の方法のように) ファイルのコンテンツを直接読み取ることができない状況では、ソースにアクセスする唯一の方法は、情報を提供する組み込みメソッドにアクセスすることです。これらのメソッドを別のことを行うように再定義すると、ソース コードへのアクセスが完全に失われます。メソッドを別のものに再定義すると、外部ファイルのライブラリのソース コードへのアクセスが完全に失われる最小のメソッド セットは何ですか?
質問を言い換えると
仮定する:
- ファイル A に任意の Ruby コードを記述できるユーザーがいます。
- 私が作成した静的 Ruby ファイル B があります。これは、ファイル A をロードし、A で定義されたメイン ルーチンを呼び出し、ユーザーが A で使用できるいくつかのクラス/メソッドも定義します。
- ユーザーには、B に対する +r (読み取り) または +w (書き込み) 権限がありません。
ユーザーがファイル B に記述されたソースに (ユーザーがファイル A に記述できるコードを介して) アクセスできないようにするために、ファイル B にそのように記述して、どの (標準 Ruby) メソッドを再定義 (無効化) または削除する必要がありますか? ) ファイル B を実行すると?
sorcerer、pry など、アクセスできるメソッドのソース コードを抽出できるライブラリがいくつかあります。これらのライブラリがソースコードにアクセスできるようにするために依存する、プレーンな Ruby 内のいくつかのプリミティブ コマンドが必要です。この種のことを可能にする方法は何ですか?
完全な答えがわからないが、特定のライブラリがメソッドのソースを抽出する方法を知っている場合でも、それは役に立ちます。