Vediamo ora il punto d'ingresso di Ongaku costituito dalla classe Applicazione contenuta in ongaku.rb. Innanzitutto includiamo la libreria GetoptLong, che useremo per la gestione delle opzioni, e il file ongaku/ui che contiene l'implementazione delle varie interfacce:
require 'getoptlong' require 'ongaku/ui'
Impostiamo poi alcune costanti che useremo nel corso del programma:
NOME = "0ngaku" VERSIONE = "0.0.1" DESCRIZIONE = "Ongaku è un semplice catalogatore di CD" NOMEFILE = 'cd.yaml'
Dove "cd.yaml" è il nome del file che conterrà la lista dei nostri CD, lo vedremo in dettaglio nel prossimo capitolo. Svolte queste operazioni accessorie scriviamo la classe Applicazione che come detto si occuperà di gestire le opzioni da linea di comando e di chiamare il metodo main del modulo Ui passandogli il tipo scelto da riga di comando:
def initialize
opzioni
Ongaku::Ui.main(@ui)
end
Le opzioni le gestiremo attraverso i due metodi
def opzioni
opzioni = GetoptLong.new(
["--ui", "-i", GetoptLong::REQUIRED_ARGUMENT],
["--help", "-h", GetoptLong::NO_ARGUMENT]
)
opzioni.each{ |opt, val| gestione_opzioni(opt, val) }
end
def gestione_opzioni(opt, valore)
case opt
when '--help'
aiuto
when '--ui'
@ui = valore
end
end
Il primo metodo definisce quali opzioni sono consentite, utilizzando un oggetto GetoptLong, e precisamente --ui (oppure analogamente -i) che prende un argomento e --help (oppure -h) che non richiede argomenti. A GetoptLong vanno passati degli array contenenti le stringhe che rappresentano le opzioni ed un flag per indicare se all'opzione va associato un argomento. Oltre ai flag REQUIRED_ARGUMENT e NO_ARGUMENT è possibile usare anche OPTIONAL_ARGUMENT. Dopodiché per ogni opzione passata viene invocato il metodo gestione_opzioni che con un case sul tipo di opzione imposta alcuni valori oppure chiama semplicemente il metodo aiuto. Il metodo aiuto visualizza solo alcune righe che mostrano le opzioni accettate ed esce:
def aiuto
puts DESCRIZIONE
puts "#{$0} -i [text|gui|web]"
exit
end
Alla fine il file ongaku.rb appare in questo modo:
require 'getoptlong'
require 'ongaku/ui'
module Ongaku
NOME = "0ngaku"
VERSIONE = "0.0.1"
DESCRIZIONE = "Ongaku è un semplice catalogatore di CD"
NOMEFILE = 'cd.yaml'
class Applicazione
def initialize
opzioni
Ongaku::Ui.main(@ui)
end
def opzioni
opzioni = GetoptLong.new(
["--ui", "-i", GetoptLong::OPTIONAL_ARGUMENT],
["--help", "-h", GetoptLong::NO_ARGUMENT]
)
opzioni.each { |opt, val| gestione_opzioni(opt, val) }
end
def gestione_opzioni(opt, valore)
case opt
when '--help'
Applicazione.aiuto
when '--ui'
@ui = valore
end
end
def self.aiuto
puts DESCRIZIONE
puts "#{$0} -i [text|gui|web]"
exit
end
end
end
Ongaku::Applicazione.new
Dove Ongaku::Applicazione.new crea un oggetto di tipo Applicazione eseguendo di fatto la nostra applicazione.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: