Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Metodi accessori

Elementi utili per la validazione, per la gestione delle eccezioni e per il passagio di parametri
Elementi utili per la validazione, per la gestione delle eccezioni e per il passagio di parametri
Link copiato negli appunti

blank? è una comodissima estensione che restituisce true nel caso l'oggetto sia vuoto, abbia valore false o stringa con spazi. Questo metodo è molto utile per eseguire la validazione di un dato in ingresso senza conoscerne con certezza il tipo di istanza.

require '../helper'

[].blank?  # =>  true
''.blank?  # =>  true
'   '.blank?   # =>  true
nil.blank? # =>  true
false.blank?   # =>  true

# Password invalida: parametro inesistente.
params = { :username => 'bar' }
params[:username].blank?   # => false
params[:password].blank?   # => true

# Password invalida: stringa vuota.
params = { :username => 'bar', :password => '   ' }
params[:username].blank?   # => false
params[:password].blank?   # => true

duplicable? è un altro metodo accessorio che restituisce true nel caso in cui l'oggetto sia duplicabile in sicurezza con il metodo Class#dup.

Parlando di eccezioni, ActiveSupport fornisce alcuni metodi utili per migliorare la leggibilità di un errore. Exception#application_backtrace rimuove dalla backtrace le righe che non fanno riferimento all'applicazione corrette riducendo le righe necessarie ad un eventuale debug dell'errore. Exception#framework_backtrace è invece il metodo opposto.

Sul fronte Enumerable, vale la pena citare l'introduzione di #group_by, utile a raggruppare gli elementi per un valore specifico, preso in prestito da Ruby 1.9. #sum restituisce la somma degli elementi, #many? è invece una veloce scorciatoia per scoprire se il numero degli elementi è maggiore di 1.

require '../helper'

class Car < Struct.new(:color)
end

cars = %w(red blue white yellow).map { |c| Car.new(c) }

cars
# => [#<struct Car color="red">, #<struct Car color="blue">, ... ]
cars.index_by(&:color).inspect
# => {"white"=>#<struct Car color="white">, "blue"=>#<struct Car color="blue">, ... }

%w(foo).many?  # => false
%w(foo bar baz).many?  # => true

[5, 15, 10].sum# => 30

Infine, esaminiamo una di quelle estensioni tanto illeggibili quanto spettacolari. Tecnicamente parliamo di Symbol#to_proc, ci riferiamo quindi alla pratica di passare un simbolo come parametro ad un oggetto che si aspetta un blocco per veder chiamato il metodo corrispondente al simbolo all'interno del blocco. Un esempio è d'obbligo.

require '../helper'

colors = %w(red blue white yellow)
# => ["red", "blue", "white", "yellow"]


firsts = colors.collect(&:first)
firsts.inspect
# => ["r", "b", "w", "y"]

# Equivale a chiamare first su ogni elemento
firsts = colors.collect { |element| element.first }


colors.collect(&:first).collect(&:to_sym)
# => [:r, :b, :w, :y]

# Equivale a chiamare first su ogni elemento
# ed in sequenza to_sym
colors.collect do |element|
  element.first
end.collect do |f|
  f.to_sym
end

È utile familiarizzare con questi metodi: si trovano molto frequentemente in qualsiasi applicazione Ruby, specialmente se si tratta di un progetto Rails.

Ti consigliamo anche