diff --git a/db/migrate/042_change_dates_to_datetimes.rb b/db/migrate/042_change_dates_to_datetimes.rb index 1ea940b0..d534c642 100644 --- a/db/migrate/042_change_dates_to_datetimes.rb +++ b/db/migrate/042_change_dates_to_datetimes.rb @@ -6,32 +6,28 @@ class ChangeDatesToDatetimes < ActiveRecord::Migration change_column :recurring_todos, :end_date, :datetime User.all(:include => [:todos, :recurring_todos]).each do |user| - if user.prefs - user.todos.each do |todo| - todo.update_attribute(:show_from, user.at_midnight(todo.show_from)) unless todo.show_from.nil? - todo.update_attribute(:due, user.at_midnight(todo.due)) unless todo.due.nil? - end - - user.recurring_todos.each do |todo| - todo.update_attribute(:start_from, user.at_midnight(todo.start_from)) unless todo.start_from.nil? - todo.update_attribute(:end_date, user.at_midnight(todo.end_date)) unless todo.end_date.nil? - end - else # weird...no preferences for this user - user.todos.each do |todo| - todo.update_attribute(:show_from, at_midnight(todo.show_from)) unless todo.show_from.nil? - todo.update_attribute(:due, at_midnight(todo.due)) unless todo.due.nil? - end - - user.recurring_todos.each do |todo| - todo.update_attribute(:start_from, at_midnight(todo.start_from)) unless todo.start_from.nil? - todo.update_attribute(:end_date, at_midnight(todo.end_date)) unless todo.end_date.nil? + if !user.prefs ## ugly hack for strange edge-case of not having preferences object + user.instance_eval do + def at_midnight(date) + return Time.zone.local(date.year, date.month, date.day, 0, 0, 0) + end + def time + Time.zone.now + end end end - end - end + user.todos.each do |todo| + todo[:show_from] = user.at_midnight(todo.show_from) unless todo.show_from.nil? + todo[:due] = user.at_midnight(todo.due) unless todo.due.nil? + todo.save_with_validation(false) + end - def at_midnight(date) - return Time.zone.local(date.year, date.month, date.day, 0, 0, 0) + user.recurring_todos.each do |todo| + todo[:start_from] = user.at_midnight(todo.start_from) unless todo.start_from.nil? + todo[:end_date] = user.at_midnight(todo.end_date) unless todo.end_date.nil? + todo.save_with_validation(false) + end + end end def self.down