Reflection Ruby

class Tracker
  def important
    "This is an important method!"
  end
  def self.method_added sym
    if sym == :important
      raise 'The "important" method has been redefined!'
    else
      puts %{Method "#{sym}" was (re)defined.}
    end
  end
  def self.method_removed sym
    if sym == :important
      raise 'The "important" method has been removed!'
    else
      puts %{Method "#{sym}" was removed.}
   end
  end
  def self.method_undefined sym
    if sym == :important
      raise 'The "important" method has been undefined!'
    else
      puts %{Method "#{sym}" was removed.}
    end
  end
end
class Tracker
  def new_method
    'This is a new method.'
  end
end
# Method "new_method" was (re)defined.
class Tracker
  undef :important
end
# RuntimeError: The "important" method has been undefined!
class Tracker
  include Enumerable
end
# Nothing!