Skip to content

Instantly share code, notes, and snippets.

@charly
Created August 19, 2009 17:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save charly/170477 to your computer and use it in GitHub Desktop.
Save charly/170477 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'mixology'
module Callback
def filter_with filter, filtered_method
Callback.method_factory(filter, filtered_method)
end
def before_filter filter
methods = self.class.instance_methods(false)
methods.delete(filter.to_s)
methods.each do |filtered_method|
filter_with filter, filtered_method
end
end
def self.method_factory(filter, filtered_method)
define_method(filtered_method) do
send filter
super
end
end
end
class Coffee
def spoon_required
puts "get a spoon to steer sugar || creme"
end
def cost
puts "3"
end
def smell
puts "good"
end
def color
puts "black"
end
end
coffee = Coffee.new
coffee.mixin Callback
coffee.before_filter :spoon_required
# Every call beneath is prepended by :
# - "get a spoon to steer sugar || creme"
coffee.cost
coffee.smell
coffee.color
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment