Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/aura/model/hex_package.ex
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ defmodule Aura.Model.HexPackage do
struct(HexPackage, fields)
end

defp serialize(_k, nil), do: nil
defp serialize(:meta, v), do: PackageMeta.build(v)
defp serialize(:downloads, v), do: DownloadStats.build(v)

Expand Down
33 changes: 33 additions & 0 deletions lib/aura/model/hex_package_owner.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
defmodule Aura.Model.HexPackageOwner do
@moduledoc false

import Aura.Model.Common

alias Aura.Model.HexPackageOwner

defstruct [
:email,
:full_name,
:handles,
:inserted_at,
:level,
:updated_at,
:url,
:username
]

def build(m) when is_map(m) do
m
|> prepare()
|> Enum.map(fn {k, v} -> {k, serialize(k, v)} end)
|> then(&Kernel.struct(HexPackageOwner, &1))
end

defp serialize(_k, nil), do: nil

defp serialize(:handles, v), do: v |> prepare() |> Map.new()

defp serialize(:level, v), do: String.to_atom(v)

defp serialize(_k, v), do: v
end
12 changes: 6 additions & 6 deletions lib/aura/model/hex_release.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ defmodule Aura.Model.HexRelease do

import Aura.Model.Common

alias Aura.Model.HexRelease

defstruct [
:checksum,
:configs,
Expand All @@ -22,12 +24,10 @@ defmodule Aura.Model.HexRelease do
]

def build(m) when is_map(m) do
fields =
m
|> prepare()
|> Map.new(fn {k, v} -> {k, serialize(k, v)} end)

struct(Aura.Model.HexRelease, fields)
m
|> prepare()
|> Map.new(fn {k, v} -> {k, serialize(k, v)} end)
|> then(&Kernel.struct(HexRelease, &1))
end

defp serialize(_k, nil), do: nil
Expand Down
6 changes: 3 additions & 3 deletions lib/aura/model/hex_repo.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ defmodule Aura.Model.HexRepo do
]

def build(m) when is_map(m) do
fields = prepare(m)

struct(HexRepo, fields)
m
|> prepare()
|> then(&Kernel.struct(HexRepo, &1))
end
end
7 changes: 7 additions & 0 deletions lib/aura/packages.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,19 @@ defmodule Aura.Packages do
@moduledoc false

alias Aura.Model.HexPackage
alias Aura.Model.HexPackageOwner
alias Aura.Requester

def list_packages(opts \\ []) do
stream_paginate("/packages", opts)
end

def list_package_owners(name) do
with {:ok, %{body: body}} <- Requester.get("/packages/#{name}/owners") do
{:ok, Enum.map(body, &HexPackageOwner.build/1)}
end
end

def get_package(name) do
with {:ok, %{body: body}} <- Requester.get("/packages/#{name}") do
{:ok, HexPackage.build(body)}
Expand Down
2 changes: 1 addition & 1 deletion mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"date_time_parser": {:hex, :date_time_parser, "1.2.0", "3d5a816b91967f51e0f94dcb16a34b2cb780f22cd48931779e81d72f7d3eadb1", [:mix], [{:kday, "~> 1.0", [hex: :kday, repo: "hexpm", optional: false]}], "hexpm", "0cf09ada9f42c0b3bfba02dc0ea2e4b4d2f543d9d2bf99b831a29e6b4a4160e5"},
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
"eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"},
"ex_doc": {:hex, :ex_doc, "0.38.1", "bae0a0bd5b5925b1caef4987e3470902d072d03347114ffe03a55dbe206dd4c2", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "754636236d191b895e1e4de2ebb504c057fe1995fdfdd92e9d75c4b05633008b"},
"ex_doc": {:hex, :ex_doc, "0.38.2", "504d25eef296b4dec3b8e33e810bc8b5344d565998cd83914ffe1b8503737c02", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "732f2d972e42c116a70802f9898c51b54916e542cc50968ac6980512ec90f42b"},
"ex_hash_ring": {:hex, :ex_hash_ring, "6.0.4", "bef9d2d796afbbe25ab5b5a7ed746e06b99c76604f558113c273466d52fa6d6b", [:mix], [], "hexpm", "89adabf31f7d3dfaa36802ce598ce918e9b5b33bae8909ac1a4d052e1e567d18"},
"ex_license": {:hex, :ex_license, "0.1.1", "bbdaba704f861894da3ae80e4399984379f19de1cca4ecf7d799616c832b8821", [:mix], [], "hexpm", "dd95aaaba0c9c6f0e9be2db3e9fac0bf69784557e04f700f94e90629f5e24e1d"},
"ex_machina": {:hex, :ex_machina, "2.8.0", "a0e847b5712065055ec3255840e2c78ef9366634d62390839d4880483be38abe", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "79fe1a9c64c0c1c1fab6c4fa5d871682cb90de5885320c187d117004627a7729"},
Expand Down
26 changes: 23 additions & 3 deletions test/aura/packages_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,29 @@ defmodule Aura.PackagesTest do
end)
end

test "list_package_owners" do
packages = Enum.take(Packages.list_packages(), 100)
refute Enum.empty?(packages)

Enum.each(packages, fn package ->
{:ok, owners} = Packages.list_package_owners(package.name)
refute Enum.empty?(owners)

Enum.each(owners, fn owner ->
assert owner.username
assert owner.level
assert owner.url
end)
end)
end

test "get_package" do
[package | _] = Enum.take(Packages.list_packages(), 1)
assert {:ok, retrieved} = Packages.get_package(package.name)
assert package == retrieved
packages = Enum.take(Packages.list_packages(), 100)
refute Enum.empty?(packages)

Enum.each(packages, fn package ->
assert {:ok, retrieved} = Packages.get_package(package.name)
assert package == retrieved
end)
end
end
26 changes: 26 additions & 0 deletions test/support/factories/hex_package_owner_factory.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
defmodule Aura.Factory.HexPackageOwnerFactory do
@moduledoc false

defmacro __using__(_opts) do
quote do
def hex_package_owner_factory(attrs) do
# :handles,
# ]

inserted_at = Faker.DateTime.backward(40)

%Aura.Model.HexPackageOwner{
email: Faker.Internet.email(),
full_name: Faker.Person.name(),
inserted_at: inserted_at,
level: Enum.random([:maintainer, :full]),
updated_at: Faker.DateTime.between(inserted_at, DateTime.now!("Etc/UTC")),
url: Faker.Internet.url(),
username: Faker.Internet.user_name()
}
|> merge_attributes(attrs)
|> evaluate_lazy_attributes()
end
end
end
end
Loading