travis-api/lib/travis/api/v3/paginator.rb
2015-08-21 17:04:12 +02:00

43 lines
1.1 KiB
Ruby

module Travis::API::V3
class Paginator
attr_accessor :default_limit, :max_limit
def initialize(default_limit: 25, max_limit: 100)
@default_limit = default_limit
@max_limit = max_limit
end
def paginate(result, limit: nil, offset: nil, access_control: AccessControl::Anonymous.new)
limit &&= Integer(limit, :limit)
limit ||= default_limit
limit = default_limit if limit < 0
unless access_control.full_access?
limit = max_limit if limit > max_limit or limit < 1
end
offset &&= Integer(offset, :offset)
offset = 0 if offset.nil? or offset < 0
count = result.resource ? result.resource.count : 0
result.resource &&= result.resource.limit(limit) unless limit == 0
result.resource &&= result.resource.offset(offset) unless offset == 0
pagination_info = {
limit: limit,
offset: offset,
count: count,
}
result.meta_data[:pagination] = pagination_info
result
end
def Integer(value, key)
super(value)
rescue ArgumentError
raise WrongParams, "#{key} must be an integer"
end
end
end