Module: Kernel

Defined in:
lib/italian/ruby/metodi/kernel.rb,
lib/italian/ruby/alias/kernel.rb

Overview

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.

Instance Method Summary collapse

Instance Method Details

#richiedi(archivio) ⇒ Object

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.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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

#richiedi_relativo(percorso_archivio) ⇒ Object

Richiede un archivio cercandolo come percorso relativo.



40
41
42
43
44
45
46
47
# 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

#richiedi_tutti(percorso_cartella) ⇒ Object

Richiede tutti gli archivi di una cartella.



51
52
53
54
55
56
57
58
59
60
# 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(costante, archivio) ⇒ Object

Rimanda la costante alla definizione in archivio. La prima volta che viene incontrata la definizione della costante nel codice, allora l’archivio verrà richiesto.



66
67
68
69
70
71
72
73
74
# 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

#rimanda_relativo(costante, percorso_archivio) ⇒ Object

Come il rimanda, ma usando un percorso relativo.



78
79
80
81
82
83
84
# 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