module Petri::NetLoader
Public Class Methods
included(base_class)
click to toggle source
# File lib/petri/net_loader.rb, line 103 def self.included(base_class) base_class.extend(ClassMethods) end
Public Instance Methods
add_arc(guid: nil, from_guid: , to_guid: , type: , production_rule: nil, guard: nil, timer_rule: nil)
click to toggle source
@param guid [String] @param identifier [String] @param from_guid [String] @param to_guid [String] @param type [String] @param production_rule [String, nil]
# File lib/petri/net_loader.rb, line 55 def add_arc(guid: nil, from_guid: , to_guid: , type: , production_rule: nil, guard: nil, timer_rule: nil) from_node = node_by_guid(from_guid) to_node = node_by_guid(to_guid) if type == 'test' @arcs << Arc.new(self, from: from_node, to: to_node, type: :regular, guid: guid, guard: guard, timer_rule: timer_rule) @arcs << Arc.new(self, from: to_node, to: from_node, type: :regular, guid: guid) else @arcs << Arc.new(self, from: from_node, to: to_node, type: type.try(:to_sym), guid: guid, production_rule: production_rule, guard: guard, timer_rule: timer_rule) end end
add_message(guid: nil, identifier:)
click to toggle source
@param guid [String] @param identifier [String] @param action [String]
# File lib/petri/net_loader.rb, line 34 def add_message(guid: nil, identifier:) Message.new(self, {guid: guid, identifier: identifier}).tap do |message| @transitions << message end end
add_place(guid: nil, identifier: , start: false, finish: false)
click to toggle source
@param guid [String] @param identifier [String] @param start [true, false]
# File lib/petri/net_loader.rb, line 16 def add_place(guid: nil, identifier: , start: false, finish: false) Place.new(self, {guid: guid, identifier: identifier, start: start, finish: finish}).tap do |place| @places << place end end
add_task(task_data, net_data)
click to toggle source
@param task_data [Hash] @param net_data [Hash] full bpf
# File lib/petri/net_loader.rb, line 69 def add_task(task_data, net_data) identifier = task_data['identifier'] add_task_transition(task_identifier: identifier, pin: 'Finish', automated: false) if task_data['manual_finish_enabled'] add_task_transition(task_identifier: identifier, pin: 'Cancel', automated: false) # Manual cancel is always enabled? task_arcs = net_data['arcs'].select { |arc| arc['to_guid'] == task_data['guid'] }.group_by { |arc| arc['pin'] } task_arcs.each { |pin, arcs| connect_task_arcs(identifier, pin, arcs) } end
add_task_transition(task_identifier:, pin:, automated:)
click to toggle source
@param task_identifier [String] @param pin [String] @param automated [true, false]
# File lib/petri/net_loader.rb, line 43 def add_task_transition(task_identifier:, pin:, automated:) TaskTransition.new(self, {task_identifier: task_identifier, pin: pin, automated: automated, process_class: tasks_process_class}).tap do |transition| @transitions << transition end end
add_transition(guid: nil, identifier: , action: nil, automated: )
click to toggle source
@param guid [String] @param identifier [String] @param action [String]
# File lib/petri/net_loader.rb, line 25 def add_transition(guid: nil, identifier: , action: nil, automated: ) Transition.new(self, {guid: guid, identifier: identifier, action: action, automated: automated}).tap do |transition| @transitions << transition end end
connect_task_arcs(task_identifier, pin, arcs)
click to toggle source
@param task_identifier [String] @param pin [String] Create, Pause, Finish, Cancel @param arcs [Array<Petri::Arc>]
# File lib/petri/net_loader.rb, line 82 def connect_task_arcs(task_identifier, pin, arcs) return if arcs.empty? transition = add_task_transition(task_identifier: task_identifier, pin: pin, automated: true) # (p*) <?-> [(T) task pin] arcs.each_with_index do |arc, index| front_arc_type = arc['type'] == 'test' ? 'regular' : arc['type'] add_arc(from_guid: arc['from_guid'], to_guid: transition.guid, type: front_arc_type, guard: arc['guard'], timer_rule: arc['timer_rule']) add_arc(from_guid: transition.guid, to_guid: arc['from_guid'], type: 'regular') if arc['type'] == 'test' end end
tasks_process_class()
click to toggle source
@return [String, Class]
# File lib/petri/net_loader.rb, line 9 def tasks_process_class @tasks_process_class || 'TasksProcess' end
tasks_process_class=(val)
click to toggle source
@param val [String, Class]
# File lib/petri/net_loader.rb, line 4 def tasks_process_class=(val) @tasks_process_class = val end