module Todos class UndoneTodosQuery include ActionView::Helpers::SanitizeHelper attr_reader :current_user def initialize(current_user) @current_user = current_user end def query(params) if params[:done] not_done_todos = current_user.todos.completed.completed_after(Time.zone.now - params[:done].to_i.days) else not_done_todos = current_user.todos.active.not_hidden end not_done_todos = not_done_todos .reorder(Arel.sql("todos.due IS NULL, todos.due ASC, todos.created_at ASC")) .includes(Todo::DEFAULT_INCLUDES) not_done_todos = not_done_todos.limit(sanitize(params[:limit])) if params[:limit] if params[:due] due_within_when = Time.zone.now + params[:due].to_i.days not_done_todos = not_done_todos.where('todos.due <= ?', due_within_when) end if params[:tag] tag = Tag.where(:name => params[:tag]).first return [] if !tag not_done_todos = not_done_todos.joins(:taggings).where('taggings.tag_id = ?', tag.id) end if params[:context_id] context = current_user.contexts.find(params[:context_id]) not_done_todos = not_done_todos.where('context_id' => context.id) end if params[:project_id] project = current_user.projects.find(params[:project_id]) not_done_todos = not_done_todos.where('project_id' => project) end return not_done_todos end end end