diff options
| author | Xinhui | 2017-05-09 15:46:01 +0200 |
|---|---|---|
| committer | Xinhui | 2017-05-09 15:46:10 +0200 |
| commit | b57bffdd02fad756eb7cf95cdb51c81189ec5c82 (patch) | |
| tree | 470ae411ed1f19dc0cf000a9faac862ab7e54267 | |
| parent | 68143d532ec98f1f7518a2b567193bcdd50ea1b7 (diff) | |
| download | chouette-core-b57bffdd02fad756eb7cf95cdb51c81189ec5c82.tar.bz2 | |
Wip group continuous timetable dates into periodes
| -rw-r--r-- | app/models/chouette/time_table.rb | 13 | ||||
| -rw-r--r-- | app/models/time_table_combination.rb | 40 | ||||
| -rw-r--r-- | spec/models/time_table_combination_spec.rb | 17 |
3 files changed, 49 insertions, 21 deletions
diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb index 798fa81b4..0a99f6df6 100644 --- a/app/models/chouette/time_table.rb +++ b/app/models/chouette/time_table.rb @@ -33,6 +33,19 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord validates_associated :dates validates_associated :periods + def continuous_dates + chunk = {} + group = nil + + self.dates.each_with_index do |date, index| + group ||= index + group = (date.date == dates[index - 1].date + 1.day) ? group : group + 1 + chunk[group] ||= [] + chunk[group] << date + end + chunk + end + def state_update state update_attributes(self.class.state_permited_attributes(state)) self.tag_list = state['tags'].collect{|t| t['name']}.join(', ') diff --git a/app/models/time_table_combination.rb b/app/models/time_table_combination.rb index 783ef53ef..519c02f2b 100644 --- a/app/models/time_table_combination.rb +++ b/app/models/time_table_combination.rb @@ -1,33 +1,33 @@ class TimeTableCombination - include ActiveModel::Validations - include ActiveModel::Conversion + include ActiveModel::Validations + include ActiveModel::Conversion extend ActiveModel::Naming - - attr_accessor :source_id, :combined_id, :operation - - validates_presence_of :source_id, :combined_id, :operation + + attr_accessor :source_id, :combined_id, :operation + + validates_presence_of :source_id, :combined_id, :operation validates_inclusion_of :operation, :in => %w( union intersection disjunction), :allow_nil => true - + def clean self.source_id = nil self.combined_id = nil self.operation = nil self.errors.clear - end - + end + def self.operations %w( union intersection disjunction) end - def initialize(attributes = {}) - attributes.each do |name, value| - send("#{name}=", value) - end - end - - def persisted? - false - end + def initialize(attributes = {}) + attributes.each do |name, value| + send("#{name}=", value) + end + end + + def persisted? + false + end def combine source = Chouette::TimeTable.find( source_id) @@ -38,10 +38,10 @@ class TimeTableCombination source.intersect! combined elsif operation == "disjunction" source.disjoin! combined - else + else raise "unknown operation" end source end - + end diff --git a/spec/models/time_table_combination_spec.rb b/spec/models/time_table_combination_spec.rb index 46d5f8504..8b66434f2 100644 --- a/spec/models/time_table_combination_spec.rb +++ b/spec/models/time_table_combination_spec.rb @@ -4,7 +4,22 @@ describe TimeTableCombination, :type => :model do let!(:source){ create(:time_table)} let!(:combined){create(:time_table)} subject {build(:time_table_combination)} - + + describe 'continuous_dates' do + it 'should group continuous dates' do + dates = source.dates.where(in_out: true) + expect(source.continuous_dates.values[0].count).to eq(dates.count) + + # 6 more continious date, 1 isolated date + (10..15).each do |n| + source.dates.create(date: Date.today + n.day, in_out: true) + end + source.dates.create(date: Date.today + 1.year, in_out: true) + expect(source.reload.continuous_dates.values[1].count).to eq(6) + expect(source.reload.continuous_dates.values[2].count).to eq(1) + end + end + describe "#combine" do context "when operation is union" do before(:each) do |
