diff --git a/lib/tod/shift.rb b/lib/tod/shift.rb index 0dfc344..4a9b6f5 100644 --- a/lib/tod/shift.rb +++ b/lib/tod/shift.rb @@ -79,5 +79,11 @@ def hash def slide(seconds) self.class.new(beginning + seconds, ending + seconds, exclude_end?) end + + def merge(other_shift) + new_beginning = [@beginning, other_shift.beginning].min + new_ending = [@ending, other_shift.ending].max + return self.class.new(new_beginning, new_ending) + end end end diff --git a/test/tod/shift_test.rb b/test/tod/shift_test.rb index 0244e5e..d303806 100644 --- a/test/tod/shift_test.rb +++ b/test/tod/shift_test.rb @@ -352,4 +352,19 @@ refute shift.exclude_end? end end + + describe "merge" do + it "merges a shift into another" do + beginning_expected = Tod::TimeOfDay.new 8 + ending_expected = Tod::TimeOfDay.new 18 + + shift_one = Tod::Shift.new(beginning_expected, Tod::TimeOfDay.new(17)) + shift_two = Tod::Shift.new(Tod::TimeOfDay.new(10), ending_expected) + + merged_shift = shift_one.merge(shift_two) + + assert_equal beginning_expected, merged_shift.beginning + assert_equal ending_expected, merged_shift.ending + end + end end