utils/github/api: simplify pagination

This commit is contained in:
nandahkrishna 2021-03-11 14:50:19 +05:30
parent 94431ce104
commit 7b0352f167
No known key found for this signature in database
GPG Key ID: 067E5FCD58ADF3AA
2 changed files with 11 additions and 5 deletions

View File

@ -306,11 +306,11 @@ module GitHub
end end
def public_member_usernames(org, per_page: 100) def public_member_usernames(org, per_page: 100)
url = "#{API_URL}/orgs/#{org}/public_members?per_page=#{per_page}" url = "#{API_URL}/orgs/#{org}/public_members"
members = [] members = []
(1..API_MAX_PAGES).each do |page| API.paginate_rest(url, per_page: per_page) do |result|
result = API.open_rest("#{url}&page=#{page}").map { |member| member["login"] } result = result.map { |member| member["login"] }
members.concat(result) members.concat(result)
return members if result.length < per_page return members if result.length < per_page
@ -562,8 +562,7 @@ module GitHub
raise API::Error, "Getting #{commit_count} commits would exceed limit of #{API_MAX_ITEMS} API items!" raise API::Error, "Getting #{commit_count} commits would exceed limit of #{API_MAX_ITEMS} API items!"
end end
(1..API_MAX_PAGES).each do |page| API.paginate_rest(commits_api, per_page: per_page) do |result, page|
result = API.open_rest(commits_api + "?per_page=#{per_page}&page=#{page}")
commits.concat(result.map { |c| c["sha"] }) commits.concat(result.map { |c| c["sha"] })
return commits if commits.length == commit_count return commits if commits.length == commit_count

View File

@ -249,6 +249,13 @@ module GitHub
end end
end end
def paginate_rest(url, per_page: 100)
(1..API_MAX_PAGES).each do |page|
result = API.open_rest("#{url}?per_page=#{per_page}&page=#{page}")
yield(result, page)
end
end
def open_graphql(query, scopes: [].freeze) def open_graphql(query, scopes: [].freeze)
data = { query: query } data = { query: query }
result = open_rest("https://api.github.com/graphql", scopes: scopes, data: data, request_method: "POST") result = open_rest("https://api.github.com/graphql", scopes: scopes, data: data, request_method: "POST")