Posted at

特定のクラスのメソッドの呼び出しをすべて無効にする

More than 5 years have passed since last update.

下記のように書くと、1行書き換えるだけでOKです。

呼び出し箇所をコメントアウトしなくても、そのまま実行できます。

また、対象のクラスにいくつメソッドがあっても、Nullクラスの記述はこれだけでOKです。

# この行だけでデバッグ機能の有効・無効を切り替えられる

ENABLE_DEBUG = true # or false

class DebugImpl
def log(message)
puts message
end

def hoge
puts 'hoge!'
end

def foo
[1, 2, 3]
end
end

class Null
def method_missing(name, *args)
self
end

def respond_to_missing?(symbol, include_private)
true
end
end

Debug = ENABLE_DEBUG ? DebugImpl : Null

# 呼び出し箇所はそのままで、問題なく実行できる
debug = Debug.new
debug.log('message')
debug.hoge
debug.foo.sort

ちなみに、method_missingでselfを返しているので、戻り値を使う場合やメソッドチェーンの場合も(ある程度)動きます。