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:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-10 11:36:52 +0300
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-10 11:36:52 +0300
commitd0d94e4f104c276ee4095a76d1204daae384c708 (patch)
treeba9d19ebe45aa837d27bbf0d954d9e7d991dc3aa /app/serializers/environment_serializer.rb
parent482e7ff01201dba89a13f5e9979ea17c202c87c7 (diff)
Fix pagination headers in grouped environments API
Diffstat (limited to 'app/serializers/environment_serializer.rb')
-rw-r--r--app/serializers/environment_serializer.rb23
1 files changed, 14 insertions, 9 deletions
diff --git a/app/serializers/environment_serializer.rb b/app/serializers/environment_serializer.rb
index fe16a3784c4..d0a60f134da 100644
--- a/app/serializers/environment_serializer.rb
+++ b/app/serializers/environment_serializer.rb
@@ -20,8 +20,6 @@ class EnvironmentSerializer < BaseSerializer
end
def represent(resource, opts = {})
- resource = @paginator.paginate(resource) if paginated?
-
if itemized?
itemize(resource).map do |item|
{ name: item.name,
@@ -29,6 +27,8 @@ class EnvironmentSerializer < BaseSerializer
latest: super(item.latest, opts) }
end
else
+ resource = @paginator.paginate(resource) if paginated?
+
super(resource, opts)
end
end
@@ -36,15 +36,20 @@ class EnvironmentSerializer < BaseSerializer
private
def itemize(resource)
- items = resource.group(:item_name).order('item_name ASC')
- .pluck('COALESCE(environment_type, name) AS item_name',
- 'COUNT(*) AS environments_count',
- 'MAX(id) AS last_environment_id')
+ items = resource.order('folder_name ASC')
+ .group('COALESCE(environment_type, name)')
+ .select('COALESCE(environment_type, name) AS folder_name',
+ 'COUNT(*) AS size', 'MAX(id) AS last_id')
+
+ # It makes a difference when you call `paginate` method, because
+ # although `page` is effective at the end, it calls counting methods
+ # immediately.
+ items = @paginator.paginate(items) if paginated?
- environments = resource.where(id: items.map(&:last)).index_by(&:id)
+ environments = resource.where(id: items.map(&:last_id)).index_by(&:id)
- items.map do |name, size, id|
- Item.new(name, size, environments[id])
+ items.map do |item|
+ Item.new(item.folder_name, item.size, environments[item.last_id])
end
end
end