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

La classe Applicazione

La classe applicazione gestisce le interfacce e le opzioni del nostro piccolo programma in Ruby
La classe applicazione gestisce le interfacce e le opzioni del nostro piccolo programma in Ruby
Link copiato negli appunti

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.

Ti consigliamo anche