From 31d63021bf7e52f2ad2a7a9e70fdf8f5fabe6cf9 Mon Sep 17 00:00:00 2001 From: ari Date: Sun, 7 Aug 2022 14:05:07 +0300 Subject: [PATCH 1/3] Add workflow selector to workflower_abilities --- lib/workflower/acts_as_workflower.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/workflower/acts_as_workflower.rb b/lib/workflower/acts_as_workflower.rb index f85ba92..3cfa54f 100644 --- a/lib/workflower/acts_as_workflower.rb +++ b/lib/workflower/acts_as_workflower.rb @@ -81,8 +81,10 @@ module Workflower before_create :set_intial_state unless skip_setting_initial_state end - def workflower_abilities - load = source.new(new).get_workflows.values.flatten.uniq + def workflower_abilities(workflow_selector: nil) + # workflow_selector helps dynamic transition selection when we have multiple workflows that needs to change depending on the selector. + load = source.new(new).get_workflows.values.flatten.uniq unless workflow_selector.present? + load = source.new(selector.to_sym).get_workflows.values.flatten.uniq if selector.present? unless load.blank? # transitions = load.transitions.where("(metadata->>'roles') IS NOT NULL") From fe0af4cd33999499639f771287ca57fc25cf4c97 Mon Sep 17 00:00:00 2001 From: ari Date: Sun, 7 Aug 2022 14:16:02 +0300 Subject: [PATCH 2/3] Set accessors to nil on workflower_uninitializer --- lib/workflower/acts_as_workflower.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/workflower/acts_as_workflower.rb b/lib/workflower/acts_as_workflower.rb index 3cfa54f..24d57b0 100644 --- a/lib/workflower/acts_as_workflower.rb +++ b/lib/workflower/acts_as_workflower.rb @@ -9,7 +9,7 @@ module Workflower # mattr_accessor :workflower_base attr_accessor :possible_events, :allowed_events, :allowed_transitions, :workflow_transition_event_name, :workflow_transition_flow - def set_intial_state + def set_initial_state write_attribute self.class.workflower_state_column_name, workflower_initial_state end @@ -52,9 +52,10 @@ module Workflower @workflower_base.uninitialize @workflower_base = nil - @possible_events = [] - @allowed_events = [] - @allowed_transitions = [] + @source_workflow_instance = nil + @possible_events = nil + @allowed_events = nil + @allowed_transitions = nil end def initialize(*) @@ -78,7 +79,7 @@ module Workflower self.default_workflow_id = default_workflow_id # self.validates "#{workflow_model.tableize.singularize}_id", presence: true - before_create :set_intial_state unless skip_setting_initial_state + before_create :set_initial_state unless skip_setting_initial_state end def workflower_abilities(workflow_selector: nil) From 7523e0b71979a005a5c988672be3e980e2adc52e Mon Sep 17 00:00:00 2001 From: ari Date: Wed, 10 Aug 2022 14:18:54 +0300 Subject: [PATCH 3/3] Reset source_workflow_instance on condition --- lib/workflower/acts_as_workflower.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/workflower/acts_as_workflower.rb b/lib/workflower/acts_as_workflower.rb index 24d57b0..b47dfe7 100644 --- a/lib/workflower/acts_as_workflower.rb +++ b/lib/workflower/acts_as_workflower.rb @@ -48,11 +48,11 @@ module Workflower @allowed_transitions ||= @workflower_base.allowed_transitions end - def workflower_uninitializer + def workflower_uninitializer(reset_source_workflow_instance: false) @workflower_base.uninitialize @workflower_base = nil - @source_workflow_instance = nil + @source_workflow_instance = nil if reset_source_workflow_instance @possible_events = nil @allowed_events = nil @allowed_transitions = nil @@ -83,9 +83,9 @@ module Workflower end def workflower_abilities(workflow_selector: nil) - # workflow_selector helps dynamic transition selection when we have multiple workflows that needs to change depending on the selector. + # workflow_selector helps dynamic transition selection when we have multiple workflows that needs to change depending on the workflow_selector. load = source.new(new).get_workflows.values.flatten.uniq unless workflow_selector.present? - load = source.new(selector.to_sym).get_workflows.values.flatten.uniq if selector.present? + load = source.new(workflow_selector.to_sym).get_workflows.values.flatten.uniq if workflow_selector.present? unless load.blank? # transitions = load.transitions.where("(metadata->>'roles') IS NOT NULL")