Add a Sidebar class to represent the side bar

Start using it throughout the rest of the app instead of the various
instance variables
This commit is contained in:
Matt Rogers 2014-09-14 21:47:14 -05:00
parent 2883d1b7f4
commit 8d24f5105a
5 changed files with 66 additions and 17 deletions

View file

@ -212,12 +212,7 @@ class ApplicationController < ActionController::Base
end
def init_data_for_sidebar
@completed_projects = current_user.projects.completed
@hidden_projects = current_user.projects.hidden
@active_projects = current_user.projects.active
@active_contexts = current_user.contexts.active
@hidden_contexts = current_user.contexts.hidden
@sidebar = Sidebar.new(current_user)
init_not_done_counts
if prefs.show_hidden_projects_in_sidebar

View file

@ -562,11 +562,7 @@ class TodosController < ApplicationController
format.html do
init_not_done_counts
init_project_hidden_todo_counts
@active_projects = current_user.projects.active
@active_contexts = current_user.contexts.active
@hidden_projects = current_user.projects.hidden
@hidden_contexts = current_user.contexts.hidden
@completed_projects = current_user.projects.completed
init_data_for_sidebar unless mobile?
end
format.m
format.xml { render :xml => @not_done_todos.to_xml( *todo_xml_params ) }

29
app/models/sidebar.rb Normal file
View file

@ -0,0 +1,29 @@
class Sidebar
attr_reader :contexts, :projects
def initialize(user)
user = user
@contexts = user.contexts
@projects = user.projects
end
def active_contexts
@active_contexts ||= contexts.active
end
def hidden_contexts
@hidden_contexts ||= contexts.hidden
end
def active_projects
@active_projects ||= projects.active
end
def hidden_projects
@hidden_projects ||= projects.hidden
end
def completed_projects
@completed_projects ||= projects.completed
end
end

View file

@ -1,7 +1,7 @@
<div id="sidebar">
<%= sidebar_html_for_titled_list(@active_projects, t('sidebar.list_name_active_projects'))%>
<%= sidebar_html_for_titled_list(@active_contexts, t('sidebar.list_name_active_contexts'))%>
<%= sidebar_html_for_titled_list(@hidden_projects, t('sidebar.list_name_hidden_projects')) if prefs.show_hidden_projects_in_sidebar %>
<%= sidebar_html_for_titled_list(@completed_projects, t('sidebar.list_name_completed_projects')) if prefs.show_completed_projects_in_sidebar %>
<%= sidebar_html_for_titled_list(@hidden_contexts, t('sidebar.list_name_hidden_contexts')) if prefs.show_hidden_contexts_in_sidebar %>
</div>
<%= sidebar_html_for_titled_list(@sidebar.active_projects, t('sidebar.list_name_active_projects'))%>
<%= sidebar_html_for_titled_list(@sidebar.active_contexts, t('sidebar.list_name_active_contexts'))%>
<%= sidebar_html_for_titled_list(@sidebar.hidden_projects, t('sidebar.list_name_hidden_projects')) if prefs.show_hidden_projects_in_sidebar %>
<%= sidebar_html_for_titled_list(@sidebar.completed_projects, t('sidebar.list_name_completed_projects')) if prefs.show_completed_projects_in_sidebar %>
<%= sidebar_html_for_titled_list(@sidebar.hidden_contexts, t('sidebar.list_name_hidden_contexts')) if prefs.show_hidden_contexts_in_sidebar %>
</div>

View file

@ -0,0 +1,29 @@
require 'test_helper'
class SidebarTest < ActiveSupport::TestCase
def setup
@sidebar = Sidebar.new(users(:admin_user))
end
def test_it_gets_the_active_contexts
assert @sidebar.active_contexts == users(:admin_user).contexts.active
end
def test_it_gets_the_hidden_contexts
assert @sidebar.hidden_contexts == users(:admin_user).contexts.hidden
end
def test_it_gets_the_active_projects
assert @sidebar.active_projects == users(:admin_user).projects.active
end
def test_it_gets_the_hidden_projects
assert @sidebar.hidden_projects == users(:admin_user).projects.hidden
end
def test_it_gets_the_completed_projects
assert @sidebar.completed_projects == users(:admin_user).projects.completed
end
end