Skip to content

Instantly share code, notes, and snippets.

@shingara
Created February 29, 2012 11:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save shingara/1940227 to your computer and use it in GitHub Desktop.
Save shingara/1940227 to your computer and use it in GitHub Desktop.
Method to compare if some periods define by start_date and end_date are mixed
def mix_periods
list_period = seasons.inject([]) do |acc, season|
season.periods.each do |period|
acc << (period.start_date..period.end_date)
end
acc
end
while !list_period.empty?
period_test = list_period.pop
if list_period.any?{|lp|
period_test.cover?(lp.begin) ||
period_test.cover?(lp.end) ||
lp.cover?(period_test.begin) ||
lp.cover?(period_test.end)
}
errors.add(:seasons, :period_mix)
break
end
end
end
it 'should valid with one season and period not mix' do
renter_base.seasons = []
renter_base.seasons << Fabricate.build(:season,
:periods => [
Fabricate.build(:period, :start_date => 10.day.ago, :end_date => 1.day.ago),
Fabricate.build(:period, :start_date => 20.day.ago, :end_date => 11.day.ago)
])
renter_base.should be_valid
end
it 'should_not valid with one season and period mix' do
renter_base.seasons = []
renter_base.seasons << Fabricate.build(:season,
:periods => [
Fabricate.build(:period, :start_date => 10.day.ago, :end_date => 1.day.ago),
Fabricate.build(:period, :start_date => 20.day.ago, :end_date => 9.day.ago)
])
renter_base.should_not be_valid
end
it 'should valid with several season and period not mix' do
renter_base.seasons = []
renter_base.seasons << Fabricate.build(:season,
:periods => [
Fabricate.build(:period, :start_date => 10.day.ago, :end_date => 1.day.ago),
Fabricate.build(:period, :start_date => 20.day.ago, :end_date => 11.day.ago)
])
renter_base.seasons << Fabricate.build(:season,
:periods => [
Fabricate.build(:period, :start_date => 30.day.ago, :end_date => 21.day.ago),
Fabricate.build(:period, :start_date => 40.day.ago, :end_date => 31.day.ago)
])
renter_base.should be_valid
end
it 'should_not valid with several season and period mix' do
renter_base.seasons = []
renter_base.seasons << Fabricate.build(:season,
:periods => [
Fabricate.build(:period, :start_date => 10.day.ago, :end_date => 1.day.ago),
Fabricate.build(:period, :start_date => 20.day.ago, :end_date => 11.day.ago)
])
renter_base.seasons << Fabricate.build(:season,
:periods => [
Fabricate.build(:period, :start_date => 30.day.ago, :end_date => 19.day.ago),
Fabricate.build(:period, :start_date => 40.day.ago, :end_date => 31.day.ago)
])
renter_base.should_not be_valid
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment