Reactor.Req

View Source

An extension which provides direct support for working with req requests within Reactor.

reactor.req_delete

req_delete name

Performs a request using Req.delete/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_delete.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_delete.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_delete.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Delete

reactor.req_get

req_get name

Performs a request using Req.get/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_get.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_get.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_get.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Get

reactor.req_head

req_head name

Performs a request using Req.head/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_head.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_head.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_head.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Head

reactor.req_merge

req_merge name

Creates a new request using Req.merge/2

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_merge.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_merge.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_merge.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Merge

reactor.req_new

req_new name

Creates a new request using Req.new/1

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_new.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_new.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_new.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.New

reactor.req_patch

req_patch name

Performs a request using Req.patch/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_patch.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_patch.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_patch.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Patch

reactor.req_post

req_post name

Performs a request using Req.post/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_post.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_post.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_post.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Post

reactor.req_put

req_put name

Performs a request using Req.put/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_put.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_put.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_put.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Put

reactor.req_request

req_request name

Performs a request using Req.request/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_request.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_request.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_request.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Request

reactor.req_run

req_run name

Performs a request using Req.run/2.

Note that Reactor doesn't validate any options - it simply passes them to the underlying Req function and assumes it will validate them.

Nested DSLs

Arguments

NameTypeDefaultDocs
nameatomA unique name for the step. Used when choosing the return value of the Reactor and for arguments into other steps

Options

NameTypeDefaultDocs
adapternil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueAdapter to use to make the actual HTTP request
authnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSets request authentication
aws_sigv4nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the AWS options to sign request
base_urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, the request URL is prepended with this base URL
bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request body
cache_dirnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe directory to store the cache
cachenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf true, performs HTTP caching
compress_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, compresses the request body using gzip
connect_optionsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueDynamically starts (or re-uses already started) Finch pool with the given connection options
decode_bodynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response body decoding
decode_jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOptions to pass to Jason.decode!/2
finch_privatenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA map or keyword list of private metadata to add to the Finch request
finch_requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA function that executes the Finch request, defaults to using Finch.request/3
finchnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe Finch pool to use. Defaults to pool automatically started by Req
form_multipartnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as multipart/form-data
formnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as application/x-www-form-urlencoded
headersnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request headers as a {key, value} enumerable (e.g. map, keyword list)
http_errorsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow to manage 4xx and 5xx responses
inet6nil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, uses IPv6
intonil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueWhere to send the response body
jsonnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, encodes the request body as JSON
max_redirectsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe maximum number of redirects, defaults to 10
max_retriesnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueMaximum number of retry attempts, defaults to 3 (for a total of 4 requests to the server, including the initial one)
methodnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request method, defaults to :get
paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, appends parameters to the request query string (via put_params step)
path_params_stylenil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueHow path params are expressed (via put_path_params step)
path_paramsnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, uses a templated request path (via put_path_params step)
plugnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, calls the given plug instead of making an HTTP request over the network (via run_plug step)
pool_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValuePool checkout timeout in milliseconds, defaults to 5000
rawnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to true, disables automatic body decompression (decompress_body step) and decoding (decode_body step)
receive_timeoutnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueSocket receive timeout in milliseconds, defaults to 15_000
redirect_trustednil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueBy default, authorization credentials are only sent on redirects with the same host, scheme and port. If :redirect_trusted is set to true, credentials will be sent to any host
redirectnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set to false, disables automatic response redirects
requestnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueA previously built request
retry_delaynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf not set, which is the default, the retry delay is determined by the value of retry-delay header on HTTP 429/503 responses. If the header is not set, the default delay follows a simple exponential backoff: 1s, 2s, 4s, 8s, ...
retry_log_levelnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe log level to emit retry logs at. Can also be set to false to disable logging these messages. Defaults to :warning
retrynil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueOne of :safe_transient (default), :transient, fun or false
unix_socketnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueIf set, connect through the given UNIX domain socket
urlnil | Reactor.Template.Element | Reactor.Template.Input | Reactor.Template.Result | Reactor.Template.ValueThe request URL

reactor.req_run.wait_for

wait_for names

Wait for the named step to complete before allowing this one to start.

Desugars to argument :_, result(step_to_wait_for)

Examples

wait_for :create_user

Arguments

NameTypeDefaultDocs
namesatom | list(atom)The name of the step to wait for.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description.

Introspection

Target: Reactor.Dsl.WaitFor

reactor.req_run.guard

guard fun

Provides a flexible method for conditionally executing a step, or replacing it's result.

Expects a two arity function which takes the step's arguments and context and returns one of the following:

  • :cont - the guard has passed.
  • {:halt, result} - the guard has failed - instead of executing the step use the provided result.

Examples

step :read_file_via_cache do
  argument :path, input(:path)
  run &File.read(&1.path)
  guard fn %{path: path}, %{cache: cache} ->
    case Cache.get(cache, path) do
      {:ok, content} -> {:halt, {:ok, content}}
      _ -> :cont
    end
  end
end

Arguments

NameTypeDefaultDocs
fun(any, any -> any) | mfaThe guard function.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Guard

reactor.req_run.where

where predicate

Only execute the surrounding step if the predicate function returns true.

This is a simple version of guard which provides more flexibility at the cost of complexity.

Examples

step :read_file do
  argument :path, input(:path)
  run &File.read(&1.path)
  where &File.exists?(&1.path)
end

Arguments

NameTypeDefaultDocs
predicate(any -> any) | mfa | (any, any -> any) | mfaProvide a function which takes the step arguments and optionally the context and returns a boolean value.

Options

NameTypeDefaultDocs
descriptionString.tAn optional description of the guard.

Introspection

Target: Reactor.Dsl.Where

Introspection

Target: Reactor.Req.Dsl.Run