module Kernel
Aggiunge i metodi :richiedi e :richiedi_relativo, che permettono di caricare un file sorgente scritto in Italian
Ruby e usarlo allo stesso modo di come funzionano :require e :require_relative di Ruby standard.
È possibile utilizzare :richiedi e :richiedi_relativo sia in file sorgenti scritti in Italian
Ruby che in file sorgenti scritti in Ruby standard.
Public Instance Methods
Richiede un archivio da caricare in memoria. Se l'archivio è trovato nei percorsi di caricamento presenti in memoria, e scritto in ItalianRuby, allora viene tradotto e caricato. Altrimenti viene cercato e caricato come un archivio Ruby standard.
# File lib/italian/ruby/metodi/kernel.rb, line 18 def richiedi(archivio) archivi_in_memoria = $:.map do |cartella| Dir["#{cartella}/**/#{archivio}.ir"] end archivio_in_italiano_da_richiedere = archivi_in_memoria.flatten.compact.first return traduci_e_richiedi archivio_in_italiano_da_richiedere if archivio_in_italiano_da_richiedere != nil # Non è stato trovato nessun archivio in italiano corrispondente al nome # passato. Viene ora tentato il caricamento di un file Ruby originale con # lo stesso nome. require archivio rescue LoadError => errore sorgenti_chiamanti = caller_locations.reject do |locazione| locazione.absolute_path.include? "lib/italian/ruby/metodi/kernel" end sorgente_chiamante = sorgenti_chiamanti.first.absolute_path numero_linea_errata = sorgenti_chiamanti.first.lineno Italian::Ruby::Errori.recupera errore, sorgente_chiamante, numero_linea_errata end
Richiede un archivio cercandolo come percorso relativo.
# File lib/italian/ruby/metodi/kernel.rb, line 40 def richiedi_relativo(percorso_archivio) sorgente_chiamante, linea_chiamante = ottieni_sorgente_e_linea_chiamante caller_locations archivio_da_richiedere = archivio_relativo sorgente_chiamante, percorso_archivio raise LoadError, "cannot load such file -- #{percorso_archivio}" if archivio_da_richiedere.nil? traduci_e_richiedi archivio_da_richiedere rescue LoadError => errore Italian::Ruby::Errori.recupera errore, sorgente_chiamante, linea_chiamante end
Richiede tutti gli archivi di una cartella.
# File lib/italian/ruby/metodi/kernel.rb, line 51 def richiedi_tutti(percorso_cartella) sorgente_chiamante, linea_chiamante = ottieni_sorgente_e_linea_chiamante caller_locations cartella_da_richiedere = cartella_relativa sorgente_chiamante, percorso_cartella raise LoadError, "cannot load such directory -- #{percorso_cartella}" if cartella_da_richiedere.nil? Dir["#{cartella_da_richiedere}/**/*.ir"].sort_by { |file| file.count("/") }.each do |archivio| traduci_e_richiedi archivio end rescue LoadError => errore Italian::Ruby::Errori.recupera errore, sorgente_chiamante, linea_chiamante end
Rimanda la costante alla definizione in archivio. La prima volta che viene incontrata la definizione della costante nel codice, allora l'archivio verrà richiesto.
# File lib/italian/ruby/metodi/kernel.rb, line 66 def rimanda(costante, archivio) archivi_in_memoria = $:.map do |cartella| Dir["#{cartella}/**/#{archivio}.ir"] end archivio_da_tradurre = archivi_in_memoria.flatten.compact.first archivio_da_richiedere = Italian::Ruby.percorso_archivio_tradotto archivio_da_tradurre traduci archivio_da_tradurre Object.autoload costante, archivio_da_richiedere end
Come il rimanda, ma usando un percorso relativo.
# File lib/italian/ruby/metodi/kernel.rb, line 78 def rimanda_relativo(costante, percorso_archivio) sorgente_chiamante, linea_chiamante = ottieni_sorgente_e_linea_chiamante caller_locations archivio_da_tradurre = archivio_relativo sorgente_chiamante, percorso_archivio archivio_da_richiedere = Italian::Ruby.percorso_archivio_tradotto archivio_da_tradurre traduci archivio_da_tradurre Object.autoload costante, archivio_da_richiedere end
Private Instance Methods
Ottiene il percorso archivio relativo del sorgente chiamante.
# File lib/italian/ruby/metodi/kernel.rb, line 117 def archivio_relativo(sorgente_chiamante, percorso_archivio) cartella_chiamante = File.dirname sorgente_chiamante percorso_da_richiedere = File.expand_path File.join(cartella_chiamante, percorso_archivio) archivio_da_richiedere = Dir["#{percorso_da_richiedere}.{ir,rb}"].compact.first raise LoadError, "no such file: #{percorso_da_richiedere}.{ir,rb}" if archivio_da_richiedere.nil? archivio_da_richiedere end
Ottiene il percorso cartella relativo del sorgente chiamante.
# File lib/italian/ruby/metodi/kernel.rb, line 127 def cartella_relativa(sorgente_chiamante, percorso_cartella) cartella_chiamante = File.dirname sorgente_chiamante cartella_da_richiedere = File.expand_path File.join(cartella_chiamante, percorso_cartella) cartella_da_richiedere = nil unless Dir.exist? cartella_da_richiedere cartella_da_richiedere end
Ottiene sorgente e linea chiamante.
# File lib/italian/ruby/metodi/kernel.rb, line 108 def ottieni_sorgente_e_linea_chiamante(traccia_chiamata) sorgente_chiamante = Italian::Ruby.percorso_archivio_non_tradotto traccia_chiamata.first.absolute_path linea_chiamante = traccia_chiamata.first.lineno [ sorgente_chiamante, linea_chiamante ] end
Traduce un file da ItalianRuby a Ruby.
# File lib/italian/ruby/metodi/kernel.rb, line 90 def traduci(archivio) Italian::Ruby::Traduttore.traduci archivio end
Traduce un file da ItalianRuby a Ruby e lo carica in memoria.
# File lib/italian/ruby/metodi/kernel.rb, line 96 def traduci_e_carica(archivio) load traduci(archivio) end
Traduce un file da ItalianRuby a Ruby e lo richiede.
# File lib/italian/ruby/metodi/kernel.rb, line 102 def traduci_e_richiedi(archivio) require traduci(archivio) end