[SCI-5260] Add direction condition for status consequences

This commit is contained in:
aignatov-bio 2020-11-30 12:28:29 +01:00
parent 61baf88ab6
commit 0620da99de
3 changed files with 22 additions and 4 deletions

View file

@ -3,11 +3,11 @@
class MyModuleStatusConsequencesJob < ApplicationJob class MyModuleStatusConsequencesJob < ApplicationJob
queue_as :high_priority queue_as :high_priority
def perform(my_module, my_module_status_consequences) def perform(my_module, my_module_status_consequences, status_changing_direction)
error_raised = false error_raised = false
my_module.transaction do my_module.transaction do
my_module_status_consequences.each do |consequence| my_module_status_consequences.each do |consequence|
consequence.call(my_module) consequence.call(my_module) if consequence.public_send("#{status_changing_direction}_execution")
end end
my_module.update!(status_changing: false) my_module.update!(status_changing: false)
rescue StandardError => e rescue StandardError => e

View file

@ -506,13 +506,23 @@ class MyModule < ApplicationRecord
self.changing_from_my_module_status_id = my_module_status_id_was if my_module_status_id_was.present? self.changing_from_my_module_status_id = my_module_status_id_was if my_module_status_id_was.present?
self.status_changing = true self.status_changing = true
status_changing_direction = if my_module_status.next_status&.id == my_module_status_id_was
:backward
else
:forward
end
yield yield
if my_module_status.my_module_status_consequences.any?(&:runs_in_background?) if my_module_status.my_module_status_consequences.any?(&:runs_in_background?)
MyModuleStatusConsequencesJob.perform_later(self, my_module_status.my_module_status_consequences.to_a) MyModuleStatusConsequencesJob.perform_later(
self,
my_module_status.my_module_status_consequences.to_a,
status_changing_direction
)
else else
my_module_status.my_module_status_consequences.each do |consequence| my_module_status.my_module_status_consequences.each do |consequence|
consequence.call(self) consequence.call(self) if consequence.public_send("#{status_changing_direction}_execution")
end end
update!(status_changing: false) update!(status_changing: false)
end end

View file

@ -6,4 +6,12 @@ class MyModuleStatusConsequence < ApplicationRecord
def runs_in_background? def runs_in_background?
false false
end end
def forward_execution
true
end
def backward_execution
true
end
end end