tracks/db/migrate/20160131233303_remove_project_hidden_state_from_todos.rb
2019-05-13 18:42:57 +02:00

42 lines
1.1 KiB
Ruby

class RemoveProjectHiddenStateFromTodos < ActiveRecord::Migration[5.2]
class Todo < ActiveRecord::Base
has_many :successor_dependencies, :foreign_key => 'successor_id', :class_name => 'Dependency'
belongs_to :project
end
class Project < ActiveRecord::Base
end
class Dependency < ActiveRecord::Base
belongs_to :predecessor, :foreign_key => 'predecessor_id', :class_name => 'Todo'
end
def self.up
Todo.where(state: 'project_hidden').find_each do |todo|
if todo.show_from.present?
todo.state = 'deferred'
elsif has_uncompleted_predecessor(todo)
todo.state = 'pending'
else
todo.state = 'active'
end
todo.save
end
end
def self.down
Project.where(state: 'hidden').find_each do |project|
Todo.where(project_id: project.id).where.not(state: 'completed').find_each do |todo|
todo.state = 'project_hidden'
todo.save
end
end
end
def has_uncompleted_predecessor(todo)
todo.successor_dependencies.each do |dependency|
return true unless dependency.predecessor.state == 'completed'
end
false
end
end