Fix errors reported by Dialyzer

master
Milton Mazzarri 2019-03-19 13:16:09 -05:00
parent 611fbc4ebf
commit 371494644d
No known key found for this signature in database
GPG Key ID: 9F4193F2B5A558FE
7 changed files with 66 additions and 57 deletions

View File

@ -222,7 +222,7 @@ defmodule Hunter do
different instance. default: `https://mastodon.social` different instance. default: `https://mastodon.social`
""" """
@spec create_app(String.t(), String.t(), [String.t()], String.t(), Keyword.t()) :: @spec create_app(String.t(), String.t(), [String.t()], nil | String.t(), Keyword.t()) ::
Hunter.Application.t() | no_return Hunter.Application.t() | no_return
defdelegate create_app( defdelegate create_app(
name, name,
@ -732,7 +732,8 @@ defmodule Hunter do
* `base_url` - API base url, default: `https://mastodon.social` * `base_url` - API base url, default: `https://mastodon.social`
""" """
defdelegate log_in(app, username, password, base_url \\ nil), to: Hunter.Client defdelegate log_in(app, username, password, base_url \\ "https://mastodon.social"),
to: Hunter.Client
@doc """ @doc """
Fetch user's blocked domains Fetch user's blocked domains

View File

@ -45,9 +45,9 @@ defmodule Hunter.Account do
followers_count: non_neg_integer, followers_count: non_neg_integer,
following_count: non_neg_integer, following_count: non_neg_integer,
statuses_count: non_neg_integer, statuses_count: non_neg_integer,
emojis: [Emoji.t()], emojis: [Hunter.Emoji.t()],
moved: Account.t(), moved: t(),
fields: [Hash.t()], fields: [any()],
bot: boolean bot: boolean
} }

View File

@ -209,9 +209,9 @@ defmodule Hunter.Api do
name :: String.t(), name :: String.t(),
redirect_uri :: String.t(), redirect_uri :: String.t(),
scopes :: [String.t()], scopes :: [String.t()],
website :: String.t(), website :: nil | String.t(),
base_url :: String.t() base_url :: String.t()
) :: Hunter.Application.t() | no_return ) :: Hunter.Application.t()
@doc """ @doc """
Upload a media file Upload a media file

View File

@ -3,76 +3,74 @@ defmodule Hunter.Api.HTTPClient do
HTTP Client for Hunter HTTP Client for Hunter
""" """
alias Hunter.Api.Request alias Hunter.{Api.Request, Config}
@behaviour Hunter.Api @behaviour Hunter.Api
@http_options Application.get_env(:hunter, :http_options, [])
def verify_credentials(conn) do def verify_credentials(conn) do
"/api/v1/accounts/verify_credentials" "/api/v1/accounts/verify_credentials"
|> process_url(conn) |> process_url(conn)
|> request!(:account, :get, [], get_headers(conn)) |> request!(:account, :get, [], conn)
end end
def update_credentials(conn, data) do def update_credentials(conn, data) do
"/api/v1/accounts/update_credentials" "/api/v1/accounts/update_credentials"
|> process_url(conn) |> process_url(conn)
|> request!(:account, :patch, data, get_headers(conn)) |> request!(:account, :patch, data, conn)
end end
def account(conn, id) do def account(conn, id) do
"/api/v1/accounts/#{id}" "/api/v1/accounts/#{id}"
|> process_url(conn) |> process_url(conn)
|> request!(:account, :get, [], get_headers(conn)) |> request!(:account, :get, [], conn)
end end
def followers(conn, id, options) do def followers(conn, id, options) do
"/api/v1/accounts/#{id}/followers" "/api/v1/accounts/#{id}/followers"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def following(conn, id, options) do def following(conn, id, options) do
"/api/v1/accounts/#{id}/following" "/api/v1/accounts/#{id}/following"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def follow_by_uri(conn, uri) do def follow_by_uri(conn, uri) do
"/api/v1/follows" "/api/v1/follows"
|> process_url(conn) |> process_url(conn)
|> request!(:account, :post, %{uri: uri}, get_headers(conn)) |> request!(:account, :post, %{uri: uri}, conn)
end end
def search_account(conn, options) do def search_account(conn, options) do
"/api/v1/accounts/search" "/api/v1/accounts/search"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def blocks(conn, options) do def blocks(conn, options) do
"/api/v1/blocks" "/api/v1/blocks"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def follow_requests(conn, options) do def follow_requests(conn, options) do
"/api/v1/follow_requests" "/api/v1/follow_requests"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def mutes(conn, options) do def mutes(conn, options) do
"/api/v1/mutes" "/api/v1/mutes"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def follow_request_action(conn, id, action) when action in [:authorize, :reject] do def follow_request_action(conn, id, action) when action in [:authorize, :reject] do
"/api/v1/follow_requests/#{action}" "/api/v1/follow_requests/#{action}"
|> process_url(conn) |> process_url(conn)
|> request!(nil, :post, %{id: id}, get_headers(conn)) |> request!(nil, :post, %{id: id}, conn)
end end
def create_app(name, redirect_uri, scopes, website, base_url) do def create_app(name, redirect_uri, scopes, website, base_url) do
@ -106,43 +104,43 @@ defmodule Hunter.Api.HTTPClient do
def relationships(conn, ids) do def relationships(conn, ids) do
"/api/v1/accounts/relationships" "/api/v1/accounts/relationships"
|> process_url(conn) |> process_url(conn)
|> request!(:relationships, :get, %{id: ids}, get_headers(conn)) |> request!(:relationships, :get, %{id: ids}, conn)
end end
def follow(conn, id) do def follow(conn, id) do
"/api/v1/accounts/#{id}/follow" "/api/v1/accounts/#{id}/follow"
|> process_url(conn) |> process_url(conn)
|> request!(:relationship, :post, [], get_headers(conn)) |> request!(:relationship, :post, [], conn)
end end
def unfollow(conn, id) do def unfollow(conn, id) do
"/api/v1/accounts/#{id}/unfollow" "/api/v1/accounts/#{id}/unfollow"
|> process_url(conn) |> process_url(conn)
|> request!(:relationship, :post, [], get_headers(conn)) |> request!(:relationship, :post, [], conn)
end end
def block(conn, id) do def block(conn, id) do
"/api/v1/accounts/#{id}/block" "/api/v1/accounts/#{id}/block"
|> process_url(conn) |> process_url(conn)
|> request!(:relationship, :post, [], get_headers(conn)) |> request!(:relationship, :post, [], conn)
end end
def unblock(conn, id) do def unblock(conn, id) do
"/api/v1/accounts/#{id}/unblock" "/api/v1/accounts/#{id}/unblock"
|> process_url(conn) |> process_url(conn)
|> request!(:relationship, :post, [], get_headers(conn)) |> request!(:relationship, :post, [], conn)
end end
def mute(conn, id) do def mute(conn, id) do
"/api/v1/accounts/#{id}/mute" "/api/v1/accounts/#{id}/mute"
|> process_url(conn) |> process_url(conn)
|> request!(:relationship, :post, [], get_headers(conn)) |> request!(:relationship, :post, [], conn)
end end
def unmute(conn, id) do def unmute(conn, id) do
"/api/v1/accounts/#{id}/unmute" "/api/v1/accounts/#{id}/unmute"
|> process_url(conn) |> process_url(conn)
|> request!(:relationship, :post, [], get_headers(conn)) |> request!(:relationship, :post, [], conn)
end end
def search(conn, query, options) do def search(conn, query, options) do
@ -150,75 +148,75 @@ defmodule Hunter.Api.HTTPClient do
"/api/v2/search" "/api/v2/search"
|> process_url(conn) |> process_url(conn)
|> request!(:result, :get, options, get_headers(conn)) |> request!(:result, :get, options, conn)
end end
def create_status(conn, status, options) do def create_status(conn, status, options) do
body = Map.put(options, :status, status) body = Keyword.put(options, :status, status)
"/api/v1/statuses" "/api/v1/statuses"
|> process_url(conn) |> process_url(conn)
|> request!(:status, :post, body, get_headers(conn)) |> request!(:status, :post, body, conn)
end end
def status(conn, id) do def status(conn, id) do
"/api/v1/statuses/#{id}" "/api/v1/statuses/#{id}"
|> process_url(conn) |> process_url(conn)
|> request!(:status, :get!, [], get_headers(conn)) |> request!(:status, :get, [], conn)
end end
def destroy_status(conn, id) do def destroy_status(conn, id) do
"/api/v1/statuses/#{id}" "/api/v1/statuses/#{id}"
|> process_url(conn) |> process_url(conn)
|> request!(nil, :delete, [], get_headers(conn)) |> request!(nil, :delete, [], conn)
end end
def reblog(conn, id) do def reblog(conn, id) do
"/api/v1/statuses/#{id}/reblog" "/api/v1/statuses/#{id}/reblog"
|> process_url(conn) |> process_url(conn)
|> request!(:status, :post, [], get_headers(conn)) |> request!(:status, :post, [], conn)
end end
def unreblog(conn, id) do def unreblog(conn, id) do
"/api/v1/statuses/#{id}/unreblog" "/api/v1/statuses/#{id}/unreblog"
|> process_url(conn) |> process_url(conn)
|> request!(:status, :post, [], get_headers(conn)) |> request!(:status, :post, [], conn)
end end
def reblogged_by(conn, id, options) do def reblogged_by(conn, id, options) do
"/api/v1/statuses/#{id}/reblogged_by" "/api/v1/statuses/#{id}/reblogged_by"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def favourite(conn, id) do def favourite(conn, id) do
"/api/v1/statuses/#{id}/favourite" "/api/v1/statuses/#{id}/favourite"
|> process_url(conn) |> process_url(conn)
|> request!(:status, :post, [], get_headers(conn)) |> request!(:status, :post, [], conn)
end end
def unfavourite(conn, id) do def unfavourite(conn, id) do
"/api/v1/statuses/#{id}/unfavourite" "/api/v1/statuses/#{id}/unfavourite"
|> process_url(conn) |> process_url(conn)
|> request!(:status, :post, [], get_headers(conn)) |> request!(:status, :post, [], conn)
end end
def favourites(conn, options) do def favourites(conn, options) do
"/api/v1/favourites" "/api/v1/favourites"
|> process_url(conn) |> process_url(conn)
|> request!(:statuses, :get, options, get_headers(conn)) |> request!(:statuses, :get, options, conn)
end end
def favourited_by(conn, id, options) do def favourited_by(conn, id, options) do
"/api/v1/statuses/#{id}/favourited_by" "/api/v1/statuses/#{id}/favourited_by"
|> process_url(conn) |> process_url(conn)
|> request!(:accounts, :get, options, get_headers(conn)) |> request!(:accounts, :get, options, conn)
end end
def statuses(conn, account_id, options) do def statuses(conn, account_id, options) do
"/api/v1/accounts/#{account_id}/statuses" "/api/v1/accounts/#{account_id}/statuses"
|> process_url(conn) |> process_url(conn)
|> request!(:statuses, :get, options, get_headers(conn)) |> request!(:statuses, :get, options, conn)
end end
def home_timeline(conn, options) do def home_timeline(conn, options) do
@ -236,43 +234,43 @@ defmodule Hunter.Api.HTTPClient do
defp retrieve_timeline(conn, endpoint, options) do defp retrieve_timeline(conn, endpoint, options) do
endpoint endpoint
|> process_url(conn) |> process_url(conn)
|> request!(:statuses, :get, options, get_headers(conn)) |> request!(:statuses, :get, options, conn)
end end
def instance_info(conn) do def instance_info(conn) do
"/api/v1/instance" "/api/v1/instance"
|> process_url(conn) |> process_url(conn)
|> request!(:instance, :get, [], get_headers(conn)) |> request!(:instance, :get, [], conn)
end end
def notifications(conn, options) do def notifications(conn, options) do
"/api/v1/notifications" "/api/v1/notifications"
|> process_url(conn) |> process_url(conn)
|> request!(:notifications, :get, options, get_headers(conn)) |> request!(:notifications, :get, options, conn)
end end
def notification(conn, id) do def notification(conn, id) do
"/api/v1/notifications/#{id}" "/api/v1/notifications/#{id}"
|> process_url(conn) |> process_url(conn)
|> request!(:notification, :get, [], get_headers(conn)) |> request!(:notification, :get, [], conn)
end end
def clear_notifications(conn) do def clear_notifications(conn) do
"/api/v1/notifications/clear" "/api/v1/notifications/clear"
|> process_url(conn) |> process_url(conn)
|> request!(nil, :post, [], get_headers(conn)) |> request!(nil, :post, [], conn)
end end
def clear_notification(conn, id) do def clear_notification(conn, id) do
"/api/v1/notifications/dismiss/#{id}" "/api/v1/notifications/dismiss/#{id}"
|> process_url(conn) |> process_url(conn)
|> request!(nil, :post, [], get_headers(conn)) |> request!(nil, :post, [], conn)
end end
def reports(conn) do def reports(conn) do
"/api/v1/reports" "/api/v1/reports"
|> process_url(conn) |> process_url(conn)
|> request!(:reports, :get, [], get_headers(conn)) |> request!(:reports, :get, [], conn)
end end
def report(conn, account_id, status_ids, comment) do def report(conn, account_id, status_ids, comment) do
@ -284,19 +282,19 @@ defmodule Hunter.Api.HTTPClient do
"/api/v1/reports" "/api/v1/reports"
|> process_url(conn) |> process_url(conn)
|> request!(:report, :post, payload, get_headers(conn)) |> request!(:report, :post, payload, conn)
end end
def status_context(conn, id) do def status_context(conn, id) do
"/api/v1/statuses/#{id}/context" "/api/v1/statuses/#{id}/context"
|> process_url(conn) |> process_url(conn)
|> request!(:context, :get, [], get_headers(conn)) |> request!(:context, :get, [], conn)
end end
def card_by_status(conn, id) do def card_by_status(conn, id) do
"/api/v1/statuses/#{id}/card" "/api/v1/statuses/#{id}/card"
|> process_url(conn) |> process_url(conn)
|> request!(:card, :get, [], get_headers(conn)) |> request!(:card, :get, [], conn)
end end
def log_in( def log_in(
@ -324,7 +322,7 @@ defmodule Hunter.Api.HTTPClient do
def blocked_domains(conn, options) do def blocked_domains(conn, options) do
"/api/v1/domain_blocks" "/api/v1/domain_blocks"
|> process_url(conn) |> process_url(conn)
|> request!(nil, :get, options, get_headers(conn)) |> request!(nil, :get, options, conn)
end end
def block_domain(conn, domain) do def block_domain(conn, domain) do
@ -340,8 +338,10 @@ defmodule Hunter.Api.HTTPClient do
end end
## Helpers ## Helpers
defp request!(url, to, method, payload, headers \\ []) do defp request!(url, to, method, payload, conn \\ nil) do
with {:ok, body} <- Request.request(method, url, payload, headers, @http_options) do headers = get_headers(conn)
with {:ok, body} <- Request.request(method, url, payload, headers, Config.http_options()) do
transform(body, to) transform(body, to)
else else
{:error, reason} -> {:error, reason} ->
@ -349,10 +349,14 @@ defmodule Hunter.Api.HTTPClient do
end end
end end
defp get_headers(nil), do: []
defp get_headers(%Hunter.Client{bearer_token: token}) do defp get_headers(%Hunter.Client{bearer_token: token}) do
[{"Authorization", "Bearer #{token}"}] [{"Authorization", "Bearer #{token}"}]
end end
defp get_headers(headers) when is_list(headers), do: headers
defp process_url(endpoint, %Hunter.Client{base_url: base_url}) do defp process_url(endpoint, %Hunter.Client{base_url: base_url}) do
process_url(endpoint, base_url) process_url(endpoint, base_url)
end end

View File

@ -60,8 +60,8 @@ defmodule Hunter.Application do
id: 1234} id: 1234}
""" """
@spec create_app(String.t(), String.t(), [String.t()], String.t(), Keyword.t()) :: @spec create_app(String.t(), String.t(), [String.t()], nil | String.t(), Keyword.t()) ::
Hunter.Application.t() | no_return Hunter.Application.t()
def create_app( def create_app(
client_name, client_name,
redirect_uris \\ "urn:ietf:wg:oauth:2.0:oob", redirect_uris \\ "urn:ietf:wg:oauth:2.0:oob",

View File

@ -47,7 +47,7 @@ defmodule Hunter.Client do
""" """
@spec log_in(Hunter.Application.t(), String.t(), String.t(), String.t()) :: Hunter.Client.t() @spec log_in(Hunter.Application.t(), String.t(), String.t(), String.t()) :: Hunter.Client.t()
def log_in(app, username, password, base_url \\ nil) do def log_in(app, username, password, base_url \\ "https://mastodon.social") do
base_url = base_url || Config.api_base_url() base_url = base_url || Config.api_base_url()
Config.hunter_api().log_in(app, username, password, base_url) Config.hunter_api().log_in(app, username, password, base_url)
end end

View File

@ -14,4 +14,8 @@ defmodule Hunter.Config do
def home do def home do
Path.expand(System.get_env("HUNTER_HOME") || "~/.hunter") Path.expand(System.get_env("HUNTER_HOME") || "~/.hunter")
end end
def http_options do
Application.get_env(:hunter, :http_options, [])
end
end end