Class: Workflower::Flow

Inherits:
Object
  • Object
show all
Defined in:
lib/workflower/flow.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Flow

rubocop:disable Metrics/AbcSize



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/workflower/flow.rb', line 7

def initialize(options)
  @state               = options[:state]
  @transition_into     = options[:transition_into]
  @event               = options[:event]
  @condition           = options[:condition] if options[:condition]
  @condition_type      = options[:condition_type] if options[:condition_type]
  @before_transition   = options[:before_transition] if options[:before_transition]
  @after_transition    = options[:after_transition] if options[:after_transition]
  @sequence            = options[:sequence]
  @downgrade_sequence  = options[:downgrade_sequence] || -1
  @workflow_id         = options[:workflow_id]
  @metadata            = options[:metadata]
  @deviation_id        = options[:deviation_id] || @workflow_id
  @trigger_action_name = "#{event}!"
  @boolean_action_name = "can_#{event}?"
end

Instance Attribute Details

#after_transitObject

Returns the value of attribute after_transit.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def after_transit
  @after_transit
end

#before_transitObject

Returns the value of attribute before_transit.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def before_transit
  @before_transit
end

#boolean_action_nameObject

Returns the value of attribute boolean_action_name.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def boolean_action_name
  @boolean_action_name
end

#conditionObject

Returns the value of attribute condition.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def condition
  @condition
end

#condition_typeObject

Returns the value of attribute condition_type.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def condition_type
  @condition_type
end

#deviation_idObject

Returns the value of attribute deviation_id.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def deviation_id
  @deviation_id
end

#downgrade_sequenceObject

Returns the value of attribute downgrade_sequence.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def downgrade_sequence
  @downgrade_sequence
end

#eventObject

Returns the value of attribute event.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def event
  @event
end

#metadataObject

Returns the value of attribute metadata.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def 
  @metadata
end

#sequenceObject

Returns the value of attribute sequence.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def sequence
  @sequence
end

#stateObject

Returns the value of attribute state.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def state
  @state
end

#transition_intoObject

Returns the value of attribute transition_into.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def transition_into
  @transition_into
end

#trigger_action_nameObject

Returns the value of attribute trigger_action_name.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def trigger_action_name
  @trigger_action_name
end

#workflow_idObject

Returns the value of attribute workflow_id.



3
4
5
# File 'lib/workflower/flow.rb', line 3

def workflow_id
  @workflow_id
end

Instance Method Details

#after_transition_proc_nameObject



32
33
34
# File 'lib/workflower/flow.rb', line 32

def after_transition_proc_name
  @after_transition.blank? ? "after_workflow_#{event}".to_sym : @after_transition.to_sym
end

#before_transition_proc_nameObject



24
25
26
# File 'lib/workflower/flow.rb', line 24

def before_transition_proc_name
  @before_transition.blank? ? "before_workflow_#{event}".to_sym : @before_transition.to_sym
end

#call_after_transition(calling_model) ⇒ Object



36
37
38
# File 'lib/workflower/flow.rb', line 36

def call_after_transition(calling_model)
  calling_model.send(after_transition_proc_name) if calling_model.respond_to? after_transition_proc_name
end

#call_before_transition(calling_model) ⇒ Object



28
29
30
# File 'lib/workflower/flow.rb', line 28

def call_before_transition(calling_model)
  calling_model.send(before_transition_proc_name) if calling_model.respond_to? before_transition_proc_name
end

#condition_is_met?(calling_model) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/workflower/flow.rb', line 44

def condition_is_met?(calling_model)
  if @condition_type == "expression"

    evaluation_phrase = @condition.split(" ").map do |item|
      if ["||", "&&", "(", ")", "=="].include?(item)
        item
      else
        "calling_model.#{item}"
      end
    end

    return eval(evaluation_phrase.join(" "))
  end

  if !condition_proc_name.blank? && calling_model.respond_to?(condition_proc_name)
    return calling_model.send(condition_proc_name)
  end

  true
end

#condition_proc_nameObject



40
41
42
# File 'lib/workflower/flow.rb', line 40

def condition_proc_name
  @condition || nil
end

#updateable_attributes(calling_model) ⇒ Object



65
66
67
68
69
70
# File 'lib/workflower/flow.rb', line 65

def updateable_attributes(calling_model)
  attributes = { calling_model.workflower_state_column_name => @transition_into }
  attributes[:sequence] = @downgrade_sequence.negative? ? @sequence : @downgrade_sequence

  attributes
end