Commit 679d0d6d authored by randx's avatar randx

Context refactoring. Move Issues list, Search logic to context

parent 63fe042d
class CommitLoad < BaseContext class CommitLoadContext < BaseContext
def execute def execute
result = { result = {
commit: nil, commit: nil,
......
class IssuesListContext < BaseContext
include IssuesHelper
attr_accessor :issues
def execute
@issues = case params[:f]
when issues_filter[:all] then @project.issues
when issues_filter[:closed] then @project.issues.closed
when issues_filter[:to_me] then @project.issues.opened.assigned(current_user)
else @project.issues.opened
end
@issues = @issues.tagged_with(params[:label_name]) if params[:label_name].present?
@issues = @issues.includes(:author, :project).order("updated_at")
# Filter by specific assignee_id (or lack thereof)?
if params[:assignee_id].present?
@issues = @issues.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id]))
end
# Filter by specific milestone_id (or lack thereof)?
if params[:milestone_id].present?
@issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id]))
end
@issues
end
end
class MergeRequestsLoad < BaseContext class MergeRequestsLoadContext < BaseContext
def execute def execute
type = params[:f] type = params[:f]
......
class SearchContext
attr_accessor :project_ids, :params
def initialize(project_ids, params)
@project_ids, @params = project_ids, params.dup
end
def execute
query = params[:search]
return result unless query.present?
result[:projects] = Project.where(id: project_ids).search(query).limit(10)
result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10)
result
end
def result
@result ||= {
projects: [],
merge_requests: [],
issues: []
}
end
end
...@@ -8,7 +8,7 @@ class CommitController < ProjectResourceController ...@@ -8,7 +8,7 @@ class CommitController < ProjectResourceController
before_filter :require_non_empty_project before_filter :require_non_empty_project
def show def show
result = CommitLoad.new(project, current_user, params).execute result = CommitLoadContext.new(project, current_user, params).execute
@commit = result[:commit] @commit = result[:commit]
git_not_found! unless @commit git_not_found! unless @commit
......
...@@ -6,7 +6,7 @@ class DashboardController < ApplicationController ...@@ -6,7 +6,7 @@ class DashboardController < ApplicationController
@projects = current_user.projects_with_events @projects = current_user.projects_with_events
@projects = @projects.page(params[:page]).per(20) @projects = @projects.page(params[:page]).per(20)
@events = Event.recent_for_user(current_user).limit(20).offset(params[:offset] || 0) @events = Event.in_projects(current_user.project_ids).limit(20).offset(params[:offset] || 0)
@last_push = current_user.recent_push @last_push = current_user.recent_push
respond_to do |format| respond_to do |format|
...@@ -19,14 +19,14 @@ class DashboardController < ApplicationController ...@@ -19,14 +19,14 @@ class DashboardController < ApplicationController
# Get authored or assigned open merge requests # Get authored or assigned open merge requests
def merge_requests def merge_requests
@projects = current_user.projects.all @projects = current_user.projects.all
@merge_requests = current_user.cared_merge_requests.order("created_at DESC").page(params[:page]).per(20) @merge_requests = current_user.cared_merge_requests.recent.page(params[:page]).per(20)
end end
# Get only assigned issues # Get only assigned issues
def issues def issues
@projects = current_user.projects.all @projects = current_user.projects.all
@user = current_user @user = current_user
@issues = current_user.assigned_issues.opened.order("created_at DESC").page(params[:page]).per(20) @issues = current_user.assigned_issues.opened.recent.page(params[:page]).per(20)
@issues = @issues.includes(:author, :project) @issues = @issues.includes(:author, :project)
respond_to do |format| respond_to do |format|
......
...@@ -6,10 +6,7 @@ class GroupsController < ApplicationController ...@@ -6,10 +6,7 @@ class GroupsController < ApplicationController
before_filter :projects before_filter :projects
def show def show
@events = Event.where(project_id: project_ids). @events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)
order('id DESC').
limit(20).offset(params[:offset] || 0)
@last_push = current_user.recent_push @last_push = current_user.recent_push
respond_to do |format| respond_to do |format|
...@@ -22,14 +19,14 @@ class GroupsController < ApplicationController ...@@ -22,14 +19,14 @@ class GroupsController < ApplicationController
# Get authored or assigned open merge requests # Get authored or assigned open merge requests
def merge_requests def merge_requests
@merge_requests = current_user.cared_merge_requests @merge_requests = current_user.cared_merge_requests
@merge_requests = @merge_requests.of_group(@group).order("created_at DESC").page(params[:page]).per(20) @merge_requests = @merge_requests.of_group(@group).recent.page(params[:page]).per(20)
end end
# Get only assigned issues # Get only assigned issues
def issues def issues
@user = current_user @user = current_user
@issues = current_user.assigned_issues.opened @issues = current_user.assigned_issues.opened
@issues = @issues.of_group(@group).order("created_at DESC").page(params[:page]).per(20) @issues = @issues.of_group(@group).recent.page(params[:page]).per(20)
@issues = @issues.includes(:author, :project) @issues = @issues.includes(:author, :project)
respond_to do |format| respond_to do |format|
...@@ -39,16 +36,11 @@ class GroupsController < ApplicationController ...@@ -39,16 +36,11 @@ class GroupsController < ApplicationController
end end
def search def search
query = params[:search] result = SearchContext.new(project_ids, params).execute
@merge_requests = []
@issues = []
if query.present? @projects = result[:projects]
@projects = @projects.search(query).limit(10) @merge_requests = result[:merge_requests]
@merge_requests = MergeRequest.where(project_id: project_ids).search(query).limit(10) @issues = result[:issues]
@issues = Issue.where(project_id: project_ids).search(query).limit(10)
end
end end
def people def people
......
class IssuesController < ProjectResourceController class IssuesController < ProjectResourceController
before_filter :module_enabled before_filter :module_enabled
before_filter :issue, only: [:edit, :update, :destroy, :show] before_filter :issue, only: [:edit, :update, :destroy, :show]
helper_method :issues_filter
# Allow read any issue # Allow read any issue
before_filter :authorize_read_issue! before_filter :authorize_read_issue!
...@@ -19,7 +18,6 @@ class IssuesController < ProjectResourceController ...@@ -19,7 +18,6 @@ class IssuesController < ProjectResourceController
def index def index
@issues = issues_filtered @issues = issues_filtered
@issues = @issues.page(params[:page]).per(20) @issues = @issues.page(params[:page]).per(20)
respond_to do |format| respond_to do |format|
...@@ -134,35 +132,6 @@ class IssuesController < ProjectResourceController ...@@ -134,35 +132,6 @@ class IssuesController < ProjectResourceController
end end
def issues_filtered def issues_filtered
@issues = case params[:f] @issues = IssuesListContext.new(project, current_user, params).execute
when issues_filter[:all] then @project.issues
when issues_filter[:closed] then @project.issues.closed
when issues_filter[:to_me] then @project.issues.opened.assigned(current_user)
else @project.issues.opened
end
@issues = @issues.tagged_with(params[:label_name]) if params[:label_name].present?
@issues = @issues.includes(:author, :project).order("updated_at")
# Filter by specific assignee_id (or lack thereof)?
if params[:assignee_id].present?
@issues = @issues.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id]))
end
# Filter by specific milestone_id (or lack thereof)?
if params[:milestone_id].present?
@issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id]))
end
@issues
end
def issues_filter
{
all: "all",
closed: "closed",
to_me: "assigned-to-me",
open: "open"
}
end end
end end
...@@ -18,7 +18,7 @@ class MergeRequestsController < ProjectResourceController ...@@ -18,7 +18,7 @@ class MergeRequestsController < ProjectResourceController
def index def index
@merge_requests = MergeRequestsLoad.new(project, current_user, params).execute @merge_requests = MergeRequestsLoadContext.new(project, current_user, params).execute
end end
def show def show
......
class SearchController < ApplicationController class SearchController < ApplicationController
def show def show
query = params[:search] result = SearchContext.new(current_user.project_ids, params).execute
@projects = [] @projects = result[:projects]
@merge_requests = [] @merge_requests = result[:merge_requests]
@issues = [] @issues = result[:issues]
if query.present?
@projects = current_user.projects.search(query).limit(10)
@merge_requests = MergeRequest.where(project_id: current_user.project_ids).search(query).limit(10)
@issues = Issue.where(project_id: current_user.project_ids).search(query).limit(10)
end
end end
end end
...@@ -43,4 +43,13 @@ module IssuesHelper ...@@ -43,4 +43,13 @@ module IssuesHelper
# Milestone uses :title, Issue uses :name # Milestone uses :title, Issue uses :name
OpenStruct.new(id: 0, title: 'Unspecified', name: 'Unassigned') OpenStruct.new(id: 0, title: 'Unspecified', name: 'Unassigned')
end end
def issues_filter
{
all: "all",
closed: "closed",
to_me: "assigned-to-me",
open: "open"
}
end
end end
...@@ -30,6 +30,7 @@ class Event < ActiveRecord::Base ...@@ -30,6 +30,7 @@ class Event < ActiveRecord::Base
# Scopes # Scopes
scope :recent, order("created_at DESC") scope :recent, order("created_at DESC")
scope :code_push, where(action: Pushed) scope :code_push, where(action: Pushed)
scope :in_projects, ->(project_ids) { where(project_id: project_ids).recent }
class << self class << self
def determine_action(record) def determine_action(record)
...@@ -39,10 +40,6 @@ class Event < ActiveRecord::Base ...@@ -39,10 +40,6 @@ class Event < ActiveRecord::Base
Event::Commented Event::Commented
end end
end end
def recent_for_user user
where(project_id: user.projects.map(&:id)).recent
end
end end
# Next events currently enabled for system # Next events currently enabled for system
......
# Contains common functionality # Contains common functionality shared between Issues and MergeRequests
# shared between Issues and MergeRequests
module IssueCommonality module IssueCommonality
extend ActiveSupport::Concern extend ActiveSupport::Concern
...@@ -18,6 +17,7 @@ module IssueCommonality ...@@ -18,6 +17,7 @@ module IssueCommonality
scope :closed, where(closed: true) scope :closed, where(closed: true)
scope :of_group, ->(group) { where(project_id: group.project_ids) } scope :of_group, ->(group) { where(project_id: group.project_ids) }
scope :assigned, ->(u) { where(assignee_id: u.id)} scope :assigned, ->(u) { where(assignee_id: u.id)}
scope :recent, order("created_at DESC")
delegate :name, delegate :name,
:email, :email,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment