Context refactoring. Move Issues list, Search logic to context
This commit is contained in:
parent
63fe042d97
commit
679d0d6d76
15 changed files with 100 additions and 83 deletions
|
@ -1,17 +1,17 @@
|
|||
class CommitLoad < BaseContext
|
||||
class CommitLoadContext < BaseContext
|
||||
def execute
|
||||
result = {
|
||||
result = {
|
||||
commit: nil,
|
||||
suppress_diff: false,
|
||||
line_notes: [],
|
||||
notes_count: 0,
|
||||
note: nil,
|
||||
note: nil,
|
||||
status: :ok
|
||||
}
|
||||
|
||||
commit = project.commit(params[:id])
|
||||
|
||||
if commit
|
||||
if commit
|
||||
commit = CommitDecorator.decorate(commit)
|
||||
line_notes = project.commit_line_notes(commit)
|
||||
|
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|
|
||||
|
@ -54,7 +52,7 @@ class IssuesController < ProjectResourceController
|
|||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
if @issue.valid?
|
||||
if @issue.valid?
|
||||
redirect_to project_issue_path(@project, @issue)
|
||||
else
|
||||
render :new
|
||||
|
@ -69,7 +67,7 @@ class IssuesController < ProjectResourceController
|
|||
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html do
|
||||
format.html do
|
||||
if @issue.valid?
|
||||
redirect_to [@project, @issue]
|
||||
else
|
||||
|
@ -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
|
||||
|
@ -55,7 +55,7 @@ class MergeRequestsController < ProjectResourceController
|
|||
@merge_request.reload_code
|
||||
redirect_to [@project, @merge_request], notice: 'Merge request was successfully created.'
|
||||
else
|
||||
render action: "new"
|
||||
render action: "new"
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -70,7 +70,7 @@ class MergeRequestsController < ProjectResourceController
|
|||
end
|
||||
|
||||
def automerge_check
|
||||
if @merge_request.unchecked?
|
||||
if @merge_request.unchecked?
|
||||
@merge_request.check_if_can_be_merged
|
||||
end
|
||||
render json: {state: @merge_request.human_state}
|
||||
|
@ -125,7 +125,7 @@ class MergeRequestsController < ProjectResourceController
|
|||
|
||||
def validates_merge_request
|
||||
# Show git not found page if target branch doesnt exist
|
||||
return git_not_found! unless @project.repo.heads.map(&:name).include?(@merge_request.target_branch)
|
||||
return git_not_found! unless @project.repo.heads.map(&:name).include?(@merge_request.target_branch)
|
||||
|
||||
# Show git not found page if source branch doesnt exist
|
||||
# and there is no saved commits between source & target branch
|
||||
|
@ -136,7 +136,7 @@ class MergeRequestsController < ProjectResourceController
|
|||
# Build a note object for comment form
|
||||
@note = @project.notes.new(noteable: @merge_request)
|
||||
|
||||
# Get commits from repository
|
||||
# Get commits from repository
|
||||
# or from cache if already merged
|
||||
@commits = @merge_request.commits
|
||||
@commits = CommitDecorator.decorate(@commits)
|
||||
|
|
|
@ -54,7 +54,7 @@ class MilestonesController < ProjectResourceController
|
|||
|
||||
respond_to do |format|
|
||||
format.js
|
||||
format.html do
|
||||
format.html do
|
||||
if @milestone.valid?
|
||||
redirect_to [@project, @milestone]
|
||||
else
|
||||
|
|
|
@ -9,9 +9,9 @@ class RefsController < ProjectResourceController
|
|||
before_filter :ref
|
||||
before_filter :define_tree_vars, only: [:blob, :logs_tree]
|
||||
|
||||
def switch
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
def switch
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
new_path = if params[:destination] == "tree"
|
||||
project_tree_path(@project, @ref)
|
||||
else
|
||||
|
|
|
@ -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