Update acts_as_workflower.rb

This commit is contained in:
Brusk Hamarash 2022-01-17 11:33:15 +03:00 committed by GitHub
parent 3109e6452b
commit b886f2891a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,26 +1,14 @@
# frozen_string_literal: true
require "active_support"
# Workflower Module Defintion
module Workflower module Workflower
mattr_accessor :workflower_state_column_name mattr_accessor :workflower_state_column_name, :default_workflow_id
mattr_accessor :workflow_model
mattr_accessor :transition_model
mattr_accessor :conditions
# ActsAsWorkflower Module Definition
module ActsAsWorkflower module ActsAsWorkflower
extend ActiveSupport::Concern extend ActiveSupport::Concern
# InstanceMethods
module InstanceMethods module InstanceMethods
#mattr_accessor :workflower_base #mattr_accessor :workflower_base
attr_accessor :possible_events, :allowed_events, :allowed_transitions, :workflow_transition_event_name, attr_accessor :possible_events, :allowed_events, :allowed_transitions
:workflow_transition_flow
def set_intial_state def set_intial_state
write_attribute self.class.workflower_state_column_name, workflower_initial_state write_attribute self.class.workflower_state_column_name, self.workflower_initial_state
end end
def workflower_initial_state def workflower_initial_state
@ -28,24 +16,25 @@ module Workflower
end end
def workflower_base def workflower_base
@workflower_base return @workflower_base
end end
def source_workflow def source_workflow
source.get_workflows_for_workflow_id(workflow_id) @source_workflow_instance ||= self.source.new(self)
@source_workflow_instance.get_workflows_for_workflow_id(workflow_id)
end end
def workflower_initializer def workflower_initializer
@workflower_base ||= Workflower::Manager.new(self, source) @source_workflow_instance ||= self.source.new(self)
@workflower_base ||= Workflower::Manager.new(self, @source_workflow_instance)
@workflower_base.allowed_transitions.each do |flow| @workflower_base.allowed_transitions.each do |flow|
define_singleton_method flow.trigger_action_name.to_s do define_singleton_method "#{flow.trigger_action_name}" do
@workflow_transition_event_name = flow.event
@workflow_transition_flow = flow
@workflower_base.process_transition!(flow) @workflower_base.process_transition!(flow)
end end
define_singleton_method flow.boolean_action_name.to_s do define_singleton_method "#{flow.boolean_action_name}" do
@workflower_base.transition_possible?(flow) @workflower_base.transition_possible?(flow)
end end
end end
@ -57,51 +46,47 @@ module Workflower
def initialize(*) def initialize(*)
super super
write_attribute :workflow_id, source.get_workflows.keys.last.to_s.to_i if workflow_id.blank? write_attribute :workflow_id, self.default_workflow_id if workflow_id.blank?
workflower_initializer workflower_initializer
end end
end end
# Class Methods
module ClassMethods module ClassMethods
# rubocop:disable Metrics/AbcSize def workflower(workflower_state_column_name: "workflow_state", default_workflow_id:, source:)
def workflower(options = { workflower_state_column_name: "workflow_state" }) raise Workflower::WorkflowerError.new("Options can't be blank") if source.blank? || default_workflow_id.blank?
if options[:source].blank? || options[:conditions].blank? cattr_accessor :source, default: source
raise Workflower::WorkflowerError, "Options can't be blank" cattr_accessor :workflower_state_column_name, default: workflower_state_column_name
end cattr_accessor :default_workflow_id, default: default_workflow_id
cattr_accessor :source, default: options[:source] self.workflower_state_column_name = workflower_state_column_name
cattr_accessor :conditions, default: options[:conditions] self.source = source
cattr_accessor :workflower_state_column_name, default: options[:workflower_state_column_name] self.default_workflow_id = default_workflow_id
self.workflower_state_column_name = options[:workflower_state_column_name]
self.source = options[:source]
self.conditions = options[:conditions]
#self.validates "#{workflow_model.tableize.singularize}_id", presence: true #self.validates "#{workflow_model.tableize.singularize}_id", presence: true
before_create :set_intial_state self.before_create :set_intial_state
end end
def workflower_abilities def workflower_abilities
load = source.get_workflows.values.flatten.uniq load = source.new(self.new).get_workflows.values.flatten.uniq
return [] if load.blank?
unless load.blank?
#transitions = load.transitions.where("(metadata->>'roles') IS NOT NULL") #transitions = load.transitions.where("(metadata->>'roles') IS NOT NULL")
transitions = load.select { |item| item.try(:[], :metadata).try(:key?, :roles)} transitions = load.select { |item| item.try(:[], :metadata).try(:key?, :roles)}
roles = transitions.map{ |item| item[:metadata][:roles] }.flatten.uniq roles = transitions.map{ |item| item[:metadata][:roles] }.flatten.uniq
roles_hash = {} roles_hash = Hash.new
roles.each do |role| roles.each do |role|
roles_hash[role] = transitions.select do |trans| roles_hash[role] = transitions.select { |trans| trans[:metadata][:roles].to_a.include?(role) }.map {|item| item[:event] }.uniq
trans[:metadata][:roles].to_a.include?(role)
end.map { |item| item[:event] }.uniq
end end
roles_hash return roles_hash
end
end end
end end