require "objectteam"
require "event"
require "trace"
require "observerpattern"
def info(description)
puts "\n\n"+ description.ljust(80).gsub(/ /, "==")
end
## create connectors ----------------------------------------------
#the observer pattern
class ButtonObserver < ObserverPattern
play_role(Observer, Window) {
# expected: update -> updateWindow
delegate_to("update", "updateWindow")
}
play_role(Observable, Button) {
after("notify", "pressed")
}
end
#does logging
class MethodTrace < Tracing
play_role(Trace, Window) {
replace(:trace, /.*/)
}
play_role(Trace, Button) {
replace(:trace, /.*/)
}
end
## create instances ----------------------------------------------
observer = ButtonObserver.new
trace = MethodTrace.new
w = Window.new
b = Button.new("Press me")
## normal behaviour ----------------------------------------------
info("Normal behaviour")
b.pressed
## activate observer-connector -----------------------------------
observer.while_active {
info("Observer activated")
b.addObserver(w)
b.pressed
}
## activate both connectors --------------------------------------
observer.while_active {
trace.while_active {
info("Tracer and Observer activated")
b.pressed
}
}
## activate trace connector --------------------------------------
trace.while_active {
info("Tracer activated")
b.pressed
}
syntax highlighted by Code2HTML, v. 0.9.1