Skip to content

Commit 635df75

Browse files
committed
reorganize
1 parent 95313db commit 635df75

File tree

4 files changed

+44
-49
lines changed

4 files changed

+44
-49
lines changed

lib/algora/shared/util.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,11 @@ defmodule Algora.Util do
122122
# TODO: Implement this for all countries
123123
def locale_from_country_code("gr"), do: "el"
124124
def locale_from_country_code(country_code), do: country_code
125+
126+
def parse_github_url(url) do
127+
case Regex.run(~r{(?:github\.com/)?([^/\s]+)/([^/\s]+)}, url) do
128+
[_, owner, repo] -> {:ok, {owner, repo}}
129+
_ -> {:error, "Must be a valid GitHub repository URL (e.g. github.com/owner/repo) or owner/repo format"}
130+
end
131+
end
125132
end

lib/algora_web/live/home_live.ex

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -815,13 +815,6 @@ defmodule AlgoraWeb.HomeLive do
815815
end
816816
end
817817

818-
def parse_github_url(url) do
819-
case Regex.run(~r{(?:github\.com/)?([^/\s]+)/([^/\s]+)}, url) do
820-
[_, owner, repo] -> {:ok, {owner, repo}}
821-
_ -> {:error, "Must be a valid GitHub repository URL (e.g. github.com/owner/repo) or owner/repo format"}
822-
end
823-
end
824-
825818
@impl true
826819
def handle_event("submit_repo", %{"repo_form" => params}, socket) do
827820
changeset =
@@ -832,7 +825,7 @@ defmodule AlgoraWeb.HomeLive do
832825
if changeset.valid? do
833826
url = get_field(changeset, :url)
834827

835-
case url |> parse_github_url() |> dbg() do
828+
case url |> Algora.Util.parse_github_url() |> dbg() do
836829
{:ok, {repo_owner, repo_name}} ->
837830
token = Github.TokenPool.get_token()
838831

test/algora/shared/util_test.exs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,40 @@ defmodule Algora.UtilTest do
1818
assert Util.format_pct(Decimal.new("0.1050")) == "10.5%"
1919
end
2020
end
21+
22+
describe "parse_github_url/1" do
23+
test "parses full GitHub URLs" do
24+
assert Util.parse_github_url("https://github.com/owner/repo") == {:ok, {"owner", "repo"}}
25+
assert Util.parse_github_url("http://github.com/owner/repo") == {:ok, {"owner", "repo"}}
26+
assert Util.parse_github_url("github.com/owner/repo") == {:ok, {"owner", "repo"}}
27+
end
28+
29+
test "parses owner/repo format" do
30+
assert Util.parse_github_url("owner/repo") == {:ok, {"owner", "repo"}}
31+
end
32+
33+
test "handles URLs with dashes and underscores" do
34+
assert Util.parse_github_url("my-org/my_repo") == {:ok, {"my-org", "my_repo"}}
35+
assert Util.parse_github_url("github.com/my-org/my_repo") == {:ok, {"my-org", "my_repo"}}
36+
end
37+
38+
test "handles numeric characters" do
39+
assert Util.parse_github_url("owner123/repo456") == {:ok, {"owner123", "repo456"}}
40+
end
41+
42+
test "rejects invalid formats" do
43+
error_msg = "Must be a valid GitHub repository URL (e.g. github.com/owner/repo) or owner/repo format"
44+
45+
assert Util.parse_github_url("") == {:error, error_msg}
46+
assert Util.parse_github_url("invalid") == {:error, error_msg}
47+
assert Util.parse_github_url("owner") == {:error, error_msg}
48+
assert Util.parse_github_url("owner/") == {:error, error_msg}
49+
assert Util.parse_github_url("/repo") == {:error, error_msg}
50+
end
51+
52+
test "handles whitespace" do
53+
assert Util.parse_github_url(" owner/repo ") == {:ok, {"owner", "repo"}}
54+
assert Util.parse_github_url(" github.com/owner/repo ") == {:ok, {"owner", "repo"}}
55+
end
56+
end
2157
end

test/algora_web/live/home_live_test.exs

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)