2018-07-25 08:22:53 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-07-11 02:21:12 -04:00
|
|
|
module BitbucketServer
|
|
|
|
class Collection < Enumerator
|
2018-11-05 18:37:21 -05:00
|
|
|
attr_reader :paginator
|
|
|
|
|
|
|
|
delegate :page_offset, :has_next_page?, to: :paginator
|
|
|
|
|
2018-07-11 02:21:12 -04:00
|
|
|
def initialize(paginator)
|
2018-11-05 18:37:21 -05:00
|
|
|
@paginator = paginator
|
|
|
|
|
2018-07-11 02:21:12 -04:00
|
|
|
super() do |yielder|
|
|
|
|
loop do
|
|
|
|
paginator.items.each { |item| yielder << item }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
lazy
|
|
|
|
end
|
|
|
|
|
2018-11-05 18:37:21 -05:00
|
|
|
def current_page
|
|
|
|
return 1 if page_offset <= 1
|
|
|
|
|
|
|
|
[1, page_offset].max
|
|
|
|
end
|
|
|
|
|
|
|
|
def prev_page
|
|
|
|
return nil unless current_page > 1
|
|
|
|
|
|
|
|
current_page - 1
|
|
|
|
end
|
|
|
|
|
|
|
|
def next_page
|
|
|
|
return nil unless has_next_page?
|
|
|
|
|
|
|
|
current_page + 1
|
|
|
|
end
|
|
|
|
|
2018-07-11 02:21:12 -04:00
|
|
|
def method_missing(method, *args)
|
|
|
|
return super unless self.respond_to?(method)
|
|
|
|
|
|
|
|
self.__send__(method, *args) do |item| # rubocop:disable GitlabSecurity/PublicSend
|
|
|
|
block_given? ? yield(item) : item
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|