You mean like this?
case
when other.begin == -Float::INFINITY && other.end == Float::INFINITY
then Nodes::NotIn.new self, []
when other.end == Float::INFINITY then
Nodes::GreaterThanOrEqual.new(self, other.begin)
when other.begin == -Float::INFINITY && other.exclude_end? then
Nodes::LessThan.new(self, other.end)
when other.begin == -Float::INFINITY then
Nodes::LessThanOrEqual.new(self, other.end)
when other.exclude_end?
...