Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
4e6f0d79e6be
Commit
9781ac55
authored
Sep 15, 2017
by
Bob Van Landuyt
Browse files
Include pagination when rendering expanded hierarchies
parent
3907962e5b25
Changes
3
Hide whitespace changes
Inline
Side-by-side
app/serializers/concerns/with_pagination.rb
View file @
4e6f0d79
module
WithPagination
attr_accessor
:paginator
def
with_pagination
(
request
,
response
)
tap
{
@
paginator
=
Gitlab
::
Serializer
::
Pagination
.
new
(
request
,
response
)
}
tap
{
self
.
paginator
=
Gitlab
::
Serializer
::
Pagination
.
new
(
request
,
response
)
}
end
def
paginated?
@
paginator
.
present?
paginator
.
present?
end
# super is `BaseSerializer#represent` here.
...
...
app/serializers/group_child_serializer.rb
View file @
4e6f0d79
class
GroupChildSerializer
<
BaseSerializer
include
WithPagination
attr_reader
:hierarchy_root
attr_reader
:hierarchy_root
,
:should_expand_hierarchy
entity
GroupChildEntity
def
expand_hierarchy
(
hierarchy_root
=
nil
)
@hierarchy_root
=
hierarchy_root
@expand_hierarchy
=
true
self
tap
do
@hierarchy_root
=
hierarchy_root
@should_expand_hierarchy
=
true
end
end
def
represent
(
resource
,
opts
=
{},
entity_class
=
nil
)
if
@expand_hierarchy
if
should_expand_hierarchy
paginator
.
paginate
(
resource
)
if
paginated?
represent_hierarchies
(
resource
,
opts
)
else
super
(
resource
,
opts
)
...
...
@@ -33,15 +35,15 @@ def represent_hierarchies(children, opts)
def
represent_hierarchy
(
hierarchy
,
opts
)
serializer
=
self
.
class
.
new
(
parameters
)
result
=
if
hierarchy
.
is_a?
(
Hash
)
hierarchy
.
map
do
|
parent
,
children
|
serializer
.
represent
(
parent
,
opts
)
.
merge
(
children:
Array
.
wrap
(
serializer
.
represent_hierarchy
(
children
,
opts
)))
end
else
serializer
.
represent
(
hierarchy
,
opts
)
end
result
if
hierarchy
.
is_a?
(
Hash
)
hierarchy
.
map
do
|
parent
,
children
|
serializer
.
represent
(
parent
,
opts
)
.
merge
(
children:
Array
.
wrap
(
serializer
.
represent_hierarchy
(
children
,
opts
)))
end
elsif
hierarchy
.
is_a?
(
Array
)
hierarchy
.
map
{
|
child
|
serializer
.
represent
_
hierarchy
(
child
,
opts
)
}
else
serializer
.
represent
(
hierarchy
,
opts
)
end
end
end
spec/controllers/groups_controller_spec.rb
View file @
4e6f0d79
...
...
@@ -152,6 +152,10 @@
describe
'GET #show'
do
context
'pagination'
do
before
do
allow
(
Kaminari
.
config
).
to
receive
(
:default_per_page
).
and_return
(
2
)
end
context
'with only projects'
do
let!
(
:other_project
)
{
create
(
:project
,
:public
,
namespace:
group
)
}
let!
(
:first_page_projects
)
{
create_list
(
:project
,
Kaminari
.
config
.
default_per_page
,
:public
,
namespace:
group
)
}
...
...
@@ -288,6 +292,14 @@
expect
(
group_json
[
'id'
]).
to
eq
(
public_subgroup
.
id
)
expect
(
matched_group_json
[
'id'
]).
to
eq
(
matched_group
.
id
)
end
it
'includes pagination headers'
do
2
.
times
{
|
i
|
create
(
:group
,
:public
,
parent:
public_subgroup
,
name:
"filterme
#{
i
}
"
)
}
get
:children
,
id:
group
.
to_param
,
filter:
'filter'
,
per_page:
1
,
format: :json
expect
(
response
).
to
include_pagination_headers
end
end
context
'queries per rendered element'
,
:request_store
do
...
...
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