Me gusta la nueva versión de cofradia. ;). Hace un año quería hacer un curso de Ruby en línea; no lo llevé acabo sin embargo, pienso ir publicando código que
considero le puede interesar a alguien.

Este ejemplo en java
me pareció muy ilustrativo y decidí implementarlo en Ruby, es el metapatrón MVC
codificado con el patrón observer. El ejemplo consta de una clase para cada componente
TemperatureModel, TemperatureView(GUI) y el TemperatureController, la gui
está desarrollada con ruby-gtk y glade.
El controlador: TemperatureController.rb
require "observer"
require 'TemperatureModel.rb'
require 'TemperatureView.rb'
class TemperatureWatcher
def initialize(t,g)
t.add_listener(self)
@gui = g
end
def celsius_changer(temp)
@newc = temp
@newf = @newc*9.0/5.0 + 32.0
@gui.setDisplayF(@newf)
@gui.setDisplayC(@newc)
@gui.setTemp(@newc)
end
def faranheit_changer(temp)
@newf = temp
@newc = (@newf -32.0)*5.0/9.0
@gui.setDisplayF(@newf)
@gui.setDisplayC(@newc)
@gui.setTemp(@newc)
end
end
INICIALTEMP = 32.0
temperature = TemperatureModel.new
tgui = TemperatureGUI.new(INICIALTEMP,temperature)
watcher = TemperatureWatcher.new(temperature,tgui)
Gtk.init
Gtk.main
El modelo: TemperatureModel.rb
class TemperatureModel
def initialize
@listeners = []
end
def add_listener(listener)
@listeners << listener
end
def upF(temp)
@temp = temp
@temp += 1
@listeners.each {|l| l.faranheit_changer(@temp) }
end
def downF(temp)
@temp = temp
@temp -= 1
@listeners.each {|l| l.faranheit_changer(@temp) }
end
def upC(temp)
@temp = temp
@temp += 1
@listeners.each {|l| l.celsius_changer(@temp) }
end
def downC(temp)
@temp = temp
@temp -= 1
@listeners.each {|l| l.celsius_changer(@temp) }
end
def newtC(temp)
@temp = temp
@listeners.each {|l| l.celsius_changer(@temp) }
end
end
El gui: TemperatureView.rb
require 'libglade2'
class TemperatureGUI
def initialize(temp,temperature)
@temp, @temperature = temp,temperature
@glade = GladeXML.new("temp.glade") {|handler| method(handler)}
@entryF = @glade["entry1"]
@entryC = @glade["entry2"]
@vscale = @glade["vscale1"]
@entryF.set_text(@temp.to_s)
@entryC.set_text(((5.0/9.0)*(@temp-32.0)).to_s)
@vscale.set_value((5.0/9.0)*(@temp-32.0))
f_up_button = @glade["button1"]
f_down_button = @glade["button2"]
c_up_button = @glade["button3"]
c_down_button = @glade["button4"]
end
def setDisplayF(newF)
@newF = newF
@entryF.set_text("#{@newF}")
end
def setDisplayC(newC)
@newC = newC
@entryC.set_text("#{@newC}")
end
def getDisplayF
@entryF.text.to_f
end
def getDisplayC
@entryC.text.to_f
end
def procScale
@v = @vscale.value
@temperature.newtC(@v)
end
def procEntryC
@v = getDisplayC
@temperature.newtC(@v)
end
def procEntryF
@nv = getDisplayF
@v = (5.0/9.0)*(@nv-32.0)
@temperature.newtC(@v)
end
def upF
@temp = getDisplayF
@temperature.upF(@temp)
end
def downF
@temp = getDisplayF
@temperature.downF(@temp)
end
def upC
@temp = getDisplayC
@temperature.upC(@temp)
end
def downC
@temp = getDisplayC
@temperature.downC(@temp)
end
def setTemp(t)
@t = t
@vscale.set_value(@t)
end
def quit
Gtk.main_quit
end
end
Todos los archivos los pueden bajar de aqui, incluyendo el archivo glade.
Leave a Reply
You must be logged in to post a comment.