app/models/todos/undone_todos_query.rb
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