diff options
| -rw-r--r-- | app/models/referential.rb | 44 | ||||
| -rw-r--r-- | app/models/referential_metadata.rb | 8 | ||||
| -rw-r--r-- | app/views/referentials/_form.html.slim | 2 | ||||
| -rw-r--r-- | spec/models/referential_spec.rb | 14 |
4 files changed, 45 insertions, 23 deletions
diff --git a/app/models/referential.rb b/app/models/referential.rb index 56d530de3..fc093c54c 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -35,8 +35,8 @@ class Referential < ActiveRecord::Base has_many :group_of_lines, through: :line_referential has_many :networks, through: :line_referential - has_one :referential_metadata - accepts_nested_attributes_for :referential_metadata + has_many :referential_metadatas + accepts_nested_attributes_for :referential_metadatas belongs_to :stop_area_referential validates_presence_of :stop_area_referential @@ -171,38 +171,44 @@ class Referential < ActiveRecord::Base projection_type || "" end - after_create :autocreate_referential_metadata, :clone_schema - def autocreate_referential_metadata - self.create_referential_metadata if workbench + before_validation :assign_line_and_stop_area_referential, :on => :create, if: :workbench + before_create :create_schema, unless: :created_from + + after_create :create_referential_metadata, if: :workbench, unless: :created_from + after_create :clone_referential_metadatas, if: :created_from + after_create :clone_schema, if: :created_from + + before_destroy :destroy_schema + before_destroy :destroy_jobs + + def create_referential_metadata + self.referential_metadatas.create end - def clone_schema - if self.created_from - ReferentialCloning.create(source_referential: self.created_from, target_referential: self) + def clone_referential_metadatas + self.created_from.referential_metadatas.each do |meta| + self.referential_metadatas << ReferentialMetadata.new_from(meta) end + self.save + end + + def clone_schema + ReferentialCloning.create(source_referential: self.created_from, target_referential: self) end - before_create :create_schema def create_schema - if self.created_from.nil? - Apartment::Tenant.create slug - end + Apartment::Tenant.create slug end - before_validation :assign_line_and_stop_area_referential, :on => :create def assign_line_and_stop_area_referential - if workbench - self.line_referential = workbench.line_referential - self.stop_area_referential = workbench.stop_area_referential - end + self.line_referential = workbench.line_referential + self.stop_area_referential = workbench.stop_area_referential end - before_destroy :destroy_schema def destroy_schema Apartment::Tenant.drop slug end - before_destroy :destroy_jobs def destroy_jobs #Ievkit.delete_jobs(slug) true diff --git a/app/models/referential_metadata.rb b/app/models/referential_metadata.rb index 7b1cea301..57ef9f7ca 100644 --- a/app/models/referential_metadata.rb +++ b/app/models/referential_metadata.rb @@ -3,4 +3,12 @@ class ReferentialMetadata < ActiveRecord::Base belongs_to :referential_source, class_name: 'Referential' has_array_of :lines, class_name: 'Chouette::Line' + + def self.new_from from + ReferentialMetadata.new({ + referential_source: from.referential_source, + line_ids: from.line_ids, + periodes: from.periodes + }) + end end diff --git a/app/views/referentials/_form.html.slim b/app/views/referentials/_form.html.slim index c1d9fc84d..ce53c2ede 100644 --- a/app/views/referentials/_form.html.slim +++ b/app/views/referentials/_form.html.slim @@ -18,7 +18,7 @@ - if @referential.created_from = form.input :created_from - = form.inputs for: [:referential_metadata, @referential.referential_metadata] do |meta| + = form.inputs for: [:referential_metadatas, @referential.referential_metadatas] do |meta| = meta.inputs :referential_source = form.actions do diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb index 9f87d0629..c76b157f8 100644 --- a/spec/models/referential_spec.rb +++ b/spec/models/referential_spec.rb @@ -8,10 +8,18 @@ describe Referential, :type => :model do #expect(referential.rule_parameter_sets.size).to eq(1) # end - it { should have_one(:referential_metadata) } + it { should have_many(:referential_metadatas) } it { should belong_to(:workbench) } - it 'should create a ReferentialCloning when a referential is cloned' do - expect { create(:referential, created_from: ref) }.to change{ReferentialCloning.count}.by(1) + context "Cloning referential" do + let(:cloned) { create(:referential, created_from: ref) } + + it 'should create a ReferentialCloning' do + expect { cloned }.to change{ReferentialCloning.count}.by(1) + end + + it 'should clone referential_metadatas' do + expect(cloned.referential_metadatas).not_to be_empty + end end end |
