aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
authorXinhui2016-10-25 14:25:10 +0200
committerXinhui2016-10-25 14:30:14 +0200
commit6acac72115b2e575fb1698d74958356fe4d542f8 (patch)
tree4a6a4718c0af1b25b2b3ff08eba1f1715c64e059 /app/models
parent7fb087a735028cf783072886c968e4149dee7e7d (diff)
downloadchouette-core-6acac72115b2e575fb1698d74958356fe4d542f8.tar.bz2
Worker referential_cloning
Refs #1863
Diffstat (limited to 'app/models')
-rw-r--r--app/models/referential.rb12
-rw-r--r--app/models/referential_cloning.rb20
2 files changed, 27 insertions, 5 deletions
diff --git a/app/models/referential.rb b/app/models/referential.rb
index da5791914..5a2e1d15d 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -171,14 +171,22 @@ class Referential < ActiveRecord::Base
projection_type || ""
end
- after_create :autocreate_referential_metadata
+ after_create :autocreate_referential_metadata, :clone_schema
def autocreate_referential_metadata
self.create_referential_metadata if workbench
end
+ def clone_schema
+ if self.created_from
+ ReferentialCloning.create(source_referential: self.created_from, target_referential: self)
+ end
+ end
+
before_create :create_schema
def create_schema
- Apartment::Tenant.create slug
+ if self.created_from.nil?
+ Apartment::Tenant.create slug
+ end
end
before_validation :assign_line_and_stop_area_referential, :on => :create
diff --git a/app/models/referential_cloning.rb b/app/models/referential_cloning.rb
index 8d765f985..9bf824ac5 100644
--- a/app/models/referential_cloning.rb
+++ b/app/models/referential_cloning.rb
@@ -2,6 +2,12 @@ class ReferentialCloning < ActiveRecord::Base
include AASM
belongs_to :source_referential, class_name: 'Referential'
belongs_to :target_referential, class_name: 'Referential'
+ after_commit :perform_clone, :on => :create
+
+ private
+ def perform_clone
+ ReferentialCloningWorker.perform_async(self.id)
+ end
aasm column: :status do
state :new, :initial => true
@@ -9,16 +15,24 @@ class ReferentialCloning < ActiveRecord::Base
state :successful
state :failed
- event :run do
+ event :run, after: :update_started_at do
transitions :from => [:new, :failed], :to => :pending
end
- event :successful do
+ event :successful, after: :update_ended_at do
transitions :from => [:pending, :failed], :to => :successful
end
- event :failed do
+ event :failed, after: :update_ended_at do
transitions :from => :pending, :to => :failed
end
end
+
+ def update_started_at
+ update_attribute(:started_at, Time.now)
+ end
+
+ def update_ended_at
+ update_attribute(:ended_at, Time.now)
+ end
end