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
@type t() :: keyword()
Functions
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"]
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
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
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}
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"]
@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"
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
@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
@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}
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"
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()
@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}