Skip to content

Commit 617d32a

Browse files
committed
Add pagination support to GitHub.API.Installation.repositories
1 parent 5bd21f8 commit 617d32a

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

lib/code_corps/github/api/installation.ex

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,34 @@ defmodule CodeCorps.GitHub.API.Installation do
1414
@doc """
1515
List repositories that are accessible to the authenticated installation.
1616
17+
All pages of records are retrieved.
18+
1719
https://developer.github.com/v3/apps/installations/#list-repositories
1820
"""
1921
@spec repositories(GithubAppInstallation.t) :: {:ok, list(map)} | {:error, GitHub.api_error_struct}
2022
def repositories(%GithubAppInstallation{} = installation) do
2123
with {:ok, access_token} <- installation |> get_access_token(),
22-
{:ok, %{"repositories" => repositories}} <- fetch_repositories(access_token) do
23-
24+
{:ok, responses} <- fetch_repositories(access_token),
25+
repositories <- extract_repositories(responses) do
2426
{:ok, repositories}
2527
else
2628
{:error, error} -> {:error, error}
2729
end
2830
end
2931

3032
defp fetch_repositories(access_token) do
31-
GitHub.request(:get, "installation/repositories", %{}, %{}, [access_token: access_token])
33+
"installation/repositories"
34+
|> GitHub.get_all(%{}, [access_token: access_token, params: [per_page: 100]])
35+
|> (&{:ok, &1}).()
36+
end
37+
38+
defp extract_repositories(responses) do
39+
responses
40+
|> Enum.reduce([], &merge_repositories/2)
41+
end
42+
43+
defp merge_repositories(response, acc) do
44+
acc |> Enum.concat(response |> Map.get("repositories"))
3245
end
3346

3447
@doc """

0 commit comments

Comments
 (0)