From 375a132a1d1717b1257b7d4b544571cd7208ec2c Mon Sep 17 00:00:00 2001 From: Henrik Bohre Date: Sun, 16 Aug 2009 22:00:20 +0200 Subject: [PATCH] #300: Updated todo fsm behavior to prioritize pending state over deferred --- app/models/todo.rb | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/app/models/todo.rb b/app/models/todo.rb index b5bc0353..6dc75816 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -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