前者についてはそれじゃ機能が足りないんだ
範囲内最小の値よりなお小さいか
最大の値よりなお大きいかまで判定してほしい

後者については機能的にはそれでいいんだけど
Rangeのサイズが1000万までありうるので速度的に(´・ω・`)

自分で実装してみると
class Range
def <=> obj
(((min <=> obj) + (max <=> obj)) / 2.0).truncate
end
def & other
[min, other.min].max..[max,other.max].min
end
end