<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -134,8 +134,8 @@ class ContextsController &lt; ApplicationController
   def render_contexts_mobile
     lambda do
       @page_title = &quot;TRACKS::List Contexts&quot;
-      @active_contexts = @contexts.find(:all, { :conditions =&gt; [&quot;hide = ?&quot;, false]})
-      @hidden_contexts = @contexts.find(:all, { :conditions =&gt; [&quot;hide = ?&quot;, true]})
+      @active_contexts = @contexts.active
+      @hidden_contexts = @contexts.hidden
       @down_count = @active_contexts.size + @hidden_contexts.size 
       cookies[:mobile_url]= {:value =&gt; request.request_uri, :secure =&gt; TRACKS_COOKIES_SECURE}
       render :action =&gt; 'index_mobile'</diff>
      <filename>app/controllers/contexts_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,12 +12,12 @@ class FeedlistController &lt; ApplicationController
       @contexts = current_user.contexts
     end
     
-    @active_projects = @projects.select{ |p| p.active? }
-    @hidden_projects = @projects.select{ |p| p.hidden? }
-    @completed_projects = @projects.select{ |p| p.completed? }
+    @active_projects = current_user.projects.active
+    @hidden_projects = current_user.projects.hidden
+    @completed_projects = current_user.projects.completed
     
-    @active_contexts = @contexts.select{ |c| !c.hidden? }
-    @hidden_contexts = @contexts.select{ |c| c.hidden? }
+    @active_contexts = current_user.contexts.active
+    @hidden_contexts = current_user.contexts.hidden
     
     respond_to do |format|
       format.html { render :layout =&gt; 'standard' }</diff>
      <filename>app/controllers/feedlist_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -31,7 +31,7 @@ class ProjectsController &lt; ApplicationController
   end
 
   def projects_and_actions
-    @projects = @projects.select { |p| p.active? }
+    @projects = @projects.active
     respond_to do |format|
       format.text  { 
         render :action =&gt; 'index_text_projects_and_actions', :layout =&gt; false, :content_type =&gt; Mime::TEXT
@@ -83,7 +83,7 @@ class ProjectsController &lt; ApplicationController
     @go_to_project = params['go_to_project']
     @saved = @project.save
     @project_not_done_counts = { @project.id =&gt; 0 }
-    @active_projects_count = current_user.projects.count(:conditions =&gt; &quot;state = 'active'&quot;)
+    @active_projects_count = current_user.projects.active.count
     @contexts = current_user.contexts
     respond_to do |format|
       format.js { @down_count = current_user.projects.size }
@@ -124,9 +124,9 @@ class ProjectsController &lt; ApplicationController
           @project_not_done_counts[@project.id] = @project.reload().not_done_todo_count(:include_project_hidden_todos =&gt; true)
         end
         @contexts = current_user.contexts
-        @active_projects_count = current_user.projects.count(:conditions =&gt; &quot;state = 'active'&quot;)
-        @hidden_projects_count = current_user.projects.count(:conditions =&gt; &quot;state = 'hidden'&quot;)
-        @completed_projects_count = current_user.projects.count(:conditions =&gt; &quot;state = 'completed'&quot;)
+        @active_projects_count = current_user.projects.active.count
+        @hidden_projects_count = current_user.projects.hidden.count
+        @completed_projects_count = current_user.projects.completed.count
         render :template =&gt; 'projects/update.js.rjs'
         return
       elsif boolean_param('update_status')
@@ -161,9 +161,9 @@ class ProjectsController &lt; ApplicationController
   
   def destroy
     @project.destroy
-    @active_projects_count = current_user.projects.count(:conditions =&gt; &quot;state = 'active'&quot;)
-    @hidden_projects_count = current_user.projects.count(:conditions =&gt; &quot;state = 'hidden'&quot;)
-    @completed_projects_count = current_user.projects.count(:conditions =&gt; &quot;state = 'completed'&quot;)
+    @active_projects_count = current_user.projects.active.count
+    @hidden_projects_count = current_user.projects.hidden.count
+    @completed_projects_count = current_user.projects.completed.count
     respond_to do |format|
       format.js { @down_count = current_user.projects.size }
       format.xml { render :text =&gt; &quot;Deleted project #{@project.name}&quot; }
@@ -199,9 +199,9 @@ class ProjectsController &lt; ApplicationController
     lambda do
       @page_title = &quot;TRACKS::List Projects&quot;
       @count = current_user.projects.size 
-      @active_projects = @projects.select{ |p| p.active? }
-      @hidden_projects = @projects.select{ |p| p.hidden? }
-      @completed_projects = @projects.select{ |p| p.completed? }
+      @active_projects = @projects.active
+      @hidden_projects = @projects.hidden
+      @completed_projects = @projects.completed
       @no_projects = @projects.empty?
       @projects.cache_note_counts
       @new_project = current_user.projects.build
@@ -211,9 +211,9 @@ class ProjectsController &lt; ApplicationController
 
   def render_projects_mobile
     lambda do
-      @active_projects = @projects.select{ |p| p.active? }
-      @hidden_projects = @projects.select{ |p| p.hidden? }
-      @completed_projects = @projects.select{ |p| p.completed? }
+      @active_projects = @projects.active
+      @hidden_projects = @projects.hidden
+      @completed_projects = @projects.completed
       @down_count = @active_projects.size + @hidden_projects.size + @completed_projects.size 
       cookies[:mobile_url]= {:value =&gt; request.request_uri, :secure =&gt; TRACKS_COOKIES_SECURE}
       render :action =&gt; 'index_mobile'</diff>
      <filename>app/controllers/projects_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -118,7 +118,7 @@ class RecurringTodosController &lt; ApplicationController
       else
         @message += &quot; / did not create todo&quot;
       end
-      @count = current_user.recurring_todos.count(:all, :conditions =&gt; [&quot;state = ?&quot;, &quot;active&quot;])
+      @count = current_user.recurring_todos.active.count
     else
       @message = &quot;Error saving recurring todo&quot;
     end    
@@ -140,7 +140,7 @@ class RecurringTodosController &lt; ApplicationController
     
     # delete the recurring todo
     @saved = @recurring_todo.destroy
-    @remaining = current_user.recurring_todos.count(:all)
+    @remaining = current_user.recurring_todos.count
     
     respond_to do |format|
       </diff>
      <filename>app/controllers/recurring_todos_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@ class StatsController &lt; ApplicationController
     @page_title = 'TRACKS::Statistics'
       
     @unique_tags = @tags.count(:all, {:group=&gt;&quot;tag_id&quot;})
-    @hidden_contexts = @contexts.find(:all, {:conditions =&gt; [&quot;hide = ? &quot;, true]})
+    @hidden_contexts = @contexts.hidden
     @first_action = @actions.find(:first, :order =&gt; &quot;created_at ASC&quot;)
     
     get_stats_actions</diff>
      <filename>app/controllers/stats_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,7 @@ class TodosController &lt; ApplicationController
     @projects = current_user.projects.find(:all, :include =&gt; [:default_context])
     @contexts = current_user.contexts.find(:all)
 
-    @contexts_to_show = @contexts.reject {|x| x.hide? }    
+    @contexts_to_show = current_user.contexts.active
     
     respond_to do |format|
       format.html  &amp;render_todos_html
@@ -28,7 +28,7 @@ class TodosController &lt; ApplicationController
   end
   
   def new
-    @projects = current_user.projects.select { |p| p.active? }
+    @projects = current_user.projects.active
     @contexts = current_user.contexts.find(:all)
     respond_to do |format|
       format.m {
@@ -116,7 +116,7 @@ class TodosController &lt; ApplicationController
   def show
     respond_to do |format|
       format.m do
-        @projects = current_user.projects.select { |p| p.active? }
+        @projects = current_user.projects.active
         @contexts = current_user.contexts.find(:all)
         @edit_mobile = true
         @return_path=cookies[:mobile_url]
@@ -442,33 +442,33 @@ class TodosController &lt; ApplicationController
     due_next_week_date = due_this_week_date + 7.days
     due_this_month_date = Time.zone.now.end_of_month
     
-    @due_today = current_user.todos.find(:all, 
+    @due_today = current_user.todos.not_completed.find(:all,
       :include =&gt; [:taggings, :tags], 
-      :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &lt;= ?', 'active', 'deferred', due_today_date],
+      :conditions =&gt; ['todos.due &lt;= ?', due_today_date],
       :order =&gt; &quot;due&quot;)
-    @due_this_week = current_user.todos.find(:all, 
+    @due_this_week = current_user.todos.not_completed.find(:all,
       :include =&gt; [:taggings, :tags], 
-      :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ? AND todos.due &lt;= ?', 'active', 'deferred', due_today_date, due_this_week_date],
+      :conditions =&gt; ['todos.due &gt; ? AND todos.due &lt;= ?', due_today_date, due_this_week_date],
       :order =&gt; &quot;due&quot;)
-    @due_next_week = current_user.todos.find(:all, 
+    @due_next_week = current_user.todos.not_completed.find(:all,
       :include =&gt; [:taggings, :tags], 
-      :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ? AND todos.due &lt;= ?', 'active', 'deferred', due_this_week_date, due_next_week_date],
+      :conditions =&gt; ['todos.due &gt; ? AND todos.due &lt;= ?', due_this_week_date, due_next_week_date],
       :order =&gt; &quot;due&quot;)
-    @due_this_month = current_user.todos.find(:all, 
+    @due_this_month = current_user.todos.not_completed.find(:all,
       :include =&gt; [:taggings, :tags], 
-      :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ? AND todos.due &lt;= ?', 'active', 'deferred', due_next_week_date, due_this_month_date],
+      :conditions =&gt; ['todos.due &gt; ? AND todos.due &lt;= ?', due_next_week_date, due_this_month_date],
       :order =&gt; &quot;due&quot;)
-    @due_after_this_month = current_user.todos.find(:all, 
+    @due_after_this_month = current_user.todos.not_completed.find(:all,
       :include =&gt; [:taggings, :tags], 
-      :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ?', 'active', 'deferred', due_this_month_date],
+      :conditions =&gt; ['todos.due &gt; ?', due_this_month_date],
       :order =&gt; &quot;due&quot;)
-    
+
+    @count = current_user.todos.not_completed.are_due.count
+
     respond_to do |format|
       format.html
       format.ics   {
-        @due_all = current_user.todos.find(:all, 
-          :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND NOT todos.due IS NULL', 'active', 'deferred'],
-          :order =&gt; &quot;due&quot;)
+        @due_all = current_user.todos.not_completed.are_due.find(:all, :order =&gt; &quot;due&quot;)
         render :action =&gt; 'calendar', :layout =&gt; false, :content_type =&gt; Mime::ICS
       }
     end
@@ -834,20 +834,20 @@ class TodosController &lt; ApplicationController
     due_this_month_date = Time.zone.now.end_of_month
     case id
     when &quot;due_today&quot;
-      return 0 == current_user.todos.count(:all, 
-        :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &lt;= ?', 'active', 'deferred', due_today_date])
+      return 0 == current_user.todos.not_completed.count(:all,
+        :conditions =&gt; ['todos.due &lt;= ?', due_today_date])
     when &quot;due_this_week&quot;
-      return 0 == current_user.todos.count(:all, 
-        :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ? AND todos.due &lt;= ?', 'active', 'deferred', due_today_date, due_this_week_date])
+      return 0 == current_user.todos.not_completed.count(:all,
+        :conditions =&gt; ['todos.due &gt; ? AND todos.due &lt;= ?', due_today_date, due_this_week_date])
     when &quot;due_next_week&quot;
-      return 0 == current_user.todos.count(:all, 
-        :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ? AND todos.due &lt;= ?', 'active', 'deferred', due_this_week_date, due_next_week_date])
+      return 0 == current_user.todos.not_completed.count(:all,
+        :conditions =&gt; ['todos.due &gt; ? AND todos.due &lt;= ?', due_this_week_date, due_next_week_date])
     when &quot;due_this_month&quot;
-      return 0 == current_user.todos.count(:all, 
-        :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ? AND todos.due &lt;= ?', 'active', 'deferred', due_next_week_date, due_this_month_date])
+      return 0 == current_user.todos.not_completed.count(:all,
+        :conditions =&gt; ['todos.due &gt; ? AND todos.due &lt;= ?', due_next_week_date, due_this_month_date])
     when &quot;due_after_this_month&quot;      
-      return 0 == current_user.todos.count(:all, 
-        :conditions =&gt; ['(todos.state = ? OR todos.state = ?) AND todos.due &gt; ?', 'active', 'deferred', due_this_month_date])
+      return 0 == current_user.todos.not_completed.count(:all,
+        :conditions =&gt; ['todos.due &gt; ?', due_this_month_date])
     else
       raise Exception.new, &quot;unknown due id for calendar: '#{id}'&quot;      
     end</diff>
      <filename>app/controllers/todos_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,10 @@ class Context &lt; ActiveRecord::Base
 
   has_many :todos, :dependent =&gt; :delete_all, :include =&gt; :project, :order =&gt; &quot;todos.completed_at DESC&quot;
   belongs_to :user
-  
+
+  named_scope :active, :conditions =&gt; { :hide =&gt; false }
+  named_scope :hidden, :conditions =&gt; { :hide =&gt; true }
+
   acts_as_list :scope =&gt; :user
   extend NamePartFinder
   include Tracks::TodoList</diff>
      <filename>app/models/context.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,10 @@ class Project &lt; ActiveRecord::Base
   has_many :notes, :dependent =&gt; :delete_all, :order =&gt; &quot;created_at DESC&quot;
   belongs_to :default_context, :class_name =&gt; &quot;Context&quot;, :foreign_key =&gt; &quot;default_context_id&quot;
   belongs_to :user
+
+  named_scope :active, :conditions =&gt; { :state =&gt; 'active' }
+  named_scope :hidden, :conditions =&gt; { :state =&gt; 'hidden' }
+  named_scope :completed, :conditions =&gt; { :state =&gt; 'completed'}
   
   validates_presence_of :name, :message =&gt; &quot;project must have a name&quot;
   validates_length_of :name, :maximum =&gt; 255, :message =&gt; &quot;project name must be less than 256 characters&quot;</diff>
      <filename>app/models/project.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,6 +7,7 @@ class Todo &lt; ActiveRecord::Base
 
   named_scope :active, :conditions =&gt; { :state =&gt; 'active' }
   named_scope :not_completed, :conditions =&gt;  ['NOT state = ? ', 'completed']
+  named_scope :are_due, :conditions =&gt; ['NOT todos.due IS NULL']
 
   STARRED_TAG_NAME = &quot;starred&quot;
   </diff>
      <filename>app/models/todo.rb</filename>
    </modified>
    <modified>
      <diff>@@ -20,7 +20,7 @@ CLASS:PUBLIC
 CATEGORIES:Tracks
 CREATED:&lt;%= todo.created_at.strftime(&quot;%Y%m%dT%H%M%SZ&quot;) %&gt;
 DESCRIPTION:&lt;%= format_ical_notes(todo.notes) %&gt;
-LAST-MODIFIED:&lt;%= due_date.strftime(&quot;%Y%m%dT%H%M%SZ&quot;) %&gt;
+LAST-MODIFIED:&lt;%= updated_at.strftime(&quot;%Y%m%dT%H%M%SZ&quot;) %&gt;
 LOCATION:
 SEQUENCE:0
 STATUS:CONFIRMED</diff>
      <filename>app/views/todos/calendar.ics.erb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4a78b9f97a02b0247de6c2c05e4b0ce06631f7fc</id>
    </parent>
  </parents>
  <author>
    <name>Reinier Balt</name>
    <email>lrbalt@gmail.com</email>
  </author>
  <url>http://github.com/bsag/tracks/commit/9147fb887cfd94d6ad50de2a4300458a215a9405</url>
  <id>9147fb887cfd94d6ad50de2a4300458a215a9405</id>
  <committed-date>2008-11-29T06:35:17-08:00</committed-date>
  <authored-date>2008-11-29T06:35:17-08:00</authored-date>
  <message>refactor conditional finds to use named_scopes

also use updated_at in calendar feed</message>
  <tree>35d598d853147ce14416eeb7944589c6cfa05c19</tree>
  <committer>
    <name>Reinier Balt</name>
    <email>lrbalt@gmail.com</email>
  </committer>
</commit>
