概要
BlankSlate
内容
BlankSlate=空白状態。
Ruby1.8以前はBasicObjectがなかったため、動的な機能を利用する際に既存のメソッドと衝突を避けるために
メソッドを根こそぎ非定義に設定する手法があった。
その手法はメタプログラミングRubyでも触れているBlankSlate。
下記URLから実際のコードを参照可能。
https://github.com/masover/blankslate/blob/master/lib/blankslate.rb
主な処理
hideメソッド
・instance_methodsで取得したメソッドリストのうち、__で始まるかinstance_eval以外のメソッドだったら非定義にする
・非定義にする前に@hidden_methodsハッシュに退避しておく
revealメソッド
・指定した名称のメソッドが退避したメソッドに含まれていればdefinie_methodで再定義する。
・指定した名称のメソッドが存在しなければ、例外を投げる
※ここでraiseではなくfailを利用している。rubocopの推奨する作法と同じ記法。
その他
Object,Kernelにメソッドが追加された場合もBlankSlateクラスから削除する処理が追加されている。
関連
メタプログラミングRuby | 魔術 | ブランクスレート
http://d.hatena.ne.jp/tbpg/20130804/1375631901