I see a potential flaw in this if the ends were equal but other has 
exclude end.

a:  |-----| (1...6, exclude end)
b:   |---| (3..6)

a.include?(6) #=> false
b.include?(6) #=> true

a.span?(b) #=> false
b.span?(a) #=> true, but should be false, IMHO.

I think the only way to do this is to make a mapping of
self  other   operation
  ..    ...      >=/>/etc
...     ..      >=/>/etc

Dan

Daniel Schierbeck wrote:
> Daniel Finnie has a point about end-excluding ranges. But in that case,
> wouldn't this suffice?
> 
>   def span? other
>     include? other.first and include? other.last
>   end


> 
> Cheers,
> Daniel