LoginSignup
1
1

More than 5 years have passed since last update.

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

Posted at

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1