Module: CarveRange

Defined in:
lib/carve_range.rb,
lib/carve_range/version.rb

Constant Summary collapse

VERSION =
"0.1.3"

Class Method Summary collapse

Class Method Details

.carve(old_date_range, new_date_range, space = 0) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/carve_range.rb', line 5

def self.carve(old_date_range, new_date_range, space=0)
	old_start = old_date_range.first
  old_end = old_date_range.last
  new_start = new_date_range.first
  new_end = new_date_range.last

  if new_start <= old_start && new_end < old_end     # +__|==+--|
    modified_date_range = old_date_range.select { |d| d > (new_end + space)? d : false }
    return modified_date_range.first..modified_date_range.last, new_date_range

  elsif new_start > old_start && new_end >= old_end  # |--+==|__+
    modified_date_range = old_date_range.select { |d| d < (new_start - space)? d : false }
    return modified_date_range.first..modified_date_range.last, new_date_range

  elsif new_start > old_start && new_end < old_end   # |-+=+-|
    pre_date_range = old_date_range.select { |d| d < (new_start - space)? d : false }
     = old_date_range.select { |d| d > (new_end + space)? d : false }
    return pre_date_range.first..pre_date_range.last, .first...last, new_date_range

  elsif new_start <= old_start && new_end >= old_end # +=|=====|=+
    return nil, new_date_range
  end

  return old_date_range, new_date_range
end