Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
45e4727f
Commit
45e4727f
authored
May 25, 2015
by
Douwe Maan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Set milestone on new issue when creating issue from index with milestone filter active.
parent
106cb511
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
100 additions
and
37 deletions
+100
-37
CHANGELOG
CHANGELOG
+1
-0
app/controllers/application_controller.rb
app/controllers/application_controller.rb
+4
-4
app/finders/README.md
app/finders/README.md
+1
-1
app/finders/issuable_finder.rb
app/finders/issuable_finder.rb
+83
-21
app/views/projects/issues/index.html.haml
app/views/projects/issues/index.html.haml
+1
-1
spec/finders/issues_finder_spec.rb
spec/finders/issues_finder_spec.rb
+8
-8
spec/finders/merge_requests_finder_spec.rb
spec/finders/merge_requests_finder_spec.rb
+2
-2
No files found.
CHANGELOG
View file @
45e4727f
...
@@ -6,6 +6,7 @@ v 7.12.0 (unreleased)
...
@@ -6,6 +6,7 @@ v 7.12.0 (unreleased)
- Fix Zen Mode not closing with ESC key (Stan Hu)
- Fix Zen Mode not closing with ESC key (Stan Hu)
- Allow HipChat API version to be blank and default to v2 (Stan Hu)
- Allow HipChat API version to be blank and default to v2 (Stan Hu)
- Add file attachment support in Milestone description (Stan Hu)
- Add file attachment support in Milestone description (Stan Hu)
- Set milestone on new issue when creating issue from index with milestone filter active.
- Add web hook support for note events (Stan Hu)
- Add web hook support for note events (Stan Hu)
- Disable "New Issue" and "New Merge Request" buttons when features are disabled in project settings (Stan Hu)
- Disable "New Issue" and "New Merge Request" buttons when features are disabled in project settings (Stan Hu)
- Remove Rack Attack monkey patches and bump to version 4.3.0 (Stan Hu)
- Remove Rack Attack monkey patches and bump to version 4.3.0 (Stan Hu)
...
...
app/controllers/application_controller.rb
View file @
45e4727f
...
@@ -289,14 +289,14 @@ class ApplicationController < ActionController::Base
...
@@ -289,14 +289,14 @@ class ApplicationController < ActionController::Base
def
get_issues_collection
def
get_issues_collection
set_filters_params
set_filters_params
issues
=
IssuesFinder
.
new
.
execute
(
current_user
,
@filter_params
)
@issuable_finder
=
IssuesFinder
.
new
(
current_user
,
@filter_params
)
issues
@issuable_finder
.
execute
end
end
def
get_merge_requests_collection
def
get_merge_requests_collection
set_filters_params
set_filters_params
merge_requests
=
MergeRequestsFinder
.
new
.
execute
(
current_user
,
@filter_params
)
@issuable_finder
=
MergeRequestsFinder
.
new
(
current_user
,
@filter_params
)
merge_requests
@issuable_finder
.
execute
end
end
def
github_import_enabled?
def
github_import_enabled?
...
...
app/finders/README.md
View file @
45e4727f
...
@@ -16,7 +16,7 @@ issues = project.issues_for_user_filtered_by(user, params)
...
@@ -16,7 +16,7 @@ issues = project.issues_for_user_filtered_by(user, params)
Better use this:
Better use this:
```
ruby
```
ruby
issues
=
IssuesFinder
.
new
.
execute
(
project
,
user
,
filter
)
issues
=
IssuesFinder
.
new
(
project
,
user
,
filter
).
execute
```
```
It will help keep models thiner.
It will help keep models thiner.
app/finders/issuable_finder.rb
View file @
45e4727f
...
@@ -23,10 +23,12 @@ class IssuableFinder
...
@@ -23,10 +23,12 @@ class IssuableFinder
attr_accessor
:current_user
,
:params
attr_accessor
:current_user
,
:params
def
execut
e
(
current_user
,
params
)
def
initializ
e
(
current_user
,
params
)
@current_user
=
current_user
@current_user
=
current_user
@params
=
params
@params
=
params
end
def
execute
items
=
init_collection
items
=
init_collection
items
=
by_scope
(
items
)
items
=
by_scope
(
items
)
items
=
by_state
(
items
)
items
=
by_state
(
items
)
...
@@ -40,6 +42,77 @@ class IssuableFinder
...
@@ -40,6 +42,77 @@ class IssuableFinder
items
=
sort
(
items
)
items
=
sort
(
items
)
end
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
private
def
init_collection
def
init_collection
...
@@ -89,25 +162,19 @@ class IssuableFinder
...
@@ -89,25 +162,19 @@ class IssuableFinder
end
end
def
by_group
(
items
)
def
by_group
(
items
)
if
params
[
:group_id
].
present?
items
=
items
.
of_group
(
group
)
if
group
items
=
items
.
of_group
(
Group
.
find
(
params
[
:group_id
]))
end
items
items
end
end
def
by_project
(
items
)
def
by_project
(
items
)
if
params
[
:project_id
].
present?
items
=
items
.
of_projects
(
project
.
id
)
if
project
items
=
items
.
of_projects
(
params
[
:project_id
])
end
items
items
end
end
def
by_search
(
items
)
def
by_search
(
items
)
if
params
[
:search
].
present?
items
=
items
.
search
(
search
)
if
search
items
=
items
.
search
(
params
[
:search
])
end
items
items
end
end
...
@@ -117,25 +184,24 @@ class IssuableFinder
...
@@ -117,25 +184,24 @@ class IssuableFinder
end
end
def
by_milestone
(
items
)
def
by_milestone
(
items
)
if
params
[
:milestone_title
].
present?
if
milestones?
milestone_ids
=
(
params
[
:milestone_title
]
==
NONE
?
nil
:
Milestone
.
where
(
title:
params
[
:milestone_title
]).
pluck
(
:id
))
items
=
items
.
where
(
milestone_id:
milestones
.
try
(
:pluck
,
:id
))
items
=
items
.
where
(
milestone_id:
milestone_ids
)
end
end
items
items
end
end
def
by_assignee
(
items
)
def
by_assignee
(
items
)
if
params
[
:assignee_id
].
present
?
if
assignee
?
items
=
items
.
where
(
assignee_id:
(
params
[
:assignee_id
]
==
NONE
?
nil
:
params
[
:assignee_id
]
))
items
=
items
.
where
(
assignee_id:
assignee
.
try
(
:id
))
end
end
items
items
end
end
def
by_author
(
items
)
def
by_author
(
items
)
if
params
[
:author_id
].
present
?
if
author
?
items
=
items
.
where
(
author_id:
(
params
[
:author_id
]
==
NONE
?
nil
:
params
[
:author_id
]
))
items
=
items
.
where
(
author_id:
author
.
try
(
:id
))
end
end
items
items
...
@@ -155,10 +221,6 @@ class IssuableFinder
...
@@ -155,10 +221,6 @@ class IssuableFinder
items
items
end
end
def
project
Project
.
where
(
id:
params
[
:project_id
]).
first
if
params
[
:project_id
].
present?
end
def
current_user_related?
def
current_user_related?
params
[
:scope
]
==
'created-by-me'
||
params
[
:scope
]
==
'authored'
||
params
[
:scope
]
==
'assigned-to-me'
params
[
:scope
]
==
'created-by-me'
||
params
[
:scope
]
==
'authored'
||
params
[
:scope
]
==
'assigned-to-me'
end
end
...
...
app/views/projects/issues/index.html.haml
View file @
45e4727f
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
=
render
'shared/issuable_search_form'
,
path:
namespace_project_issues_path
(
@project
.
namespace
,
@project
)
=
render
'shared/issuable_search_form'
,
path:
namespace_project_issues_path
(
@project
.
namespace
,
@project
)
-
if
can?
current_user
,
:write_issue
,
@project
-
if
can?
current_user
,
:write_issue
,
@project
=
link_to
new_namespace_project_issue_path
(
@project
.
namespace
,
@project
,
issue:
{
assignee_id:
params
[
:assignee_id
],
milestone_id:
params
[
:milestone_id
]
}),
class:
"btn btn-new pull-left"
,
title:
"New Issue"
,
id:
"new_issue_link"
do
=
link_to
new_namespace_project_issue_path
(
@project
.
namespace
,
@project
,
issue:
{
assignee_id:
@issuable_finder
.
assignee
.
try
(
:id
),
milestone_id:
@issuable_finder
.
milestones
.
try
(
:first
).
try
(
:id
)
}),
class:
"btn btn-new pull-left"
,
title:
"New Issue"
,
id:
"new_issue_link"
do
%i
.fa.fa-plus
%i
.fa.fa-plus
New Issue
New Issue
...
...
spec/finders/issues_finder_spec.rb
View file @
45e4727f
...
@@ -26,37 +26,37 @@ describe IssuesFinder do
...
@@ -26,37 +26,37 @@ describe IssuesFinder do
context
'scope: all'
do
context
'scope: all'
do
it
'should filter by all'
do
it
'should filter by all'
do
params
=
{
scope:
"all"
,
state:
'opened'
}
params
=
{
scope:
"all"
,
state:
'opened'
}
issues
=
IssuesFinder
.
new
.
execute
(
user
,
params
)
issues
=
IssuesFinder
.
new
(
user
,
params
).
execute
expect
(
issues
.
size
).
to
eq
(
3
)
expect
(
issues
.
size
).
to
eq
(
3
)
end
end
it
'should filter by assignee id'
do
it
'should filter by assignee id'
do
params
=
{
scope:
"all"
,
assignee_id:
user
.
id
,
state:
'opened'
}
params
=
{
scope:
"all"
,
assignee_id:
user
.
id
,
state:
'opened'
}
issues
=
IssuesFinder
.
new
.
execute
(
user
,
params
)
issues
=
IssuesFinder
.
new
(
user
,
params
).
execute
expect
(
issues
.
size
).
to
eq
(
2
)
expect
(
issues
.
size
).
to
eq
(
2
)
end
end
it
'should filter by author id'
do
it
'should filter by author id'
do
params
=
{
scope:
"all"
,
author_id:
user2
.
id
,
state:
'opened'
}
params
=
{
scope:
"all"
,
author_id:
user2
.
id
,
state:
'opened'
}
issues
=
IssuesFinder
.
new
.
execute
(
user
,
params
)
issues
=
IssuesFinder
.
new
(
user
,
params
).
execute
expect
(
issues
).
to
eq
([
issue3
])
expect
(
issues
).
to
eq
([
issue3
])
end
end
it
'should filter by milestone id'
do
it
'should filter by milestone id'
do
params
=
{
scope:
"all"
,
milestone_title:
milestone
.
title
,
state:
'opened'
}
params
=
{
scope:
"all"
,
milestone_title:
milestone
.
title
,
state:
'opened'
}
issues
=
IssuesFinder
.
new
.
execute
(
user
,
params
)
issues
=
IssuesFinder
.
new
(
user
,
params
).
execute
expect
(
issues
).
to
eq
([
issue1
])
expect
(
issues
).
to
eq
([
issue1
])
end
end
it
'should be empty for unauthorized user'
do
it
'should be empty for unauthorized user'
do
params
=
{
scope:
"all"
,
state:
'opened'
}
params
=
{
scope:
"all"
,
state:
'opened'
}
issues
=
IssuesFinder
.
new
.
execute
(
nil
,
params
)
issues
=
IssuesFinder
.
new
(
nil
,
params
).
execute
expect
(
issues
.
size
).
to
be_zero
expect
(
issues
.
size
).
to
be_zero
end
end
it
'should not include unauthorized issues'
do
it
'should not include unauthorized issues'
do
params
=
{
scope:
"all"
,
state:
'opened'
}
params
=
{
scope:
"all"
,
state:
'opened'
}
issues
=
IssuesFinder
.
new
.
execute
(
user2
,
params
)
issues
=
IssuesFinder
.
new
(
user2
,
params
).
execute
expect
(
issues
.
size
).
to
eq
(
2
)
expect
(
issues
.
size
).
to
eq
(
2
)
expect
(
issues
).
not_to
include
(
issue1
)
expect
(
issues
).
not_to
include
(
issue1
)
expect
(
issues
).
to
include
(
issue2
)
expect
(
issues
).
to
include
(
issue2
)
...
@@ -67,13 +67,13 @@ describe IssuesFinder do
...
@@ -67,13 +67,13 @@ describe IssuesFinder do
context
'personal scope'
do
context
'personal scope'
do
it
'should filter by assignee'
do
it
'should filter by assignee'
do
params
=
{
scope:
"assigned-to-me"
,
state:
'opened'
}
params
=
{
scope:
"assigned-to-me"
,
state:
'opened'
}
issues
=
IssuesFinder
.
new
.
execute
(
user
,
params
)
issues
=
IssuesFinder
.
new
(
user
,
params
).
execute
expect
(
issues
.
size
).
to
eq
(
2
)
expect
(
issues
.
size
).
to
eq
(
2
)
end
end
it
'should filter by project'
do
it
'should filter by project'
do
params
=
{
scope:
"assigned-to-me"
,
state:
'opened'
,
project_id:
project1
.
id
}
params
=
{
scope:
"assigned-to-me"
,
state:
'opened'
,
project_id:
project1
.
id
}
issues
=
IssuesFinder
.
new
.
execute
(
user
,
params
)
issues
=
IssuesFinder
.
new
(
user
,
params
).
execute
expect
(
issues
.
size
).
to
eq
(
1
)
expect
(
issues
.
size
).
to
eq
(
1
)
end
end
end
end
...
...
spec/finders/merge_requests_finder_spec.rb
View file @
45e4727f
...
@@ -20,13 +20,13 @@ describe MergeRequestsFinder do
...
@@ -20,13 +20,13 @@ describe MergeRequestsFinder do
describe
"#execute"
do
describe
"#execute"
do
it
'should filter by scope'
do
it
'should filter by scope'
do
params
=
{
scope:
'authored'
,
state:
'opened'
}
params
=
{
scope:
'authored'
,
state:
'opened'
}
merge_requests
=
MergeRequestsFinder
.
new
.
execute
(
user
,
params
)
merge_requests
=
MergeRequestsFinder
.
new
(
user
,
params
).
execute
expect
(
merge_requests
.
size
).
to
eq
(
2
)
expect
(
merge_requests
.
size
).
to
eq
(
2
)
end
end
it
'should filter by project'
do
it
'should filter by project'
do
params
=
{
project_id:
project1
.
id
,
scope:
'authored'
,
state:
'opened'
}
params
=
{
project_id:
project1
.
id
,
scope:
'authored'
,
state:
'opened'
}
merge_requests
=
MergeRequestsFinder
.
new
.
execute
(
user
,
params
)
merge_requests
=
MergeRequestsFinder
.
new
(
user
,
params
).
execute
expect
(
merge_requests
.
size
).
to
eq
(
1
)
expect
(
merge_requests
.
size
).
to
eq
(
1
)
end
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment