aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/chouette/time_table.rb13
-rw-r--r--app/models/time_table_combination.rb40
-rw-r--r--spec/models/time_table_combination_spec.rb17
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