ExScimClient.Filter (ex_scim_client v0.2.2)

Copy Markdown View Source

DSL for building filter expressions.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("userName", "jdoe")
iex> ExScimClient.Filter.build(filter)
~S|userName eq "jdoe"|

iex> filter1 = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("active", "true")
iex> filter2 = ExScimClient.Filter.new() |> ExScimClient.Filter.starts_with("userName", "j")
iex> combined = ExScimClient.Filter.and1(filter1, filter2)
iex> ExScimClient.Filter.build(combined)
~S|(active eq "true") and (userName sw "j")|

Summary

Functions

Combines two filters with an AND operator.

Builds the filter string from the filter struct.

Adds a contains comparison to the filter.

Adds an ends-with comparison to the filter.

Adds an equals comparison to the filter.

Adds a greater-than-or-equal comparison to the filter.

Adds a greater-than comparison to the filter.

Adds a less-than-or-equal comparison to the filter.

Adds a less-than comparison to the filter.

Creates a new empty filter.

Combines two filters with a NOT operator.

Adds a not-equal comparison to the filter.

Combines two filters with an OR operator.

Adds a present comparison to the filter.

Adds a starts-with comparison to the filter.

Types

t()

@type t() :: %ExScimClient.Filter{expr: term() | nil}

Functions

and1(filter1, filter2)

@spec and1(%ExScimClient.Filter{expr: term()}, %ExScimClient.Filter{expr: term()}) ::
  %ExScimClient.Filter{expr: term()}

Combines two filters with an AND operator.

Examples

iex> filter1 = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("active", "true")
iex> filter2 = ExScimClient.Filter.new() |> ExScimClient.Filter.starts_with("userName", "admin")
iex> combined = ExScimClient.Filter.and1(filter1, filter2)
iex> ExScimClient.Filter.build(combined)
~S|(active eq "true") and (userName sw "admin")|

build(filter)

@spec build(%ExScimClient.Filter{expr: term()}) :: String.t()

Builds the filter string from the filter struct.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("active", "true")
iex> ExScimClient.Filter.build(filter)
~S|active eq "true"|

contains(filter, attribute, value)

@spec contains(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds a contains comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.contains("emails.value", "example")
iex> ExScimClient.Filter.build(filter)
~S|emails.value co "example"|

ends_with(filter, attribute, value)

@spec ends_with(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds an ends-with comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.ends_with("emails.value", "example.com")
iex> ExScimClient.Filter.build(filter)
~S|emails.value ew "example.com"|

equals(filter, attribute, value)

@spec equals(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds an equals comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("active", "true")
iex> ExScimClient.Filter.build(filter)
~S|active eq "true"|

greater_or_equal(filter, attribute, value)

@spec greater_or_equal(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{expr: term()}

Adds a greater-than-or-equal comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.greater_or_equal("meta.version", "2")
iex> ExScimClient.Filter.build(filter)
~S|meta.version ge "2"|

greater_than(filter, attribute, value)

@spec greater_than(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds a greater-than comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.greater_than("meta.lastModified", "2023-01-01T00:00:00Z")
iex> ExScimClient.Filter.build(filter)
~S|meta.lastModified gt "2023-01-01T00:00:00Z"|

less_or_equal(filter, attribute, value)

@spec less_or_equal(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds a less-than-or-equal comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.less_or_equal("meta.version", "10")
iex> ExScimClient.Filter.build(filter)
~S|meta.version le "10"|

less_than(filter, attribute, value)

@spec less_than(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds a less-than comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.less_than("meta.version", "5")
iex> ExScimClient.Filter.build(filter)
~S|meta.version lt "5"|

new()

@spec new() :: %ExScimClient.Filter{expr: term()}

Creates a new empty filter.

Examples

iex> %ExScimClient.Filter{expr: nil} = ExScimClient.Filter.new()

not1(filter1, filter2)

@spec not1(%ExScimClient.Filter{expr: term()}, %ExScimClient.Filter{expr: term()}) ::
  %ExScimClient.Filter{expr: term()}

Combines two filters with a NOT operator.

Examples

iex> filter1 = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("active", "true")
iex> filter2 = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("userType", "Employee")
iex> combined = ExScimClient.Filter.not1(filter1, filter2)
iex> ExScimClient.Filter.build(combined)
~S|(active eq "true") not (userType eq "Employee")|

not_equal(filter, attribute, value)

@spec not_equal(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds a not-equal comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.not_equal("active", "false")
iex> ExScimClient.Filter.build(filter)
~S|active ne "false"|

or1(filter1, filter2)

@spec or1(%ExScimClient.Filter{expr: term()}, %ExScimClient.Filter{expr: term()}) ::
  %ExScimClient.Filter{expr: term()}

Combines two filters with an OR operator.

Examples

iex> filter1 = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("userType", "Employee")
iex> filter2 = ExScimClient.Filter.new() |> ExScimClient.Filter.equals("userType", "Contractor")
iex> combined = ExScimClient.Filter.or1(filter1, filter2)
iex> ExScimClient.Filter.build(combined)
~S|(userType eq "Employee") or (userType eq "Contractor")|

present(filter, attribute, value)

@spec present(%ExScimClient.Filter{expr: term()}, String.t(), any()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds a present comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.present("emails", nil)
iex> ExScimClient.Filter.build(filter)
"emails pr"

starts_with(filter, attribute, value)

@spec starts_with(%ExScimClient.Filter{expr: term()}, String.t(), String.t()) ::
  %ExScimClient.Filter{
    expr: term()
  }

Adds a starts-with comparison to the filter.

Examples

iex> filter = ExScimClient.Filter.new() |> ExScimClient.Filter.starts_with("userName", "admin")
iex> ExScimClient.Filter.build(filter)
~S|userName sw "admin"|