aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/referential.rb44
-rw-r--r--app/models/referential_metadata.rb8
-rw-r--r--app/views/referentials/_form.html.slim2
-rw-r--r--spec/models/referential_spec.rb14
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