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.