Skip to content

Instantly share code, notes, and snippets.

@nono
Forked from shingara/mix_periods.rb
Created February 29, 2012 12:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nono/1940487 to your computer and use it in GitHub Desktop.
Save nono/1940487 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.inject(acc) do |a,period|
a << (period.start_date..period.end_date); a
end
end
until list_period.empty?
period_test = list_period.pop
if list_period.any?{|lp| period_test.cover?(lp.begin) || lp.cover?(period_test.begin) }
errors.add(:seasons, :period_mix)
return
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