下記のように書くと、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を返しているので、戻り値を使う場合やメソッドチェーンの場合も(ある程度)動きます。