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.