Class: Stepped::Step
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Stepped::Step
show all
- Defined in:
- app/models/stepped/step.rb
Defined Under Namespace
Classes: NoPendingActionsError
Constant Summary
collapse
- STATUSES =
%w[
pending
performing
succeeded
failed
].freeze
Instance Method Summary
collapse
Instance Method Details
#conclude_job(succeeded = true) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'app/models/stepped/step.rb', line 49
def conclude_job(succeeded = true)
with_lock do
raise NoPendingActionsError unless pending_actions_count > 0
decrement :pending_actions_count
increment :unsuccessful_actions_count unless succeeded
if pending_actions_count.zero?
assign_attributes(completed_at: Time.zone.now, status: determine_status)
end
save!
end
action.accomplished(self) if pending_actions_count.zero?
end
|
#display_position ⇒ Object
66
67
68
|
# File 'app/models/stepped/step.rb', line 66
def display_position
definition_index + 1
end
|
#do(action_name, *args) ⇒ Object
31
32
33
|
# File 'app/models/stepped/step.rb', line 31
def do(action_name, *args)
on action.actor, action_name, *args
end
|
#on(actors, action_name, *args) ⇒ Object
35
36
37
38
39
40
41
42
|
# File 'app/models/stepped/step.rb', line 35
def on(actors, action_name, *args)
Array(actors).compact.each do |actor|
increment :pending_actions_count
@jobs << Stepped::ActionJob.new(actor, action_name, *args, parent_step: self)
end
save!
end
|
19
20
21
22
23
24
25
26
27
28
29
|
# File 'app/models/stepped/step.rb', line 19
def perform
@jobs = []
if execute_block
ActiveJob.perform_all_later @jobs
else
self.pending_actions_count = 0
self.status = :failed
end
complete! if pending_actions_count.zero?
end
|
#wait(duration) ⇒ Object
44
45
46
47
|
# File 'app/models/stepped/step.rb', line 44
def wait(duration)
increment! :pending_actions_count
@jobs << Stepped::WaitJob.new(self).set(wait: duration)
end
|