Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 42 di 45
  • livello principiante
Indice lezioni

Interfaccia e YAML

Programmazione delle procedure di inserimento e cancellazione dei Cd
Programmazione delle procedure di inserimento e cancellazione dei Cd
Link copiato negli appunti

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

Ti consigliamo anche