fix clearing show_from fails

caused by slightly different (better) workings of aasm
This commit is contained in:
Reinier Balt 2013-05-03 19:28:26 +02:00
parent 883ea2b968
commit f891ee86fe
8 changed files with 80 additions and 32 deletions

View file

@ -4,12 +4,28 @@ module Todos
attr_reader :new_project_created, :new_context_created
def initialize(params, user)
@params = params['request'] || params
@attributes = params['request'] && params['request']['todo'] || params['todo']
@attributes = {} if @attributes.nil? # make sure there is at least an empty hash
set_params(params)
filter_attributes
filter_tags
filter_starred
@user = user
@errors = []
@new_project_created = find_or_create_group(:project, user.projects, project_name)
@new_context_created = find_or_create_group(:context, user.contexts, context_name)
end
def set_params(params)
@params = params['request'] || params
end
def filter_attributes
@attributes = @params['request'] && @params['request']['todo'] || @params['todo']
@attributes = {} if @attributes.nil? # make sure there is at least an empty hash
end
def filter_tags
if @attributes[:tags]
# for single tags, @attributed[:tags] returns a hash. For multiple tags,
# it with return an array of hashes. Make sure it is always an array of hashes
@ -18,11 +34,13 @@ module Todos
@attributes[:add_tags] = @attributes[:tags]
@attributes.delete :tags
end
end
@new_project_created = find_or_create_group(:project, user.projects, project_name)
@new_context_created = find_or_create_group(:context, user.contexts, context_name)
@attributes["starred"] = (params[:new_todo_starred]||"").include? "true" if params[:new_todo_starred]
end
def filter_starred
if @params[:new_todo_starred]
@attributes["starred"] = (@params[:new_todo_starred]||"").include? "true"
end
end
def attributes
@attributes

View file

@ -184,7 +184,7 @@ class TodosController < ApplicationController
@predecessor = todo
end
else
@todos = @todos_init
@todos = @build_todos
@saved = false
end
@ -194,6 +194,8 @@ class TodosController < ApplicationController
determine_down_count if @saved
@contexts = current_user.contexts if p.new_context_created
@projects = current_user.projects if p.new_project_created
@new_project_created = p.new_project_created
@new_context_created = p.new_context_created
@initial_context_name = params['default_context_name']
@initial_project_name = params['default_project_name']
@initial_tags = params['initial_tag_list']

View file

@ -70,10 +70,10 @@ class Todo < ActiveRecord::Base
aasm :column => :state do
state :active
state :active #, :enter => Proc.new{|t| puts "$$$ activating #{t.aasm_current_state} - #{t.show_from} "}
state :project_hidden
state :completed, :enter => Proc.new { |t| t.completed_at = Time.zone.now }, :exit => Proc.new { |t| t.completed_at = nil}
state :deferred, :after_exit => Proc.new { |t| t[:show_from] = nil}
state :completed, :before_enter => Proc.new { |t| t.completed_at = Time.zone.now }, :before_exit => Proc.new { |t| t.completed_at = nil}
state :deferred, :after_exit => Proc.new { |t| t[:show_from] = nil }
state :pending
event :defer do
@ -253,16 +253,19 @@ class Todo < ActiveRecord::Base
end
def show_from=(date)
# parse Date objects into the proper timezone
date = user.at_midnight(date) if (date.is_a? Date)
if deferred? && date.blank?
activate
else
# parse Date objects into the proper timezone
date = user.at_midnight(date) if (date.is_a? Date)
# show_from needs to be set before state_change because of "bug" in aasm.
# If show_from is not set, the todo will not validate and thus aasm will not save
# (see http://stackoverflow.com/questions/682920/persisting-the-state-column-on-transition-using-rubyist-aasm-acts-as-state-machi)
self[:show_from] = date
# show_from needs to be set before state_change because of "bug" in aasm.
# If show_from is not set, the todo will not validate and thus aasm will not save
# (see http://stackoverflow.com/questions/682920/persisting-the-state-column-on-transition-using-rubyist-aasm-acts-as-state-machi)
self[:show_from] = date
activate! if deferred? && date.blank?
defer! if active? && !date.blank? && date > user.date
defer if active? && !date.blank? && date > user.date
end
end
def starred?

View file

@ -64,7 +64,7 @@
}
function html_for_new_context() {
return "<%= @saved && @new_context_created ? escape_javascript(render(:partial => @todo.context, :locals => { :settings => {:collapsible => true} })) : "" %>";
return "<%= @new_context_created ? escape_javascript(render(:partial => @todo.context, :locals => { :settings => {:collapsible => true} })) : "" %>";
}
<% end -%>