Commit 732a468
Changed files (5)
app
controllers
concerns
scim
models
views
scim
v2
users
spec
requests
scim
app/controllers/concerns/pageable.rb
@@ -4,8 +4,15 @@ module Pageable
extend ActiveSupport::Concern
included do
- def paginate(query)
- Paginate.new(query, params)
+ def paginate(query, page: 0, page_size: 25)
+ Paginate.new(query, page: page, page_size: page_size)
+ end
+
+ def page_param(key, default:, bottom: 0, top: 250)
+ actual = params.fetch(key, default).to_i
+ return bottom if actual < bottom
+ return top if actual > top
+ actual
end
end
end
app/controllers/scim/v2/users_controller.rb
@@ -10,7 +10,7 @@ module Scim
end
def index
- @users = paginate(User.all)
+ @users = paginate(User.order(:created_at), page: page - 1, page_size: page_size)
render formats: :scim, status: :ok
end
@@ -47,6 +47,14 @@ module Scim
def repository(container = Spank::IOC)
container.resolve(:user_repository)
end
+
+ def page
+ page_param(:startIndex, default: 0, bottom: 1, top: 100)
+ end
+
+ def page_size
+ page_param(:count, default: 25, bottom: 0, top: 25)
+ end
end
end
end
app/models/paginate.rb
@@ -1,7 +1,10 @@
class Paginate < SimpleDelegator
- def initialize(query, params)
+ attr_reader :page, :page_size
+
+ def initialize(query, page:, page_size:)
@query = query
- @params = params
+ @page = page
+ @page_size = page_size
super(records)
end
@@ -9,24 +12,7 @@ class Paginate < SimpleDelegator
@total_count ||= @query.count
end
- def page
- @page ||= page_param(:startIndex, default: 1, bottom: 1, top: 100)
- end
-
- def page_size
- @page_size ||= page_param(:count, default: 25, bottom: 0, top: 25)
- end
-
def records
- @records ||= @query.offset(page - 1).limit(page_size)
- end
-
- private
-
- def page_param(key, default:, bottom: 0, top: 250)
- actual = @params.fetch(key, default).to_i
- return bottom if actual < bottom
- return top if actual > top
- actual
+ @records ||= @query.offset(page).limit(page_size)
end
end
app/views/scim/v2/users/index.scim.jbuilder
@@ -2,7 +2,7 @@
json.schemas [Scim::Kit::V2::Messages::LIST_RESPONSE]
json.totalResults @users.total_count
-json.startIndex @users.page
+json.startIndex @users.page + 1
json.itemsPerPage @users.page_size
json.Resources do
json.array! @users do |user|
spec/requests/scim/v2/users_spec.rb
@@ -146,7 +146,7 @@ describe '/scim/v2/users' do
specify { expect(json[:totalResults]).to be(users.count + 1) }
specify { expect(json[:startIndex]).to eql(1) }
specify { expect(json[:itemsPerPage]).to eql(1) }
- specify { expect(json[:Resources][0][:id]).to eql(User.offset(0).limit(1).pluck(:id).first) }
+ specify { expect(json[:Resources][0][:id]).to eql(User.order(:created_at).offset(0).limit(1).pluck(:id).first) }
end
context "when requesting a negative page of results" do