Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

書籍 Rubyベストプラクティス | 動的な機能を使いこなす | BlankSlate

概要

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の推奨する作法と同じ記法。

クラススコープ

下記処理でhideメソッドを呼び出して根こそぎ非定義にしている。

instance_methods.each { |m| hide(m) }
その他

Object,Kernelにメソッドが追加された場合もBlankSlateクラスから削除する処理が追加されている。