From adb570fe538038d7631c55a868cbf250abe27b2d Mon Sep 17 00:00:00 2001 From: "Jason W. May" Date: Mon, 24 Nov 2014 12:12:48 -0800 Subject: [PATCH] use limit & offset for pagination of group members --- app/controllers/groups_controller.rb | 7 +++++-- spec/controllers/groups_controller_spec.rb | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index dd1feec96be..a687cded1ff 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -18,8 +18,11 @@ class GroupsController < ApplicationController def members group = find_group(:group_id) - members = group.users.order('username_lower asc') - members = members.limit(200) if group.automatic + + limit = (params[:limit] || 200).to_i + offset = (params[:offset] || 0).to_i + members = group.users.order('username_lower asc').limit(limit).offset(offset) + render_serialized(members.to_a, GroupUserSerializer) end diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb index bbaa136d201..04881cbc86b 100644 --- a/spec/controllers/groups_controller_spec.rb +++ b/spec/controllers/groups_controller_spec.rb @@ -67,5 +67,19 @@ describe GroupsController do xhr :get, :posts, group_id: group.name response.should be_success end + + it "ensures that membership can be paginated" do + 5.times { group.add(Fabricate(:user)) } + xhr :get, :members, group_id: group.name, limit: 3 + response.should be_success + members = JSON.parse(response.body) + members.count.should eq(3) + + xhr :get, :members, group_id: group.name, limit: 250, offset: 250 + xhr :get, :members, group_id: group.name, limit: 3, offset: 3 + response.should be_success + members = JSON.parse(response.body) + members.count.should eq(2) + end end end