Skip to content

Commit

Permalink
refactor: format sources
Browse files Browse the repository at this point in the history
  • Loading branch information
tynn committed Apr 19, 2023
1 parent 9915879 commit 3625595
Show file tree
Hide file tree
Showing 28 changed files with 511 additions and 381 deletions.
1 change: 1 addition & 0 deletions .formatter.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"]]
3 changes: 2 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,6 @@ jobs:
elixir-version: ${{ matrix.elixir }}
otp-version: ${{ matrix.otp }}
- run: mix deps.get
- run: mix format --check-formatted
- run: mix test
- run: mix coveralls
- run: mix coveralls
30 changes: 15 additions & 15 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ config :logger, level: :warn
config :tesla, adapter: Tesla.Adapter.Hackney

config :trot,
router: Asapi.Router,
pre_routing: [
"Elixir.Trot.LiveReload": [env: Mix.env],
"Elixir.Plug.Logger": [],
"Elixir.PlugHeartbeat": [],
"Elixir.Plug.Static": [at: "/", from: :asapi],
"Elixir.Asapi.Library": [],
"Elixir.Asapi.Type": []
],
post_routing: [
"Elixir.Asapi.Reload": [],
"Elixir.Asapi.Lv": [],
"Elixir.Trot.NotFound": []
]
router: Asapi.Router,
pre_routing: [
"Elixir.Trot.LiveReload": [env: Mix.env()],
"Elixir.Plug.Logger": [],
"Elixir.PlugHeartbeat": [],
"Elixir.Plug.Static": [at: "/", from: :asapi],
"Elixir.Asapi.Library": [],
"Elixir.Asapi.Type": []
],
post_routing: [
"Elixir.Asapi.Reload": [],
"Elixir.Asapi.Lv": [],
"Elixir.Trot.NotFound": []
]

import_config "#{Mix.env}.exs"
import_config "#{Mix.env()}.exs"
16 changes: 8 additions & 8 deletions config/prod.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import Config
import System

config :trot,
port: get_env("PORT"),
pre_routing: [
"Elixir.Plug.SSL": [rewrite_on: [:x_forwarded_proto]],
"Elixir.PlugHeartbeat": [],
"Elixir.Plug.Static": [at: "/", from: :asapi],
"Elixir.Asapi.Library": [],
"Elixir.Asapi.Type": []
]
port: get_env("PORT"),
pre_routing: [
"Elixir.Plug.SSL": [rewrite_on: [:x_forwarded_proto]],
"Elixir.PlugHeartbeat": [],
"Elixir.Plug.Static": [at: "/", from: :asapi],
"Elixir.Asapi.Library": [],
"Elixir.Asapi.Type": []
]
2 changes: 1 addition & 1 deletion lib/asapi.ex
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ defmodule Asapi do
end

defp shield(status, color) do
"https://img.shields.io/badge/API-#{encode status}-#{color}"
"https://img.shields.io/badge/API-#{encode(status)}-#{color}"
end

defp encode(part) do
Expand Down
28 changes: 17 additions & 11 deletions lib/asapi/aar.ex
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ defmodule Asapi.Aar do
defstruct [:group, :name, :revision, :classifier]

def sdk_levels!(aar_file) do
info = load_manifest! aar_file
min = sdk_ver Regex.run ~R/android:minSdkVersion="([0-9]+)"/, info
max = sdk_ver Regex.run ~R/android:maxSdkVersion="([0-9]+)"/, info
info = load_manifest!(aar_file)
min = sdk_ver(Regex.run(~R/android:minSdkVersion="([0-9]+)"/, info))
max = sdk_ver(Regex.run(~R/android:maxSdkVersion="([0-9]+)"/, info))

case {min, max} do
{nil, nil} -> "1+"
{sdk, sdk} -> to_string sdk
{sdk, sdk} -> to_string(sdk)
{min_sdk, nil} -> "#{min_sdk}+"
{nil, max_sdk} -> "1-#{max_sdk}"
{min_sdk, max_sdk} -> "#{min_sdk}-#{max_sdk}"
Expand All @@ -43,23 +44,28 @@ defmodule Asapi.Aar do
end

defp sdk_ver(nil), do: nil
defp sdk_ver([_, level]), do: String.to_integer level
defp sdk_ver([_, level]), do: String.to_integer(level)

defimpl String.Chars, for: Aar do
def to_string(aar) do
case aar do
%Aar{group: nil} ->
nil
nil

%Aar{name: nil} ->
nil
nil

%Aar{revision: nil, classifier: nil} ->
"#{aar.group}:#{aar.name}:+"
"#{aar.group}:#{aar.name}:+"

%Aar{revision: nil} ->
"#{aar.group}:#{aar.name}:+:#{aar.classifier}"
"#{aar.group}:#{aar.name}:+:#{aar.classifier}"

%Aar{classifier: nil} ->
"#{aar.group}:#{aar.name}:#{aar.revision}"
"#{aar.group}:#{aar.name}:#{aar.revision}"

_ ->
"#{aar.group}:#{aar.name}:#{aar.revision}:#{aar.classifier}"
"#{aar.group}:#{aar.name}:#{aar.revision}:#{aar.classifier}"
end
end
end
Expand Down
6 changes: 3 additions & 3 deletions lib/asapi/ext.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

defmodule Asapi.Ext do
@day :timer.hours 24
@day :timer.hours(24)

def start(_type, _args) do
Cachex.start_link :lvc, [
Cachex.start_link(:lvc,
disable_ode: false,
default_ttl: @day * 7,
ttl_interval: @day
]
)
end
end
22 changes: 11 additions & 11 deletions lib/asapi/ext/data.ex
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,32 @@ defmodule Asapi.Ext.Data do
alias Asapi.Ext.Repo

def get!(%Aar{} = aar) do
aar = get_rev! aar
Cachex.fetch! :lvc, aar, &Repo.load!/1
aar = get_rev!(aar)
Cachex.fetch!(:lvc, aar, &Repo.load!/1)
end

defp get_rev!(%Aar{} = aar) do
if Repo.resolve? aar do
rev = Cachex.fetch! :lvc, aar, &Repo.resolve!/1
if Repo.resolve?(aar) do
rev = Cachex.fetch!(:lvc, aar, &Repo.resolve!/1)
%{aar | revision: rev}
else
aar
end
end
end

def clear!(%Aar{} = aar) do
aar = clear_rev! aar
Cachex.del :lvc, aar
aar = clear_rev!(aar)
Cachex.del(:lvc, aar)
nil
end

def clear_rev!(%Aar{} = aar) do
if Repo.resolve? aar do
rev = Cachex.get! :lvc, aar
Cachex.del :lvc, aar
if Repo.resolve?(aar) do
rev = Cachex.get!(:lvc, aar)
Cachex.del(:lvc, aar)
%{aar | revision: rev}
else
aar
end
end
end
end
53 changes: 28 additions & 25 deletions lib/asapi/ext/repo.ex
Original file line number Diff line number Diff line change
Expand Up @@ -19,42 +19,44 @@ defmodule Asapi.Ext.Repo do
alias Asapi.Aar
use Tesla

plug Tesla.Middleware.FollowRedirects
plug Tesla.Middleware.Retry, max_retries: 3
plug(Tesla.Middleware.FollowRedirects)
plug(Tesla.Middleware.Retry, max_retries: 3)

@repos [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
"https://jitpack.io"
]
"https://maven.google.com",
"https://repo1.maven.org/maven2",
"https://jitpack.io"
]

def resolve!(%Aar{} = aar) do
pattern = case aar.revision do
nil -> ""
"" -> ""
"latest.integration" -> ""
"latest.milestone" -> ""
"latest.release" -> ""
rev -> String.slice(rev, 0..-2)
end
pattern =
case aar.revision do
nil -> ""
"" -> ""
"latest.integration" -> ""
"latest.milestone" -> ""
"latest.release" -> ""
rev -> String.slice(rev, 0..-2)
end

@repos
|> Enum.flat_map(&versions(aar, &1))
|> Enum.filter(&Version.matching?(pattern, &1))
|> Enum.sort(&Version.<=/2)
|> List.last
|> List.last()
|> Map.get(:s)
end

defp module(repo, %Aar{} = aar) do
"#{repo}/#{String.replace aar.group, ".", "/"}/#{aar.name}"
"#{repo}/#{String.replace(aar.group, ".", "/")}/#{aar.name}"
end

defp metadata(module) do
"#{module}/maven-metadata.xml"
end

defp aar_file(module, %Aar{} = aar) do
aar_file module, aar.revision, aar
aar_file(module, aar.revision, aar)
end

defp aar_file(module, revision, %Aar{classifier: nil} = aar) do
Expand Down Expand Up @@ -86,11 +88,12 @@ defmodule Asapi.Ext.Repo do
defp version(lib) do
try do
lib
|> List.last
|> String.trim
|> Version.parse!
rescue _ ->
nil
|> List.last()
|> String.trim()
|> Version.parse!()
rescue
_ ->
nil
end
end

Expand All @@ -102,14 +105,14 @@ defmodule Asapi.Ext.Repo do
"latest.integration" -> true
"latest.milestone" -> true
"latest.release" -> true
rev -> String.ends_with? rev, "+"
rev -> String.ends_with?(rev, "+")
end
end

def load!(%Aar{} = aar) do
@repos
|> Enum.reduce_while(nil, &load_aar_file!(&1, aar, &2))
|> Aar.sdk_levels!
|> Aar.sdk_levels!()
end

defp load_aar_file!(repo, %Aar{} = aar, _) do
Expand All @@ -118,7 +121,7 @@ defmodule Asapi.Ext.Repo do
|> get!
|> load_aar_file
end

defp load_aar_file(response) do
if response.status in 200..299 do
{:halt, response.body}
Expand Down
2 changes: 1 addition & 1 deletion lib/asapi/library.ex
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ defmodule Asapi.Library do

defp handle(%Conn{query_params: %{"library" => lib}} = conn) do
conn
|> build_url("/#{String.replace lib, ":", "/"}", ["library"])
|> build_url("/#{String.replace(lib, ":", "/")}", ["library"])
|> do_redirect(conn)
end

Expand Down
39 changes: 23 additions & 16 deletions lib/asapi/lv.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,26 +41,32 @@ defmodule Asapi.Lv do
def call(%Conn{} = conn, _opts), do: conn

defp asapi_lv(%Conn{assigns: %{asapi_aar: %Aar{} = aar, asapi_ext: :html}} = conn) do
host = case conn.port do
80 -> conn.host
443 -> conn.host
port -> "#{conn.host}:#{port}"
end
path = case Enum.join(conn.path_info, "/") do
"" -> "/"
path -> "/#{path}"
end
render_template "asapi.html.eex",
host =
case conn.port do
80 -> conn.host
443 -> conn.host
port -> "#{conn.host}:#{port}"
end

path =
case Enum.join(conn.path_info, "/") do
"" -> "/"
path -> "/#{path}"
end

render_template("asapi.html.eex",
host: host,
path: path,
lib: to_string(aar),
api: api_lv(aar),
loading: "#{shield(@loading)}.svg"
)
end

defp asapi_lv(%Conn{assigns: %{asapi_aar: aar, asapi_ext: type}} = conn) when type in [:png, :svg] do
defp asapi_lv(%Conn{assigns: %{asapi_aar: aar, asapi_ext: type}} = conn)
when type in [:png, :svg] do
conn
|> build_url("#{shield(api_lv aar)}.#{type}")
|> build_url("#{shield(api_lv(aar))}.#{type}")
|> redirect_to
end

Expand All @@ -77,13 +83,14 @@ defmodule Asapi.Lv do

defp api_lv(%Aar{} = aar) do
try do
case Data.get! aar do
case Data.get!(aar) do
nil -> @unknown
lv -> lv
end
rescue error ->
Logger.warn Exception.message error
@unknown
rescue
error ->
Logger.warn(Exception.message(error))
@unknown
end
end
end
8 changes: 5 additions & 3 deletions lib/asapi/reload.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@ defmodule Asapi.Reload do

defp clear_cached(%Conn{assigns: %{asapi_aar: %Aar{} = aar}} = conn) do
try do
Data.clear! aar
rescue error ->
Logger.warn Exception.message error
Data.clear!(aar)
rescue
error ->
Logger.warn(Exception.message(error))
end

conn
end

Expand Down
Loading

0 comments on commit 3625595

Please sign in to comment.