Nella classe Applicazione abbiamo messo Ongaku::Ui.main(@ui) che non fa altro che chiamare il metodo main del modulo Ui passando come parametro il tipo di interfaccia scelta. Per salvare i dati su disco utilizzeremo il YAML (potete leggere una nostra breve introduzione a YAML), ma avremmo potuto usare qualsiasi altro formato, quello che ci interessa è che i dati presenti nel file cd.yaml saranno caricati all'avvio dell'applicazione in un Array di Cd; dopodiché tutte le operazioni avverranno su tale array e solo alla chiusura dell'applicazione aggiorneremo, eventualmente, il file yaml contenente la lista. Vediamo i dettagli.
Come al solito per prima cosa includiamo le librerie e i file necessari:
require 'yaml' require 'ongaku/ui/text' require 'ongaku/ui/gui' require 'ongaku/ui/web' require 'ongaku/cd'
Creiamo quindi il modulo Ui contenente i principali metodi per la manipolazione dei dati. Il metodo main chiamato da Applicazione.new() si occupa di caricare il file contenente la lista e di avviare l'interfaccia selezionata dall'utente in fase di avvio.
def self.main(ui)
@modifica = false
$archivio = Array.new()
Ui.carica_cd
case ui
when 'text'
interfaccia = Ongaku::Text.new
when 'gui'
interfaccia = Ongaku::Gui.new
when 'web'
interfaccia = Ongaku::Web.new
else
puts "Interfaccia non implementata"
exit
end
interfaccia.avvia
end
La lista viene caricata nell'array di Cd $archivio utilizzando il metodo YAML::load_documents, lo stesso array viene poi ordinato con sort!:
def self.carica_cd
YAML::load_documents(File.open(NOMEFILE, File::CREAT)) do |cd|
$archivio << cd
end
$archivio.sort!
end
Analogamente in chiusura l'array $archivio viene riscritto, un oggetto per volta, sul file con YAML::dump. La variabile @modifica tiene conto delle modifiche all'array, se ce ne sono state vale true, in caso contrario false.
def self.salva_cd
if @modifica then
open(NOMEFILE, 'w') do |file|
$archivio.each{|cd| YAML::dump(cd, file)}
end
end
end
Le altre due funzionalità implementate nel modulo Ui sono aggiungi_cd e elimina_cd. Il primo prende come argomenti i dati del cd da aggiungere, istanzia un nuovo oggetto Cd e lo aggiunge all'array $archivio:
def self.aggiungi_cd(tit, aut, anno)
@modifica = true
nuovo_cd = Cd.new(tit, aut, anno)
$archivio << nuovo_cd
$archivio.sort!
end
Anche elimina_cd è molto banale, e non fa altro che eliminare l'elemento dell'array alla posizione passatagli come argomento.
def self.elimina_cd(index)
@modifica = true
$archivio.slice!(index)
end
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: