Mega Code Archive

 
Categories / Ruby / Design Patterns
 

Code Blocks as Observers

module Observable   def initialize     @observers=[]   end   def add_observer(&observer)     @observers << observer   end   def delete_observer(observer)     @observers.delete(observer)   end   def notify_observers     @observers.each do |observer|       observer.call(self)     end   end end class Employee   include Observable   attr_accessor :name, :title, :salary   def initialize( name, title, salary )     super()     @name = name     @title = title     @salary = salary   end   def salary=(new_salary)     @salary = new_salary     notify_observers   end end fred = Employee.new('Fred', 'Crane Operator', 30000) fred.add_observer do |changed_employee|     puts("Cut a new check for #{changed_employee.name}!")     puts("His salary is now #{changed_employee.salary}!") end