Revisions

gist: 218103 Download_button fork
public
Description:
Observer em Ruby
Public Clone URL: git://gist.github.com/218103.git
Embed All Files: show embed
observer.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
module Subject
  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 Funcionario
 
  include Subject
  attr_accessor :nome, :titulo, :salario
 
  def initialize( nome, titulo, salario )
    super()
    @nome = nome
    @titulo = titulo
    @salario = salario
  end
 
  def salario=(novo_salario)
    @salario = novo_salario
    notify_observers
  end
end
 
jose = Funcionario.new('jose', 'Crane Operator', 30000)
jose.add_observer do |funcionario|
  puts ("Aumentando salário do #{funcionario.nome}!")
  puts("Seu novo salário é #{funcionario.salario}!")
end