elixir.connection.ex.mustache Maven / Gradle / Ivy
{{>licenseInfo}}
defmodule {{moduleName}}.Connection do
@moduledoc """
Handle Tesla connections for {{moduleName}}.
"""
use Tesla
# Add any middleware here (authentication)
plug Tesla.Middleware.BaseUrl, "{{{basePath}}}"
plug Tesla.Middleware.Headers, [{"user-agent", "Elixir"}]
plug Tesla.Middleware.EncodeJson, engine: Poison
{{#hasAuthMethods}}
{{#authMethods}}
{{#isOAuth}}
@scopes [
{{#scopes}}
"{{scope}}"{{^-last}},{{/-last}} {{#description}}# {{description}}{{/description}}
{{/scopes}}
]
@doc """
Configure a client connection using a provided OAuth2 token as a Bearer token
## Parameters
- token (String): Bearer token
## Returns
Tesla.Env.client
"""
@spec new(String.t) :: Tesla.Env.client
def new(token) when is_binary(token) do
Tesla.client([
{Tesla.Middleware.Headers, [{"authorization", "Bearer #{token}"}]}
])
end
@doc """
Configure a client connection using a function which yields a Bearer token.
## Parameters
- token_fetcher (function arity of 1): Callback which provides an OAuth2 token
given a list of scopes
## Returns
Tesla.Env.client
"""
@spec new(((list(String.t)) -> String.t)) :: Tesla.Env.client
def new(token_fetcher) when is_function(token_fetcher) do
token_fetcher.(@scopes)
|> new
end
{{/isOAuth}}
{{#isBasic}}
@doc """
Configure a client connection using Basic authentication.
## Parameters
- username (String): Username used for authentication
- password (String): Password used for authentication
# Returns
Tesla.Env.client
"""
@spec new(String.t, String.t) :: Tesla.Env.client
def new(username, password) do
Tesla.client([
{Tesla.Middleware.BasicAuth, %{username: username, password: password}}
])
end
{{/isBasic}}
{{/authMethods}}
{{/hasAuthMethods}}
@doc """
Configure an authless client connection
# Returns
Tesla.Env.client
"""
@spec new() :: Tesla.Env.client
def new do
Tesla.client([])
end
end