Current section

Files

Jump to
exkeycdn lib zone_referrer.ex
Raw

lib/zone_referrer.ex

defmodule ExKeyCDN.ZoneReferrer do
@moduledoc """
Client api for https://www.ExKeyCDN.com/api#zones-referrers-api
"""
defstruct id: nil,
zone_id: 1,
name: "hostname max 128"
@behaviour ExKeyCDN.ZoneReferrerBehaviour
@path "zonereferrers"
alias ExKeyCDN.Util
@spec list ::
[
{:limits, [{:rate_limit_remaining, binary()}, {:rate_limit, binary}]},
{:zone_referrers, list(ExKeyCDN.ZoneReferrer)}
]
| {:error, binary | ExKeyCDN.ErrorResponse.t()}
@doc """
List Zone Referrers
"""
@impl ExKeyCDN.ZoneReferrerBehaviour
def list do
with {:ok, result, headers} <- Util.http().request(:get, "#{@path}.json", %{}),
{true, result} <- Util.successfull?(result),
zone_referrers <- Util.map_to_struct(result["data"], ExKeyCDN.ZoneReferrer, @path),
limits <- Util.get_limits(headers) do
[zone_referrers: zone_referrers, limits: limits]
else
{:error, message} -> {:error, message}
{false, message} -> {:error, message}
end
end
@spec add(ExKeyCDN.ZoneReferrer) ::
[
{:limits, [{:rate_limit_remaining, binary()}, {:rate_limit, binary}]},
{:zone_referrer, ExKeyCDN.ZoneReferrer}
]
| {:error, binary | ExKeyCDN.ErrorResponse.t()}
@doc """
Add
"""
@impl ExKeyCDN.ZoneReferrerBehaviour
def add(zone_referrer) do
with {:ok, result, headers} <-
Util.http().request(:post, "#{@path}.json", Map.from_struct(zone_referrer)),
{true, result} <- Util.successfull?(result),
zone_referrer <-
Util.map_to_struct(result["data"], ExKeyCDN.ZoneReferrer, String.slice(@path, 0..-2)),
limits <- Util.get_limits(headers) do
[zone_referrer: zone_referrer, limits: limits]
else
{:error, message} -> {:error, message}
{false, message} -> {:error, message}
end
end
@spec edit(integer(), map()) ::
[
{:limits, [{:rate_limit_remaining, binary()}, {:rate_limit, binary}]},
{:zone_referrer, ExKeyCDN.ZoneReferrer}
]
| {:error, binary | ExKeyCDN.ErrorResponse.t()}
@doc """
Edit
"""
@impl ExKeyCDN.ZoneReferrerBehaviour
def edit(id, params) do
with {:ok, result, headers} <- Util.http().request(:put, "#{@path}/#{id}.json", params),
{true, result} <- Util.successfull?(result),
zone_referrer <-
Util.map_to_struct(result["data"], ExKeyCDN.ZoneReferrer, String.slice(@path, 0..-2)),
limits <- Util.get_limits(headers) do
[zone_referrer: zone_referrer, limits: limits]
else
{:error, message} -> {:error, message}
{false, message} -> {:error, message}
end
end
@spec delete(integer()) ::
[
{:limits, [{:rate_limit_remaining, binary()}, {:rate_limit, binary}]},
{:zone_referrer, :deleted}
]
| {:error, binary | ExKeyCDN.ErrorResponse.t()}
@doc """
Delete
"""
@impl ExKeyCDN.ZoneReferrerBehaviour
def delete(id) do
with {:ok, result, headers} <- Util.http().request(:delete, "#{@path}/#{id}.json", %{}),
{true, _result} <- Util.successfull?(result),
limits <- Util.get_limits(headers) do
[zone_referrer: :deleted, limits: limits]
else
{:error, message} -> {:error, message}
{false, message} -> {:error, message}
end
end
end