Come detto prima, dato che in questa prima parte della guida non abbiamo trattato nessuna GUI, implementeremo solo l'interfaccia testuale. La nostra classe si occuperà di mostrare a video un menù dei comandi minimale e quindi in base al comando ricevuto raccogliere, o mostrare, i dati necessari. La classe che implementa tutto questo è Ongaku::Text nel file ongaku/ui/text.rb. Nel metodo Ui.main le interfacce vengono eseguite con l'istruzione avvia che in questo caso sarà una cosa del genere:
def avvia
stampa_menu
comando = gets.chomp
case comando
when 'a'
aggiungi
when 'e'
elimina
when 'l'
elenca
when 'q'
Ongaku::Ui.salva_cd
puts "Grazie per aver utilizzato #{NOME}!"
exit
else
puts "Comando inesistente: #{comando}"
end
avvia
end
Innanzitutto viene stampato il menu e poi viene catturato il comando digitato dall'utente, ed in base a quest'ultimo viene eseguito il metodo associato. Il metodo stampa_menu non fa altro che stampare a video delle stringhe che mostrano quali comandi sono possibili:
def stampa_menu
puts SEPARATORE
puts "Ongaku menu:"
puts " (a) aggiungi CD (e) elimina CD "
puts " (l) visualizza lista (q) esci da #{NOME}"
print "scegli: "
end
dove SEPARATORE è una stringa costante che vale 45 caratteri '='. Il metodo aggiungi invece colleziona i dati necessari alla creazione di un nuovo oggetto Cd e poi chiama Ongaku::Ui.aggiungi_cd:
def aggiungi
puts SEPARATORE
puts "Aggiungi CD"
print " Titolo: "
tit = gets.chomp
print " Autore: "
aut = gets.chomp
print " Anno di pubblicazione: "
anno = gets.chomp
Ongaku::Ui.aggiungi_cd(tit, aut, anno)
end
Per rimuovere un cd visualizziamo la lista completa e poi chiediamo all'utente di digitare l'indice del cd da eliminare. Tale valore è passato poi a Ongaku::Ui.elimina_cd:
def elimina
elenca
print "Scegli il CD da eliminare: "
index = gets.chomp
Ongaku::Ui.elimina_cd(index.to_i - 1)
end
Dove elenca è il metodo utilizzato per visualizzare la lista completa, non facciamo altro che stampare tutti gli elementi dell'array preceduti dal numero d'ordine:
def elenca
puts SEPARATORE
puts "Elenco dei Cd in archivio"
$archivio.each_index {|i| puts "#{(i + 1).to_s.rjust(4)}: #{$archivio[i]}"}
end
Infine quando si sceglie di chiudere l'applicazione con il comando q viene scritto l'array sul file con il metodo Ongaku::Ui.salva_cd e viene stampato un messaggio d'uscita.
Ongaku::Ui.salva_cd
puts "Ora la lista contiene #{$archivio.size} CD"
puts "Grazie per aver utilizzato #{NOME}!"
exit
Per quel che riguarda le altre due interfacce, per ora, gli facciamo solo stampare un messaggio d'errore qualora siano invocate.