Skip to content

Instantly share code, notes, and snippets.

@nbfritz
Created April 13, 2013 11:12
Show Gist options
  • Select an option

  • Save nbfritz/5377983 to your computer and use it in GitHub Desktop.

Select an option

Save nbfritz/5377983 to your computer and use it in GitHub Desktop.
Scary awesome.
class Tapper
attr_reader :eavesdroppers
def initialize(source, *eavesdroppers)
@source = source
@eavesdroppers = eavesdroppers
end
def method_missing(method, *args)
if @source.respond_to?(method)
valid_eavesdroppers = @eavesdroppers.find_all {|t| t.respond_to?(method) }
define_singleton_method(method) do |*args|
source_return = @source.send(method, *args)
begin
valid_eavesdroppers.each {|t| t.send(method, *args) }
rescue
true # swallow errors from eavesdroppers
end
return source_return
end
send(method, *args)
end
end
def eavesdropper
@eavesdroppers.first
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment