Vuoi che i tuoi oggetti si ordinino e si confrontino come i numeri? Basta definire l'operatore "astronave" <=> e includere il modulo Comparable.
class Launch
include Comparable
attr_reader :net
def initialize(net) = @net = net
# <=> restituisce -1, 0 o 1
def <=>(other)
net <=> other.net
end
end
lanci = [Launch.new(3), Launch.new(1), Launch.new(2)]
lanci.sort # ordinati per data!
lanci.min # il piu' imminente
lanci.max
Launch.new(1) < Launch.new(2) # true
Definendo un solo metodo (<=>), Comparable te ne regala una decina: <, >, ==, between?, clamp. Allo stesso modo, includere Enumerable e definire each ti dà gratis map, select, sort, min, max su una tua classe collezione.
È il potere dei mixin: implementi il metodo minimo (<=> o each) e Ruby costruisce tutto il resto. I tuoi oggetti si comportano come quelli nativi.