Context refactoring. Move Issues list, Search logic to context
This commit is contained in:
parent
63fe042d97
commit
679d0d6d76
|
@ -1,4 +1,4 @@
|
|||
class CommitLoad < BaseContext
|
||||
class CommitLoadContext < BaseContext
|
||||
def execute
|
||||
result = {
|
||||
commit: nil,
|
29
app/contexts/issues_list_context.rb
Normal file
29
app/contexts/issues_list_context.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
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
|
|
@ -1,4 +1,4 @@
|
|||
class MergeRequestsLoad < BaseContext
|
||||
class MergeRequestsLoadContext < BaseContext
|
||||
def execute
|
||||
type = params[:f]
|
||||
|
27
app/contexts/search_context.rb
Normal file
27
app/contexts/search_context.rb
Normal file
|
@ -0,0 +1,27 @@
|
|||
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
|
|||
before_filter :require_non_empty_project
|
||||
|
||||
def show
|
||||
result = CommitLoad.new(project, current_user, params).execute
|
||||
result = CommitLoadContext.new(project, current_user, params).execute
|
||||
|
||||
@commit = result[:commit]
|
||||
git_not_found! unless @commit
|
||||
|
|
|
@ -6,7 +6,7 @@ class DashboardController < ApplicationController
|
|||
@projects = current_user.projects_with_events
|
||||
@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
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -19,14 +19,14 @@ class DashboardController < ApplicationController
|
|||
# Get authored or assigned open merge requests
|
||||
def merge_requests
|
||||
@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
|
||||
|
||||
# Get only assigned issues
|
||||
def issues
|
||||
@projects = current_user.projects.all
|
||||
@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)
|
||||
|
||||
respond_to do |format|
|
||||
|
|
|
@ -6,10 +6,7 @@ class GroupsController < ApplicationController
|
|||
before_filter :projects
|
||||
|
||||
def show
|
||||
@events = Event.where(project_id: project_ids).
|
||||
order('id DESC').
|
||||
limit(20).offset(params[:offset] || 0)
|
||||
|
||||
@events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)
|
||||
@last_push = current_user.recent_push
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -22,14 +19,14 @@ class GroupsController < ApplicationController
|
|||
# Get authored or assigned open merge requests
|
||||
def 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
|
||||
|
||||
# Get only assigned issues
|
||||
def issues
|
||||
@user = current_user
|
||||
@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)
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -39,16 +36,11 @@ class GroupsController < ApplicationController
|
|||
end
|
||||
|
||||
def search
|
||||
query = params[:search]
|
||||
result = SearchContext.new(project_ids, params).execute
|
||||
|
||||
@merge_requests = []
|
||||
@issues = []
|
||||
|
||||
if query.present?
|
||||
@projects = @projects.search(query).limit(10)
|
||||
@merge_requests = MergeRequest.where(project_id: project_ids).search(query).limit(10)
|
||||
@issues = Issue.where(project_id: project_ids).search(query).limit(10)
|
||||
end
|
||||
@projects = result[:projects]
|
||||
@merge_requests = result[:merge_requests]
|
||||
@issues = result[:issues]
|
||||
end
|
||||
|
||||
def people
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
class IssuesController < ProjectResourceController
|
||||
before_filter :module_enabled
|
||||
before_filter :issue, only: [:edit, :update, :destroy, :show]
|
||||
helper_method :issues_filter
|
||||
|
||||
# Allow read any issue
|
||||
before_filter :authorize_read_issue!
|
||||
|
@ -19,7 +18,6 @@ class IssuesController < ProjectResourceController
|
|||
|
||||
def index
|
||||
@issues = issues_filtered
|
||||
|
||||
@issues = @issues.page(params[:page]).per(20)
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -134,35 +132,6 @@ class IssuesController < ProjectResourceController
|
|||
end
|
||||
|
||||
def issues_filtered
|
||||
@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
|
||||
|
||||
def issues_filter
|
||||
{
|
||||
all: "all",
|
||||
closed: "closed",
|
||||
to_me: "assigned-to-me",
|
||||
open: "open"
|
||||
}
|
||||
@issues = IssuesListContext.new(project, current_user, params).execute
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,7 +18,7 @@ class MergeRequestsController < ProjectResourceController
|
|||
|
||||
|
||||
def index
|
||||
@merge_requests = MergeRequestsLoad.new(project, current_user, params).execute
|
||||
@merge_requests = MergeRequestsLoadContext.new(project, current_user, params).execute
|
||||
end
|
||||
|
||||
def show
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
class SearchController < ApplicationController
|
||||
def show
|
||||
query = params[:search]
|
||||
result = SearchContext.new(current_user.project_ids, params).execute
|
||||
|
||||
@projects = []
|
||||
@merge_requests = []
|
||||
@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
|
||||
@projects = result[:projects]
|
||||
@merge_requests = result[:merge_requests]
|
||||
@issues = result[:issues]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -43,4 +43,13 @@ module IssuesHelper
|
|||
# Milestone uses :title, Issue uses :name
|
||||
OpenStruct.new(id: 0, title: 'Unspecified', name: 'Unassigned')
|
||||
end
|
||||
|
||||
def issues_filter
|
||||
{
|
||||
all: "all",
|
||||
closed: "closed",
|
||||
to_me: "assigned-to-me",
|
||||
open: "open"
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -30,6 +30,7 @@ class Event < ActiveRecord::Base
|
|||
# Scopes
|
||||
scope :recent, order("created_at DESC")
|
||||
scope :code_push, where(action: Pushed)
|
||||
scope :in_projects, ->(project_ids) { where(project_id: project_ids).recent }
|
||||
|
||||
class << self
|
||||
def determine_action(record)
|
||||
|
@ -39,10 +40,6 @@ class Event < ActiveRecord::Base
|
|||
Event::Commented
|
||||
end
|
||||
end
|
||||
|
||||
def recent_for_user user
|
||||
where(project_id: user.projects.map(&:id)).recent
|
||||
end
|
||||
end
|
||||
|
||||
# Next events currently enabled for system
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Contains common functionality
|
||||
# shared between Issues and MergeRequests
|
||||
# Contains common functionality shared between Issues and MergeRequests
|
||||
module IssueCommonality
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
|
@ -18,6 +17,7 @@ module IssueCommonality
|
|||
scope :closed, where(closed: true)
|
||||
scope :of_group, ->(group) { where(project_id: group.project_ids) }
|
||||
scope :assigned, ->(u) { where(assignee_id: u.id)}
|
||||
scope :recent, order("created_at DESC")
|
||||
|
||||
delegate :name,
|
||||
:email,
|
||||
|
|
Loading…
Reference in a new issue