# uses the Decorator module on my blog post
# I'm also using ActiveSupport's Inflector to save time, but you get the idea
require 'active_support'
class Symbol
def to_class
Kernel.const_get(Inflector::camelize(self))
end
end
class Whip
include Decorator
end
class Milk
include Decorator
end
class Sprinkles
include Decorator
end
class Coffee
def self.with(*extras)
extras.inject(self.new) { |drink, extra| drink = extra.to_class.new(drink) }
end
end
# simple coffee
Coffee.new
# coffee with milk, whip and sprinkles
Coffee.with :milk, :whip, :sprinkles