mirror of
https://github.com/TracksApp/tracks.git
synced 2026-01-06 17:28:50 +01:00
#300: Updated todo fsm behavior to prioritize pending state over deferred
This commit is contained in:
parent
496321b209
commit
375a132a1d
1 changed files with 16 additions and 6 deletions
|
|
@ -42,10 +42,8 @@ class Todo < ActiveRecord::Base
|
|||
|
||||
event :activate do
|
||||
transitions :to => :active, :from => [:project_hidden, :completed, :deferred]
|
||||
transitions :to => :active, :from => [:pending],
|
||||
:guard => Proc.new{|t| t.show_from.blank? or Time.zone.now > t.show_from and t.uncompleted_predecessors.empty?}
|
||||
transitions :to => :deferred, :from => [:pending],
|
||||
:guard => Proc.new{|t| t.uncompleted_predecessors.empty?}
|
||||
transitions :to => :active, :from => [:pending], :guard => :no_uncompleted_predecessors_or_deferral?
|
||||
transitions :to => :deferred, :from => [:pending], :guard => :no_uncompleted_predecessors?
|
||||
end
|
||||
|
||||
event :hide do
|
||||
|
|
@ -58,7 +56,7 @@ class Todo < ActiveRecord::Base
|
|||
end
|
||||
|
||||
event :block do
|
||||
transitions :to => :pending, :from => [:active]
|
||||
transitions :to => :pending, :from => [:active, :deferred]
|
||||
end
|
||||
|
||||
attr_protected :user
|
||||
|
|
@ -76,6 +74,18 @@ class Todo < ActiveRecord::Base
|
|||
@predecessor_array = nil # Used for deferred save of predecessors
|
||||
end
|
||||
|
||||
def no_uncompleted_predecessors_or_deferral?
|
||||
value = (show_from.blank? or Time.zone.now > show_from and uncompleted_predecessors.empty?)
|
||||
logger.debug "=== no_uncompleted_predecessors_or_deferral #{value}"
|
||||
return value
|
||||
end
|
||||
|
||||
def no_uncompleted_predecessors?
|
||||
value = self.uncompleted_predecessors.empty?
|
||||
logger.debug "=== no_uncompleted_predecessor #{value}"
|
||||
return value
|
||||
end
|
||||
|
||||
# TODO: Handle duplicate descriptions
|
||||
def validate
|
||||
if !show_from.blank? && show_from < user.date
|
||||
|
|
@ -247,7 +257,7 @@ class Todo < ActiveRecord::Base
|
|||
|
||||
# Return todos that should be blocked if the current todo is undone
|
||||
def active_to_block
|
||||
return successors.find_all {|t| t.active?}
|
||||
return successors.find_all {|t| t.active? or t.deferred?}
|
||||
end
|
||||
|
||||
# Rich Todo API
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue