ExScimClient.Request (ex_scim_client v0.2.2)

Copy Markdown View Source

Request builder DSL for composing HTTP requests.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> {:ok, _response} = ExScimClient.Request.new(client)
...> |> ExScimClient.Request.path("/Users")
...> |> ExScimClient.Request.method(:get)
...> |> ExScimClient.Request.run()

Summary

Functions

Sets attributes to include in the response.

Sets basic authentication for the request.

Sets bearer token authentication for the request.

Sets the JSON body for the request.

Sets attributes to exclude from the response.

Adds a filter to the request.

Sets the HTTP method for the request.

Creates a new request from a client configuration.

Adds pagination parameters to the request.

Sets the path for the request.

Executes the built request.

Adds sorting parameters to the request.

Types

t()

@type t() :: keyword()

Functions

attributes(req, attribute_list)

@spec attributes(t(), [String.t()]) :: t()

Sets attributes to include in the response.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.attributes(["userName", "emails"])
iex> scim_params = Keyword.get(request, :scim_params, %{})
iex> Map.get(scim_params, :attributes)
["userName", "emails"]

basic(req, username, password)

@spec basic(t(), String.t(), String.t()) :: t()

Sets basic authentication for the request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.basic("user", "pass")
iex> headers = Keyword.get(request, :headers)
iex> Enum.any?(headers, fn {key, value} -> key == "authorization" and String.starts_with?(value, "Basic ") end)
true

bearer(req, token)

@spec bearer(t(), String.t()) :: t()

Sets bearer token authentication for the request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.bearer("new_token")
iex> headers = Keyword.get(request, :headers)
iex> Enum.any?(headers, fn {key, value} -> key == "authorization" and String.starts_with?(value, "Bearer new_token") end)
true

body(req, json)

@spec body(t(), map()) :: t()

Sets the JSON body for the request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> user_data = %{"userName" => "jdoe", "active" => true}
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.body(user_data)
iex> Keyword.get(request, :json)
%{"userName" => "jdoe", "active" => true}

excluded_attributes(req, attribute_list)

@spec excluded_attributes(t(), [String.t()]) :: t()

Sets attributes to exclude from the response.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.excluded_attributes(["meta", "groups"])
iex> scim_params = Keyword.get(request, :scim_params, %{})
iex> Map.get(scim_params, :excluded_attributes)
["meta", "groups"]

filter(req, filter_struct)

@spec filter(t(), ExScimClient.Filter.t() | String.t()) :: t()

Adds a filter to the request.

Accepts either a Filter struct or a filter string.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> filter_struct = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("active", "true")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.filter(filter_struct)
iex> scim_params = Keyword.get(request, :scim_params, %{})
iex> Map.get(scim_params, :filter)
"active eq true"

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.filter("userName eq jdoe")
iex> scim_params = Keyword.get(request, :scim_params, %{})
iex> Map.get(scim_params, :filter)
"userName eq jdoe"

method(req, verb)

@spec method(t(), atom()) :: t()

Sets the HTTP method for the request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.method(:post)
iex> Keyword.get(request, :method)
:post

new(client)

@spec new(ExScimClient.Client.t()) :: t()

Creates a new request from a client configuration.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client)
iex> is_list(request)
true

paginate(req, pagination_struct)

@spec paginate(t(), ExScimClient.Pagination.t()) :: t()

Adds pagination parameters to the request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> pagination = ExScimClient.Pagination.new(1, 50)
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.paginate(pagination)
iex> scim_params = Keyword.get(request, :scim_params, %{})
iex> {Map.get(scim_params, :start_index), Map.get(scim_params, :count)}
{1, 50}

path(req, endpoint)

@spec path(t(), String.t()) :: t()

Sets the path for the request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.path("/Users")
iex> Keyword.get(request, :url)
"https://example.com/scim/v2/Users"

run(req)

@spec run(t()) :: {:ok, map()} | {:error, term()}

Executes the built request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> {:ok, _response} = ExScimClient.Request.new(client)
...> |> ExScimClient.Request.path("/Users")
...> |> ExScimClient.Request.method(:get)
...> |> ExScimClient.Request.run()

sort_by(req, sorting_struct)

@spec sort_by(t(), ExScimClient.Sorting.t()) :: t()

Adds sorting parameters to the request.

Examples

iex> client = ExScimClient.Client.new("https://example.com/scim/v2", "token")
iex> sorting = ExScimClient.Sorting.new("userName", :desc)
iex> request = ExScimClient.Request.new(client) |> ExScimClient.Request.sort_by(sorting)
iex> scim_params = Keyword.get(request, :scim_params, %{})
iex> {Map.get(scim_params, :sort_by), Map.get(scim_params, :sort_order)}
{"userName", :desc}