On Fri, 2006-03-10 at 01:03 +0900, Dirk van Deun wrote:
> A very short and simple question: is there a function to "unextend" an
> object ? 

Might this suffice?

class Object
  def unextend(mod)
    (mod.instance_methods +
     mod.private_instance_methods +
     mod.protected_instance_methods).uniq.each do |m|
       instance_eval "undef #{m}"
     end
  end
end

class A
  def each; yield 1; end
end

a = A.new

a.extend(Enumerable)
puts a.map { |e| e + 1 }
# => 2

a.unextend(Enumerable)
puts a.map { |e| e + 1 }
# => -:17: undefined method `map' for #<A:0xb7f837a0> (NoMethodError)

-- 
Ross Bamford - rosco / roscopeco.REMOVE.co.uk