Current section
Files
Jump to
Current section
Files
lib/sticky/request.ex
defmodule Sticky.Request do
alias Sticky.{API, Request}
defstruct opts: [],
endpoint: nil,
method: nil,
params: nil,
version: "v1",
client: nil,
validator: nil
def new(opts \\ []) do
%Request{opts: opts, client: build_client()}
end
def put_endpoint(%Request{} = request, endpoint) do
%{request | endpoint: endpoint}
end
def put_method(%Request{} = request, method) do
%{request | method: method}
end
def put_params(%Request{} = request, params) do
%{request | params: params}
end
def validate_with(%Request{} = request, validator) do
%{request | validator: validator}
end
def make_request(%Request{} = req) do
API.request(req)
end
defp build_client() do
client(
Application.get_env(:sticky, :api_key),
Application.get_env(:sticky, :api_url)
)
end
defp client(api_key, api_url) do
adapter =
case Sticky.Config.send_to_http() do
true ->
{Tesla.Adapter.Hackney, [recv_timeout: 30_000]}
false ->
Tesla.Mock
end
client(api_key, api_url, adapter)
end
defp client({api_key, api_secret}, api_url, adapter) do
middleware = [
{Tesla.Middleware.BaseUrl, api_url},
Tesla.Middleware.JSON,
{Tesla.Middleware.BasicAuth, %{username: api_key, password: api_secret}}
]
Tesla.client(middleware, adapter)
end
end