どうせIntegerなんだから
(min <=> obj) + (max <=> obj) >> 1
でよくね?
あと
(1..2) & (3..4) # => (3..2)
だから
(3..2).max # => nil
になって気持ち悪い