Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-05-25 14:36:28 +0300
committerDouwe Maan <douwe@gitlab.com>2015-05-27 15:22:11 +0300
commit45e4727f97034f719b4fb2a061fd626f545db968 (patch)
tree74258b2172cf532b0505a666d29eba4ab7c4b2c3 /app/finders
parent106cb511de8259bb57da65294b6e4fbba9146b80 (diff)
Set milestone on new issue when creating issue from index with milestone filter active.
Diffstat (limited to 'app/finders')
-rw-r--r--app/finders/README.md2
-rw-r--r--app/finders/issuable_finder.rb104
2 files changed, 84 insertions, 22 deletions
diff --git a/app/finders/README.md b/app/finders/README.md
index 1f46518d230..1a1c69dea38 100644
--- a/app/finders/README.md
+++ b/app/finders/README.md
@@ -16,7 +16,7 @@ issues = project.issues_for_user_filtered_by(user, params)
Better use this:
```ruby
-issues = IssuesFinder.new.execute(project, user, filter)
+issues = IssuesFinder.new(project, user, filter).execute
```
It will help keep models thiner.
diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb
index e658e141159..0bed2115dc7 100644
--- a/app/finders/issuable_finder.rb
+++ b/app/finders/issuable_finder.rb
@@ -23,10 +23,12 @@ class IssuableFinder
attr_accessor :current_user, :params
- def execute(current_user, params)
+ def initialize(current_user, params)
@current_user = current_user
@params = params
+ end
+ def execute
items = init_collection
items = by_scope(items)
items = by_state(items)
@@ -40,6 +42,77 @@ class IssuableFinder
items = sort(items)
end
+ def group
+ return @group if defined?(@group)
+
+ @group =
+ if params[:group_id].present?
+ Group.find(params[:group_id])
+ else
+ nil
+ end
+ end
+
+ def project
+ return @project if defined?(@project)
+
+ @project =
+ if params[:project_id].present?
+ Project.find(params[:project_id])
+ else
+ nil
+ end
+ end
+
+ def search
+ params[:search].presence
+ end
+
+ def milestones?
+ params[:milestone_title].present?
+ end
+
+ def milestones
+ return @milestones if defined?(@milestones)
+
+ @milestones =
+ if milestones? && params[:milestone_title] != NONE
+ Milestone.where(title: params[:milestone_title])
+ else
+ nil
+ end
+ end
+
+ def assignee?
+ params[:assignee_id].present?
+ end
+
+ def assignee
+ return @assignee if defined?(@assignee)
+
+ @assignee =
+ if assignee? && params[:assignee_id] != NONE
+ User.find(params[:assignee_id])
+ else
+ nil
+ end
+ end
+
+ def author?
+ params[:author_id].present?
+ end
+
+ def author
+ return @author if defined?(@author)
+
+ @author =
+ if author? && params[:author_id] != NONE
+ User.find(params[:author_id])
+ else
+ nil
+ end
+ end
+
private
def init_collection
@@ -89,25 +162,19 @@ class IssuableFinder
end
def by_group(items)
- if params[:group_id].present?
- items = items.of_group(Group.find(params[:group_id]))
- end
+ items = items.of_group(group) if group
items
end
def by_project(items)
- if params[:project_id].present?
- items = items.of_projects(params[:project_id])
- end
+ items = items.of_projects(project.id) if project
items
end
def by_search(items)
- if params[:search].present?
- items = items.search(params[:search])
- end
+ items = items.search(search) if search
items
end
@@ -117,25 +184,24 @@ class IssuableFinder
end
def by_milestone(items)
- if params[:milestone_title].present?
- milestone_ids = (params[:milestone_title] == NONE ? nil : Milestone.where(title: params[:milestone_title]).pluck(:id))
- items = items.where(milestone_id: milestone_ids)
+ if milestones?
+ items = items.where(milestone_id: milestones.try(:pluck, :id))
end
items
end
def by_assignee(items)
- if params[:assignee_id].present?
- items = items.where(assignee_id: (params[:assignee_id] == NONE ? nil : params[:assignee_id]))
+ if assignee?
+ items = items.where(assignee_id: assignee.try(:id))
end
items
end
def by_author(items)
- if params[:author_id].present?
- items = items.where(author_id: (params[:author_id] == NONE ? nil : params[:author_id]))
+ if author?
+ items = items.where(author_id: author.try(:id))
end
items
@@ -155,10 +221,6 @@ class IssuableFinder
items
end
- def project
- Project.where(id: params[:project_id]).first if params[:project_id].present?
- end
-
def current_user_related?
params[:scope] == 'created-by-me' || params[:scope] == 'authored' || params[:scope] == 'assigned-to-me'
end