stardiviner
7/14/2014 - 10:09 AM

observable.el

observable.el

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

class Notifier
  def update(car, miles)
    puts "The car has logged #{miles} miles, totaling #{car.mileage} miles traveled."
    puts "The car needs to be taken in for a service!" if car.service <= car.mileage
  end
end

require 'observer'

class Car
  include Observable
  
  attr_reader :mileage, :service

  def initialize(mileage = 0, service = 3000)
    @mileage, @service = mileage, service
    add_observer(Notifier.new)
  end

  def log(miles)
    @mileage += miles
    changed
    notify_observers(self, miles)
  end
end

car = Car.new(2800, 3000)
car.log(100)
car.log(100)