class Reactor::Tools::WorkflowGenerator
Attributes
correctors[R]
editors[R]
groups[R]
obj[R]
users[R]
workflow_name[R]
Public Class Methods
new(options)
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 6 def initialize(options) @editors = options[:editors] @correctors = options[:correctors] @users = @editors + @correctors @groups = personal_groups(@users) @class_name = options[:obj_class] || generate_obj_class_name @workflow_name = options[:workflow_name] || generate_workflow_name @obj_name = options[:obj_name] || generate_obj_name end
Public Instance Methods
destroy!()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 27 def destroy! destroy_objs destroy_obj_class destroy_workflow destroy_users destroy_groups destroy_signatures end
generate!()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 16 def generate! create_groups create_users create_signatures create_workflow create_obj_class create_obj set_permissions start_workflow end
personal_group(user)
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 36 def personal_group(user) "#{user}_group" end
Protected Instance Methods
create_groups()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 50 def create_groups @groups.each do |group| if Reactor::Cm::Group.exists?(group) Reactor::Cm::Group.get(group) else Reactor::Cm::Group.create(:name => group) end end end
create_obj()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 119 def create_obj @obj = Reactor::Cm::Obj.create(@obj_name, '/', @class_name) @obj.set(:workflowName, @workflow_name) @obj.save! end
create_obj_class()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 111 def create_obj_class @obj_class = if Reactor::Cm::ObjClass.exists?(@class_name) Reactor::Cm::ObjClass.get(@class_name) else Reactor::Cm::ObjClass.create(@class_name, 'publication') end end
create_signatures()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 72 def create_signatures # hash storing users as keys and attribute names as values @signatures = {} @users.each do |user| signature = personal_signature(user) if Reactor::Cm::Attribute.exists?(signature) #Reactor::Cm::Attribute.get(signature) @signatures[user] = signature else Reactor::Cm::Attribute.create(signature, 'signature') @signatures[user] = signature end end end
create_users()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 60 def create_users @users.each do |user| if Reactor::Cm::User::Internal.exists?(user) internal_user = Reactor::Cm::User::Internal.get(user) else internal_user = Reactor::Cm::User::Internal.create(user, personal_group(user)) end internal_user.change_password('thepasswordispassword') end end
create_workflow()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 87 def create_workflow if Reactor::Cm::Workflow.exists?(@workflow_name) @workflow = Reactor::Cm::Workflow.get(@workflow_name) else @workflow = Reactor::Cm::Workflow.create(@workflow_name) end # set up workflow steps @workflow.edit_groups = personal_groups(@editors) serialized_signatures = [] @correctors.each do |corrector| signature = { :group => personal_group(corrector), :attribute => @signatures[corrector] } serialized_signatures << signature end @workflow.signatures = serialized_signatures @workflow.save! @workflow.reload end
destroy_groups()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 164 def destroy_groups @groups.each do |group| Reactor::Cm::Group.get(group).delete! end end
destroy_obj_class()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 150 def destroy_obj_class @obj_class.delete! end
destroy_objs()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 146 def destroy_objs RailsConnector::AbstractObj.where(obj_class: @class_name).each(&:destroy) end
destroy_signatures()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 170 def destroy_signatures @signatures.values.each do |attribute| Reactor::Cm::Attribute.get(attribute).delete! end end
destroy_users()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 158 def destroy_users @users.each do |user| Reactor::Cm::User::Internal.get(user).delete! end end
destroy_workflow()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 154 def destroy_workflow @workflow.delete! end
generate_obj_class_name()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 184 def generate_obj_class_name "GeneratedObjClass#{generate_token}" end
generate_obj_name()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 180 def generate_obj_name "generated_obj#{generate_token}" end
generate_token()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 188 def generate_token characters = ('0'..'9').to_a + ('A'..'Z').to_a + ('a'..'z').to_a token = 8.times.map { characters[rand(characters.length)] }.join end
generate_workflow_name()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 176 def generate_workflow_name "GeneratedWorkflow#{generate_token}" end
personal_groups(users)
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 46 def personal_groups(users) users.map {|user| personal_group(user) } end
personal_signature(user)
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 42 def personal_signature(user) "#{user}_signature" end
set_permissions()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 125 def set_permissions # get RC object @rc_obj = RailsConnector::AbstractObj.find(@obj.obj_id) # use nice API to set permissions @groups.each do |group| @rc_obj.permission.grant(:read, group) @rc_obj.permission.grant(:write, group) end # Allow Dirk to release the object @rc_obj.permission.grant(:root, personal_group(@correctors.last)) end
start_workflow()
click to toggle source
# File lib/reactor/tools/workflow_generator.rb, line 139 def start_workflow @obj.release! Reactor::Sudo.su(@editors.first) do @obj.edit! end end