Il motivo per il quale trattiamo insieme questi 3 tipi di dati è perché ActiveSupport introduce numerose estensioni per la conversione di numeri in altri formati ed il modo più efficace per presentarle è partire con alcuni esempi per il calcolo di periodi temporali.
Immaginiamo di voler calcolare "1 settimana da oggi" o "4 minuti fa". Grazie ad ActiveSupport
è possibile scrivere:
require '../helper' # secondi in 1 settimana 1.week # => 604800 # Time.now Time.now # => Sat Jan 31 10:22:31 +0100 2009 # 1 settimana da oggi 1.week.from_now # => Sat Feb 07 10:22:31 +0100 2009 # 4 minuti fa 4.minutes.ago # => Sat Jan 31 10:18:31 +0100 2009
Ma la festa non finisce qui. Curiosando il modulo CoreExtensions::Numeric::Time
è possibile scoprire la lista completa delle estensioni per convertire numeri in valore temporale o numero di secondi.
require '../helper' 1.second # => 1 1.minute # => 60 1.hour # => 3600 1.days # => 86400 1.week # => 604800 1.fortnight # => 1209600 12.seconds # => 12 12.minutes # => 720 12.hours # => 43200 12.days # => 1036800 12.weeks # => 7257600 12.fortnights# => 14515200 12.seconds.ago # => Sat Jan 31 13:59:31 +0100 2009 12.minutes.ago # => Sat Jan 31 13:47:43 +0100 2009 12.hours.ago # => Sat Jan 31 01:59:43 +0100 2009 12.days.ago # => Mon Jan 19 13:59:43 +0100 2009 12.weeks.ago # => Sat Nov 08 13:59:43 +0100 2008 12.fortnights.ago# => Sat Aug 16 13:59:43 +0200 2008
Sempre in tema di data ed ora, anche la lista di estensioni per questi tipi di dati è molto lunga.
require '../helper' Date.today # => 2009-01-31 Date.tomorrow# => 2009-02-01 Date.current # => 2009-01-31 Date.today.today?# => true Date.yesterday.today?# => false Date.yesterday.past? # => true Date.yesterday.future? # => false Time.now.months_ago(2) # => Sun Nov 30 10:48:25 +0100 2008 Time.now.last_year # => Thu Jan 31 10:48:25 +0100 2008 Time.now.next_year # => Sun Jan 31 10:48:25 +0100 2010
Gli esempi dimostrano solo un piccolo spaccato di quello che è possibile ottenere con i moduli di conversione disponibili. Per approfondimenti consiglio la lettura della documentazione ufficiale.
Prima di terminare questo capitolo sui numeri spendiamo ancora due parole sul modulo Numeric::Bytes
. Questi metodi permettono di eseguire calcoli e conversioni in byte. Molti utili per la manipolazione dei file... ad esempio una gestione di upload!
require '../helper' 2.kilobytes # => 2048 3.megabytes # => 3145728 45.bytes + 2.6.megabytes # => 2726342.6