Skip to content

Instantly share code, notes, and snippets.

@apeiros
Created March 11, 2009 23:30
Show Gist options
  • Save apeiros/77814 to your computer and use it in GitHub Desktop.
Save apeiros/77814 to your computer and use it in GitHub Desktop.
module CallInspectable
def intercept_all_calls(&block)
all_methods = superclass.public_instance_methods
m = Module.new do
all_methods.each { |method_name|
define_method(method_name) do |*args|
block.call(method_name)
super
end
}
end
include m
end
end
class Module
include CallInspectable
end
class Foo < Array
def bar; "bar"; end
intercept_all_calls do |method_name|
$stderr.puts "Called '#{method_name}' in #{self}"
end
end
class Bar < Array
def baz; "baz"; end
intercept_all_calls do |method_name|
$stderr.puts "Called '#{method_name}' in #{self}"
end
end
a = Foo.new
puts "call []"
a[0]
puts "call bar"
a.bar
a = Bar.new
puts "call []"
a[0]
puts "call bar"
a.baz
puts "end"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment