class Range

Public Instance Methods

merge(r) click to toggle source
# File lib/range_array/range.rb, line 2
def merge(r)
  return self if self == r

  return self if fully_overlaps?(r)
  return r if fully_overlapped_by?(r)

  return (r.min .. self.max) if adjoins?(r) || start_overlapped_by?(r)
  return (self.min .. r.max) if adjoined_by?(r) || end_overlapped_by?(r)

  nil
end
merge!(r) click to toggle source
# File lib/range_array/range.rb, line 14
def merge!(r)
  merge(r) || self
end

Private Instance Methods

adjoined_by?(r) click to toggle source
# File lib/range_array/range.rb, line 40
def adjoined_by?(r)
  self.max.succ == r.min
end
adjoins?(r) click to toggle source
# File lib/range_array/range.rb, line 36
def adjoins?(r)
  r.max.succ == self.min    
end
end_overlapped_by?(r) click to toggle source
# File lib/range_array/range.rb, line 32
def end_overlapped_by?(r)
  self.cover?(r.min)
end
fully_overlapped_by?(r) click to toggle source
# File lib/range_array/range.rb, line 24
def fully_overlapped_by?(r)
  r.cover?(self.min) && r.cover?(self.max)
end
fully_overlaps?(r) click to toggle source
# File lib/range_array/range.rb, line 20
def fully_overlaps?(r)
  start_overlapped_by?(r) && end_overlapped_by?(r)
end
start_overlapped_by?(r) click to toggle source
# File lib/range_array/range.rb, line 28
def start_overlapped_by?(r)
  self.cover?(r.max)
end