# frozen_string_literal: true require_relative "../response/contributors_response" module ONEAccess module Request class ContributorsRequestHandler def initialize(url:, limit: PAGE_SIZE) @url = url @limit = limit end def each offset = 0 loop do http_response = Http::HttpClient.get(url, build_params(offset)) response = Response::ContributorsResponse.from_json(http_response.body) response&.data&.each do |contributor| yield contributor end break unless more_records?(response.meta) offset += 1 end end private PAGE_SIZE = 100 attr_reader :url attr_reader :limit def build_params(offset) { limit: limit, offset: offset } end def more_records?(meta) meta.offset < (meta.total / meta.limit).ceil - 1 end end end end