73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/spiderfw/model/mixins/state_machine.rb', line 73
def before_save(obj, mode)
obj.model.elements_array.select{ |el| el.association == :state }.each do |el|
if (obj.model.state_events[el.name] && obj.element_modified?(el))
old = obj.get_new
old_state = old.get(el.name)
new_state = obj.get(el.name)
old_state = old_state.primary_keys.first if old_state && el.model?
new_state = new_state.primary_keys.first if new_state && el.model?
obj.model.state_events[el.name].each do |event|
call_ev = false
event.transitions.each do |tr|
from_ok = false
to_ok = false
if tr[:from]
tr[:from] = [tr[:from]] unless tr[:from].is_a?(Array)
from_ok = true if tr[:from].include?(old_state)
else
from_ok = true
end
if tr[:to]
tr[:to] = [tr[:to]] unless tr[:to].is_a?(Array)
to_ok = true if tr[:to].include?(new_state)
else
to_ok = true
end
if from_ok && to_ok
call_ev = true
break
end
end
if (call_ev)
obj._pending_state_events << [event, old_state, new_state]
end
end
end
end
super
end
|