From 883bcb30bb3b4027375fb03185e5d11b80d622b5 Mon Sep 17 00:00:00 2001 From: lukemelia Date: Tue, 14 Nov 2006 04:37:28 +0000 Subject: [PATCH] Implement Null Object pattern for Todo.project to save bsag and I some script/console headaches. Thanks to Craig Ambrose for the "writeup":http://blog.craigambrose.com/articles/2006/09/22/active-record-associations-and-the-null-object-pattern git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@342 a4c988fc-2ded-0310-b66e-134b36920a42 --- tracks/app/models/project.rb | 16 ++++++++++++++++ tracks/app/models/todo.rb | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/tracks/app/models/project.rb b/tracks/app/models/project.rb index 54c0469f..561b6a30 100644 --- a/tracks/app/models/project.rb +++ b/tracks/app/models/project.rb @@ -33,6 +33,10 @@ class Project < ActiveRecord::Base attr_protected :user + def self.null_object + NullProject.new + end + def description_present? attribute_present?("description") end @@ -42,3 +46,15 @@ class Project < ActiveRecord::Base end end + +class NullProject + + def hidden? + false + end + + def nil? + true + end + +end \ No newline at end of file diff --git a/tracks/app/models/todo.rb b/tracks/app/models/todo.rb index 5201ecf0..0f7ea2e0 100644 --- a/tracks/app/models/todo.rb +++ b/tracks/app/models/todo.rb @@ -14,6 +14,12 @@ class Todo < ActiveRecord::Base validates_length_of :notes, :maximum => 60000, :allow_nil => true # validates_chronic_date :due, :allow_nil => true + alias_method :original_project, :project + + def project + original_project.nil? ? Project.null_object : original_project + end + def self.not_done( id=id ) self.find(:all, :conditions =>[ "done = ? AND context_id = ?", false, id], :order =>"due IS NULL, due ASC, created_at ASC") end