In Ruby non chiedi "di che tipo sei?", chiedi "sai fare questo?". È il duck typing: se un oggetto risponde ai metodi che ti servono, va bene, indipendentemente dalla sua classe.
def stampa_tutto(collezione)
collezione.each { |x| puts x } # basta che risponda a each
end
stampa_tutto([1, 2, 3])
stampa_tutto({ a: 1 })
stampa_tutto(1..3)
Nessuno di questi è "un Array", ma tutti rispondono a each, quindi funzionano. Invece di if x.is_a?(Array), ti fidi dell'interfaccia.
Se proprio devi controllare, usa respond_to?(:each) invece della classe: verifichi il comportamento, non l'etichetta. Questo rende il codice flessibile e facile da estendere: aggiungi una nuova classe che risponde a each e tutto continua a funzionare.