Encapsulate reused pagination component in a class
This commit is contained in:
parent
ac06070147
commit
030adf12ce
|
@ -7,12 +7,20 @@ class EnvironmentSerializer < BaseSerializer
|
|||
tap { @itemize = true }
|
||||
end
|
||||
|
||||
def with_pagination(request, response)
|
||||
tap { @paginator = Paginator.new(request, response) }
|
||||
end
|
||||
|
||||
def itemized?
|
||||
@itemize
|
||||
end
|
||||
|
||||
def paginated?
|
||||
defined?(@paginator)
|
||||
end
|
||||
|
||||
def represent(resource, opts = {})
|
||||
# resource = paginate(resource) if paginated?
|
||||
resource = @paginator.paginate(resource) if paginated?
|
||||
|
||||
if itemized?
|
||||
itemize(resource).map do |item|
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
class Paginator
|
||||
include API::Helpers::Pagination
|
||||
|
||||
def initialize(request, response)
|
||||
@request = request
|
||||
@response = response
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Methods needed by `API::Helpers::Pagination`
|
||||
#
|
||||
|
||||
attr_reader :request
|
||||
|
||||
def params
|
||||
@request.query_parameters
|
||||
end
|
||||
|
||||
def header(header, value)
|
||||
@response.headers[header] = value
|
||||
end
|
||||
end
|
|
@ -1,41 +1,24 @@
|
|||
class PipelineSerializer < BaseSerializer
|
||||
class InvalidResourceError < StandardError; end
|
||||
include API::Helpers::Pagination
|
||||
Struct.new('Pagination', :request, :response)
|
||||
|
||||
entity PipelineEntity
|
||||
|
||||
def with_pagination(request, response)
|
||||
tap { @paginator = Paginator.new(request, response) }
|
||||
end
|
||||
|
||||
def paginated?
|
||||
defined?(@paginator)
|
||||
end
|
||||
|
||||
def represent(resource, opts = {})
|
||||
if paginated?
|
||||
raise InvalidResourceError unless resource.respond_to?(:page)
|
||||
|
||||
super(paginate(resource.includes(project: :namespace)), opts)
|
||||
resource = resource.includes(project: :namespace)
|
||||
super(@paginator.paginate(resource), opts)
|
||||
else
|
||||
super(resource, opts)
|
||||
end
|
||||
end
|
||||
|
||||
def paginated?
|
||||
defined?(@pagination)
|
||||
end
|
||||
|
||||
def with_pagination(request, response)
|
||||
tap { @pagination = Struct::Pagination.new(request, response) }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Methods needed by `API::Helpers::Pagination`
|
||||
#
|
||||
def params
|
||||
@pagination.request.query_parameters
|
||||
end
|
||||
|
||||
def request
|
||||
@pagination.request
|
||||
end
|
||||
|
||||
def header(header, value)
|
||||
@pagination.response.headers[header] = value
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue