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