Push conversion of a todo to a project down.

Refactor the conversion of a todo to a project and move it from the
TodosController to the Project model.
This commit is contained in:
Matt Rogers 2012-08-14 19:31:34 -05:00
parent 2911036ff7
commit b01c7878d1
3 changed files with 27 additions and 7 deletions

View file

@ -900,13 +900,10 @@ class TodosController < ApplicationController
end
def convert_to_project
@todo = current_user.todos.find_by_id(params[:id])
@project = current_user.projects.new(:name => @todo.description, :description => @todo.notes,
:default_context => @todo.context)
unless @project.invalid?
@todo.destroy
@project.save!
todo = current_user.todos.find_by_id(params[:id])
@project = Project.create_from_todo(todo)
if @project.valid?
redirect_to project_url(@project)
else
flash[:error] = "Could not create project from todo: #{@project.errors.full_messages[0]}"

View file

@ -47,6 +47,21 @@ class Project < ActiveRecord::Base
NullProject.new
end
def self.create_from_todo(todo)
project = Project.new(:name => todo.description,
:description => todo.notes,
:default_context => todo.context)
project.user = todo.user
if project.valid?
todo.destroy
project.save!
end
project
end
def hide_todos
todos.each do |t|
unless t.completed? || t.deferred?

View file

@ -166,5 +166,13 @@ class ProjectTest < ActiveSupport::TestCase
@moremoney.todos[0].complete!
assert_equal 3, @moremoney.todos.not_completed.count
end
def test_convert_from_todo
todo = todos(:upgrade_rails)
project = Project.create_from_todo(todo)
assert_equal project.name, todo.description
assert_equal project.description, todo.notes
assert_equal project.default_context, todo.context
end
end