def facade(klass, *methods)
methods = methods.flatten
if methods.empty?
if klass.kind_of?(Class)
methods = klass.methods(false)
else
methods = klass.public_instance_methods(false)
end
end
methods = methods.map{ |m| m.to_sym }
methods -= self.instance_methods.map{ |m| m.to_sym }
methods.each do |methname|
define_method(methname){
if klass.kind_of?(Class)
meth = klass.method(methname)
else
meth = Object.new.extend(klass).method(methname)
end
if meth.arity.zero?
meth.call
else
meth.call(self)
end
}
end
end