Skip to content
Snippets Groups Projects
Commit 679d0d6d authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Context refactoring. Move Issues list, Search logic to context

parent 63fe042d
No related branches found
No related tags found
No related merge requests found
Showing
with 100 additions and 83 deletions
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)
 
Loading
Loading
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
type = params[:f]
 
Loading
Loading
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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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|
Loading
Loading
@@ -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|
Loading
Loading
Loading
Loading
@@ -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|
Loading
Loading
@@ -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|
Loading
Loading
@@ -39,16 +36,11 @@ class GroupsController < ApplicationController
end
 
def search
query = params[:search]
@merge_requests = []
@issues = []
result = SearchContext.new(project_ids, params).execute
 
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
Loading
Loading
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!
Loading
Loading
@@ -19,7 +18,6 @@ class IssuesController < ProjectResourceController
 
def index
@issues = issues_filtered
@issues = @issues.page(params[:page]).per(20)
 
respond_to do |format|
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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}
Loading
Loading
@@ -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
Loading
Loading
@@ -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)
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
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
Loading
Loading
@@ -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
Loading
Loading
@@ -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)
Loading
Loading
@@ -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
Loading
Loading
# Contains common functionality
# shared between Issues and MergeRequests
# Contains common functionality shared between Issues and MergeRequests
module IssueCommonality
extend ActiveSupport::Concern
 
Loading
Loading
@@ -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
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment