+ + + + + + View Source + + + Lightning.Projects.ProjectOverviewRow + (Lightning v2.9.11) + +
+ + +Represents a summarized view of a project for a user, used in the project overview table.
+From 9a35634e114c8dab4fdb30ccb7e6c6650d68c68b Mon Sep 17 00:00:00 2001
From: stuartc Registry process to query and maintain a list of adaptors available for
writing jobs. Currently it queries NPM for all modules in the Usage Caching By default the results are cached to disk, and will be reused every start. In order to disable or configure caching pass see: The process uses Caching By default the results are cached to disk, and will be reused every start. In order to disable or configure caching pass see: The process uses Timeouts There is a 'general' timeout of 30s, this is used for GenServer calls like
Destructures an NPM style package name into module name and version. Example Destructures an NPM style package name into module name and version. Example Queries the AI assistant with the given content. Returns Example Queries the AI assistant with the given content. Returns Example Perform a DELETE request. See Perform a DELETE request. See Perform a DELETE request. See Perform a DELETE request. See Perform a GET request. See Perform a GET request. See Perform a GET request. See Perform a GET request. See Perform a HEAD request. See Perform a HEAD request. See Perform a HEAD request. See Perform a HEAD request. See Perform a OPTIONS request. See Perform a OPTIONS request. See Perform a OPTIONS request. See Perform a OPTIONS request. See Perform a PATCH request. See Perform a PATCH request. See Perform a PATCH request. See Perform a PATCH request. See Perform a POST request. See Perform a POST request. See Perform a POST request. See Perform a POST request. See Perform a PUT request. See Perform a PUT request. See Perform a PUT request. See Perform a PUT request. See Perform a TRACE request. See Perform a TRACE request. See Perform a TRACE request. See Perform a TRACE request. See The OpenFn CLI returns JSON formatted log lines, which are decoded and added
-to a There are two kinds of output: These are usually for general logging, and debugging. The above is the equivalent of the output of a commandapply_user_email(user, password, attrs)
Examples
-
+iex> apply_user_email(user, "valid password", %{email: ...})
-{:ok, %User{}}role: :superuser
-iex> apply_user_email(user, "invalid password", %{email: ...})
-{:error, %Ecto.Changeset{}}
iex> apply_user_email(user, "valid password", %{email: ...})
+{:ok, %User{}}role: :superuser
+iex> apply_user_email(user, "invalid password", %{email: ...})
+{:error, %Ecto.Changeset{}}
change_scheduled_deletion(user, attrs \\ %{
Examples
-
+iex> change_scheduled_deletion(user)
-%Ecto.Changeset{data: %User{}}
iex> change_scheduled_deletion(user)
+%Ecto.Changeset{data: %User{}}
change_superuser_registration(attrs \\ %{})
Examples
-
+iex> change_superuser_registration(user)
-%Ecto.Changeset{data: %User{}}
iex> change_superuser_registration(user)
+%Ecto.Changeset{data: %User{}}
change_user_email(user, attrs \\ %{})
Examples
-
+iex> change_user_email(user)
-%Ecto.Changeset{data: %User{}}
iex> change_user_email(user)
+%Ecto.Changeset{data: %User{}}
change_user_password(user, attrs \\ %{})
Examples
-
+iex> change_user_password(user)
-%Ecto.Changeset{data: %User{}}
iex> change_user_password(user)
+%Ecto.Changeset{data: %User{}}
change_user_registration(attrs \\ %{})
Examples
-
+iex> change_user_registration(user)
-%Ecto.Changeset{data: %User{}}
iex> change_user_registration(user)
+%Ecto.Changeset{data: %User{}}
delete_token(token)
Examples
-iex> delete_token(token)
-{:ok, %UserToken{}}
+
+iex> delete_token(token)
+{:error, %Ecto.Changeset{}}iex> delete_token(token)
+{:ok, %UserToken{}}
-iex> delete_token(token)
-{:error, %Ecto.Changeset{}}
delete_user(user)
Examples
-iex> delete_user(user)
-{:ok, %User{}}
+
+iex> delete_user(user)
+{:error, %Ecto.Changeset{}}iex> delete_user(user)
+{:ok, %User{}}
-iex> delete_user(user)
-{:error, %Ecto.Changeset{}}
deliver_user_confirmation_instructions(user
Examples
-
iex> deliver_user_confirmation_instructions(user)
-{:ok, %{to: ..., body: ...}}
+
+iex> deliver_user_confirmation_instructions(confirmed_user)
+{:error, :already_confirmed}iex> deliver_user_confirmation_instructions(user)
+{:ok, %{to: ..., body: ...}}
-iex> deliver_user_confirmation_instructions(confirmed_user)
-{:error, :already_confirmed}
deliver_user_reset_password_instructions(us
Examples
-
+iex> deliver_user_reset_password_instructions(user, &Routes.user_reset_password_url(conn, :edit, &1))
-{:ok, %{to: ..., body: ...}}
iex> deliver_user_reset_password_instructions(user, &Routes.user_reset_password_url(conn, :edit, &1))
+{:ok, %{to: ..., body: ...}}
get_preference(user, key)
Examples
-iex> get_preference(user, "editor.orientation")
+
iex> get_preference(user, "editor.orientation")
"vertical"
-iex> get_preference(user, "notifications.enabled")
+iex> get_preference(user, "notifications.enabled")
true
get_token!(id)
Examples
-iex> get_token!(123)
-%UserToken{}
+
@@ -1565,10 +1565,10 @@ iex> get_token!(123)
+%UserToken{}
-iex> get_token!(456)
+iex> get_token!(456)
** (Ecto.NoResultsError)
get_user!(id)
Examples
-iex> get_user!(123)
-%User{}
+
@@ -1641,10 +1641,10 @@ iex> get_user!(123)
+%User{}
-iex> get_user!(456)
+iex> get_user!(456)
** (Ecto.NoResultsError)
get_user_by_email(email)
Examples
-iex> get_user_by_email("foo@example.com")
-%User{}
+
@@ -1673,10 +1673,10 @@ iex> get_user_by_email("foo@example.com")
+%User{}
-iex> get_user_by_email("unknown@example.com")
+iex> get_user_by_email("unknown@example.com")
nil
get_user_by_email_and_password(email, passw
Examples
-
iex> get_user_by_email_and_password("foo@example.com", "correct_password")
-%User{}
+
@@ -1705,10 +1705,10 @@ iex> get_user_by_email_and_password("foo@example.com", "correct_password")
+%User{}
-iex> get_user_by_email_and_password("foo@example.com", "invalid_password")
+iex> get_user_by_email_and_password("foo@example.com", "invalid_password")
nil
get_user_by_reset_password_token(token)
Examples
-iex> get_user_by_reset_password_token("validtoken")
-%User{}
+
@@ -1905,8 +1905,8 @@ iex> get_user_by_reset_password_token("validtoken")
+%User{}
-iex> get_user_by_reset_password_token("invalidtoken")
+iex> get_user_by_reset_password_token("invalidtoken")
nil
list_users()
Examples
-
+iex> list_users()
-[%User{}, ...]
iex> list_users()
+[%User{}, ...]
register_superuser(attrs)
Examples
-iex> register_superuser(%{field: value})
-{:ok, %User{}}
+
+iex> register_superuser(%{field: bad_value})
+{:error, %Ecto.Changeset{}}iex> register_superuser(%{field: value})
+{:ok, %User{}}
-iex> register_superuser(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
register_user(attrs)
Examples
-iex> register_user(%{field: value})
-{:ok, %User{}}
+
+iex> register_user(%{field: bad_value})
+{:error, %Ecto.Changeset{}}iex> register_user(%{field: value})
+{:ok, %User{}}
-iex> register_user(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
request_email_update(user, new_email)
Examples
-iex> request_email_update(user, new_email)
+
iex> request_email_update(user, new_email)
:ok
reset_user_password(user, attrs)
Examples
-iex> reset_user_password(user, %{password: "new long password", password_confirmation: "new long password"})
-{:ok, %User{}}
+
+iex> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"})
+{:error, %Ecto.Changeset{}}iex> reset_user_password(user, %{password: "new long password", password_confirmation: "new long password"})
+{:ok, %User{}}
-iex> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"})
-{:error, %Ecto.Changeset{}}
update_user_password(user, password, attrs)
Examples
-
iex> update_user_password(user, "valid password", %{password: ...})
-{:ok, %User{}}
+
+iex> update_user_password(user, "invalid password", %{password: ...})
+{:error, %Ecto.Changeset{}}iex> update_user_password(user, "valid password", %{password: ...})
+{:ok, %User{}}
-iex> update_user_password(user, "invalid password", %{password: ...})
-{:error, %Ecto.Changeset{}}
update_user_preference(user, key, value)
Examples
-
iex> update_user_preference(user, "editor.orientation", "vertical")
-{:ok, %User{}}
+
+iex> update_user_preference(user, "notifications.enabled", true)
+{:ok, %User{}}iex> update_user_preference(user, "editor.orientation", "vertical")
+{:ok, %User{}}
-iex> update_user_preference(user, "notifications.enabled", true)
-{:ok, %User{}}
update_user_preferences(user, preferences)<
Examples
-
+iex> update_user_preferences(%User{}, %{"editor.orientaion" => "vertical"})
iex> update_user_preferences(%User{}, %{"editor.orientaion" => "vertical"})
validate_change_user_email(user, params \\
Examples
-
+iex> validate_change_user_email(user, %{"email" => "new@example.com", "current_password" => "secret"})
-%Ecto.Changeset{...}
iex> validate_change_user_email(user, %{"email" => "new@example.com", "current_password" => "secret"})
+%Ecto.Changeset{...}
request(request)
Examples
-request = %HTTPoison.Request{
+
+request(request)request = %HTTPoison.Request{
method: :post,
url: "https://my.website.com",
body: "{\"foo\": 3}",
- headers: [{"Accept", "application/json"}]
-}
+ headers: [{"Accept", "application/json"}]
+}
-request(request)
request(method, url, body \\ "",
Examples
-
+request(:post, "https://my.website.com", "{\"foo\": 3}", [{"Accept", "application/json"}])
request(:post, "https://my.website.com", "{\"foo\": 3}", [{"Accept", "application/json"}])
@openfn
organization and
filters out modules that are known not to be adaptors.# Starting the process
-AdaptorRegistry.start_link()
+AdaptorRegistry.start_link()
# Getting a list of all adaptors
-Lightning.AdaptorRegistry.AdaptorRegistry.all()
start_link/1
.:continue
to return before the adaptors have been queried.
+start_link/1
.:continue
to return before the adaptors have been queried.
This does mean that the first call to the process will be delayed until
the handle_continue/2
has finished.all/1
and also internally when the modules are being queried. NPM can
@@ -432,10 +432,10 @@ resolve_package_name(package_name)
-
+iex> resolve_package_name("@openfn/language-salesforce@1.2.3")
-{ "@openfn/language-salesforce", "1.2.3" }
-iex> resolve_package_name("@openfn/language-salesforce")
-{ "@openfn/language-salesforce", nil }
iex> resolve_package_name("@openfn/language-salesforce@1.2.3")
+{ "@openfn/language-salesforce", "1.2.3" }
+iex> resolve_package_name("@openfn/language-salesforce")
+{ "@openfn/language-salesforce", nil }
query(session, content)
-{:ok, session}
if the query was successful, otherwise :error
.
+iex> AiAssistant.query(session, "fn()")
-{:ok, session}
{:ok, session}
if the query was successful, otherwise :error
.iex> AiAssistant.query(session, "fn()")
+{:ok, session}
delete(client, url, opts)
-request/1
or request/2
for options definition.
+delete("/users")
-delete("/users", query: [scope: "admin"])
-delete(client, "/users")
-delete(client, "/users", query: [scope: "admin"])
-delete(client, "/users", body: %{name: "Jon"})
request/1
or request/2
for options definition.delete("/users")
+delete("/users", query: [scope: "admin"])
+delete(client, "/users")
+delete(client, "/users", query: [scope: "admin"])
+delete(client, "/users", body: %{name: "Jon"})
delete!(client, url, opts)
-request!/1
or request!/2
for options definition.
+delete!("/users")
-delete!("/users", query: [scope: "admin"])
-delete!(client, "/users")
-delete!(client, "/users", query: [scope: "admin"])
-delete!(client, "/users", body: %{name: "Jon"})
request!/1
or request!/2
for options definition.delete!("/users")
+delete!("/users", query: [scope: "admin"])
+delete!(client, "/users")
+delete!(client, "/users", query: [scope: "admin"])
+delete!(client, "/users", body: %{name: "Jon"})
get(client, url, opts)
-request/1
or request/2
for options definition.
+get("/users")
-get("/users", query: [scope: "admin"])
-get(client, "/users")
-get(client, "/users", query: [scope: "admin"])
-get(client, "/users", body: %{name: "Jon"})
request/1
or request/2
for options definition.get("/users")
+get("/users", query: [scope: "admin"])
+get(client, "/users")
+get(client, "/users", query: [scope: "admin"])
+get(client, "/users", body: %{name: "Jon"})
get!(client, url, opts)
-request!/1
or request!/2
for options definition.
+get!("/users")
-get!("/users", query: [scope: "admin"])
-get!(client, "/users")
-get!(client, "/users", query: [scope: "admin"])
-get!(client, "/users", body: %{name: "Jon"})
request!/1
or request!/2
for options definition.get!("/users")
+get!("/users", query: [scope: "admin"])
+get!(client, "/users")
+get!(client, "/users", query: [scope: "admin"])
+get!(client, "/users", body: %{name: "Jon"})
head(client, url, opts)
-request/1
or request/2
for options definition.
+head("/users")
-head("/users", query: [scope: "admin"])
-head(client, "/users")
-head(client, "/users", query: [scope: "admin"])
-head(client, "/users", body: %{name: "Jon"})
request/1
or request/2
for options definition.head("/users")
+head("/users", query: [scope: "admin"])
+head(client, "/users")
+head(client, "/users", query: [scope: "admin"])
+head(client, "/users", body: %{name: "Jon"})
head!(client, url, opts)
-request!/1
or request!/2
for options definition.
+head!("/users")
-head!("/users", query: [scope: "admin"])
-head!(client, "/users")
-head!(client, "/users", query: [scope: "admin"])
-head!(client, "/users", body: %{name: "Jon"})
request!/1
or request!/2
for options definition.head!("/users")
+head!("/users", query: [scope: "admin"])
+head!(client, "/users")
+head!(client, "/users", query: [scope: "admin"])
+head!(client, "/users", body: %{name: "Jon"})
options(client, url, opts)
-request/1
or request/2
for options definition.
+options("/users")
-options("/users", query: [scope: "admin"])
-options(client, "/users")
-options(client, "/users", query: [scope: "admin"])
-options(client, "/users", body: %{name: "Jon"})
request/1
or request/2
for options definition.options("/users")
+options("/users", query: [scope: "admin"])
+options(client, "/users")
+options(client, "/users", query: [scope: "admin"])
+options(client, "/users", body: %{name: "Jon"})
options!(client, url, opts)
-request!/1
or request!/2
for options definition.
+options!("/users")
-options!("/users", query: [scope: "admin"])
-options!(client, "/users")
-options!(client, "/users", query: [scope: "admin"])
-options!(client, "/users", body: %{name: "Jon"})
request!/1
or request!/2
for options definition.options!("/users")
+options!("/users", query: [scope: "admin"])
+options!(client, "/users")
+options!(client, "/users", query: [scope: "admin"])
+options!(client, "/users", body: %{name: "Jon"})
patch(client, url, body, opts)
-request/1
or request/2
for options definition.
+patch("/users", %{name: "Jon"})
-patch("/users", %{name: "Jon"}, query: [scope: "admin"])
-patch(client, "/users", %{name: "Jon"})
-patch(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
request/1
or request/2
for options definition.patch("/users", %{name: "Jon"})
+patch("/users", %{name: "Jon"}, query: [scope: "admin"])
+patch(client, "/users", %{name: "Jon"})
+patch(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
patch!(client, url, body, opts)
-request!/1
or request!/2
for options definition.
+patch!("/users", %{name: "Jon"})
-patch!("/users", %{name: "Jon"}, query: [scope: "admin"])
-patch!(client, "/users", %{name: "Jon"})
-patch!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
request!/1
or request!/2
for options definition.patch!("/users", %{name: "Jon"})
+patch!("/users", %{name: "Jon"}, query: [scope: "admin"])
+patch!(client, "/users", %{name: "Jon"})
+patch!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
post(client, url, body, opts)
-request/1
or request/2
for options definition.
+post("/users", %{name: "Jon"})
-post("/users", %{name: "Jon"}, query: [scope: "admin"])
-post(client, "/users", %{name: "Jon"})
-post(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
request/1
or request/2
for options definition.post("/users", %{name: "Jon"})
+post("/users", %{name: "Jon"}, query: [scope: "admin"])
+post(client, "/users", %{name: "Jon"})
+post(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
post!(client, url, body, opts)
-request!/1
or request!/2
for options definition.
+post!("/users", %{name: "Jon"})
-post!("/users", %{name: "Jon"}, query: [scope: "admin"])
-post!(client, "/users", %{name: "Jon"})
-post!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
request!/1
or request!/2
for options definition.post!("/users", %{name: "Jon"})
+post!("/users", %{name: "Jon"}, query: [scope: "admin"])
+post!(client, "/users", %{name: "Jon"})
+post!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
put(client, url, body, opts)
-request/1
or request/2
for options definition.
+put("/users", %{name: "Jon"})
-put("/users", %{name: "Jon"}, query: [scope: "admin"])
-put(client, "/users", %{name: "Jon"})
-put(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
request/1
or request/2
for options definition.put("/users", %{name: "Jon"})
+put("/users", %{name: "Jon"}, query: [scope: "admin"])
+put(client, "/users", %{name: "Jon"})
+put(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
put!(client, url, body, opts)
-request!/1
or request!/2
for options definition.
+put!("/users", %{name: "Jon"})
-put!("/users", %{name: "Jon"}, query: [scope: "admin"])
-put!(client, "/users", %{name: "Jon"})
-put!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
request!/1
or request!/2
for options definition.put!("/users", %{name: "Jon"})
+put!("/users", %{name: "Jon"}, query: [scope: "admin"])
+put!(client, "/users", %{name: "Jon"})
+put!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
request(client \\ %Tesla.Client{}, options)
Examples
-
ExampleApi.request(method: :get, url: "/users/path")
+
+ExampleApi.get("/users/1")
+ExampleApi.post(client, "/users", %{name: "Jon"})ExampleApi.request(method: :get, url: "/users/path")
# use shortcut methods
-ExampleApi.get("/users/1")
-ExampleApi.post(client, "/users", %{name: "Jon"})
trace(client, url, opts)
-request/1
or request/2
for options definition.
+trace("/users")
-trace("/users", query: [scope: "admin"])
-trace(client, "/users")
-trace(client, "/users", query: [scope: "admin"])
-trace(client, "/users", body: %{name: "Jon"})
request/1
or request/2
for options definition.trace("/users")
+trace("/users", query: [scope: "admin"])
+trace(client, "/users")
+trace(client, "/users", query: [scope: "admin"])
+trace(client, "/users", body: %{name: "Jon"})
trace!(client, url, opts)
-request!/1
or request!/2
for options definition.
+trace!("/users")
-trace!("/users", query: [scope: "admin"])
-trace!(client, "/users")
-trace!(client, "/users", query: [scope: "admin"])
-trace!(client, "/users", body: %{name: "Jon"})
request!/1
or request!/2
for options definition.trace!("/users")
+trace!("/users", query: [scope: "admin"])
+trace!(client, "/users")
+trace!(client, "/users", query: [scope: "admin"])
+trace!(client, "/users", body: %{name: "Jon"})
request(request)
Examples
-request = %HTTPoison.Request{
+
+request(request)request = %HTTPoison.Request{
method: :post,
url: "https://my.website.com",
body: "{\"foo\": 3}",
- headers: [{"Accept", "application/json"}]
-}
+ headers: [{"Accept", "application/json"}]
+}
-request(request)
request(method, url, body \\ "",
Examples
-
+request(:post, "https://my.website.com", "{\"foo\": 3}", [{"Accept", "application/json"}])
request(:post, "https://my.website.com", "{\"foo\": 3}", [{"Accept", "application/json"}])
do_in(envs, list)
Examples
-do_in(:dev) do
- IO.puts("This will only be printed in the dev environment")
-end
+
+do_in([:dev, :test]) do
+ IO.puts("This will only be printed in the dev and test environments")
+enddo_in(:dev) do
+ IO.puts("This will only be printed in the dev environment")
+end
-do_in([:dev, :test]) do
- IO.puts("This will only be printed in the dev and test environments")
-end
Logs
Result
struct.{"level":"<<level>>","name":"<<module>>","message":"..."],"time":<<timestamp>>}
{"message":["<<message|filepath|output>>"]}
Result
struct.
There are two kinds of output:
{"level":"<<level>>","name":"<<module>>","message":"..."],"time":<<timestamp>>}
These are usually for general logging, and debugging.
{"message":["<<message|filepath|output>>"]}
The above is the equivalent of the output of a command
diff --git a/Lightning.CLI.html b/Lightning.CLI.html index 81b1ef2a1a..d73f17d6ca 100644 --- a/Lightning.CLI.html +++ b/Lightning.CLI.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.ChangesetUtils.html b/Lightning.ChangesetUtils.html index 2ba61224d6..59be987a61 100644 --- a/Lightning.ChangesetUtils.html +++ b/Lightning.ChangesetUtils.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Config.Bootstrap.html b/Lightning.Config.Bootstrap.html index 9bfeefbd8d..aad4173490 100644 --- a/Lightning.Config.Bootstrap.html +++ b/Lightning.Config.Bootstrap.html @@ -13,7 +13,7 @@ - + @@ -143,8 +143,8 @@config/runtime.exs
) file.Sourcing envs
Internally this module uses
Dotenvy.source/1
to source environment variables from the.env
,.env.<config_env>
, and.env.<config_env>.override
files. It also sources the system environment variables.Calling
configure/0
without callingsource_envs/0
orDotenvy.source/2
-first will result in no environment variables being loaded.
Usage:
Lightning.Config.Bootstrap.source_envs()
-Lightning.Config.Bootstrap.configure()
+first will result in no environment variables being loaded.Usage:
Lightning.Config.Bootstrap.source_envs()
+Lightning.Config.Bootstrap.configure()
diff --git a/Lightning.Config.Utils.html b/Lightning.Config.Utils.html
index 13a0061019..66e9618379 100644
--- a/Lightning.Config.Utils.html
+++ b/Lightning.Config.Utils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Config.html b/Lightning.Config.html
index ae83948bf6..ea5d865724 100644
--- a/Lightning.Config.html
+++ b/Lightning.Config.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.Audit.html b/Lightning.Credentials.Audit.html
index 51cbb2a6c6..d13495dd68 100644
--- a/Lightning.Credentials.Audit.html
+++ b/Lightning.Credentials.Audit.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.Credential.html b/Lightning.Credentials.Credential.html
index 71c821d5d9..e482bbe4c0 100644
--- a/Lightning.Credentials.Credential.html
+++ b/Lightning.Credentials.Credential.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.OauthClient.html b/Lightning.Credentials.OauthClient.html
index 95a50c8f2e..6dd2924037 100644
--- a/Lightning.Credentials.OauthClient.html
+++ b/Lightning.Credentials.OauthClient.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.OauthClientAudit.html b/Lightning.Credentials.OauthClientAudit.html
index fbde4c8725..6f2bd8cb20 100644
--- a/Lightning.Credentials.OauthClientAudit.html
+++ b/Lightning.Credentials.OauthClientAudit.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.Schema.html b/Lightning.Credentials.Schema.html
index cf5c8fa1e5..435e385e14 100644
--- a/Lightning.Credentials.Schema.html
+++ b/Lightning.Credentials.Schema.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.SchemaDocument.html b/Lightning.Credentials.SchemaDocument.html
index 1581af1236..2709f8dc83 100644
--- a/Lightning.Credentials.SchemaDocument.html
+++ b/Lightning.Credentials.SchemaDocument.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.SensitiveValues.html b/Lightning.Credentials.SensitiveValues.html
index 04845279a4..7a23b84dd4 100644
--- a/Lightning.Credentials.SensitiveValues.html
+++ b/Lightning.Credentials.SensitiveValues.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Credentials.html b/Lightning.Credentials.html
index a79a170214..b7ecb6deab 100644
--- a/Lightning.Credentials.html
+++ b/Lightning.Credentials.html
@@ -13,7 +13,7 @@
-
+
@@ -406,8 +406,8 @@ iex> change_credential(credential)
-%Ecto.Changeset{data: %Credential{}}
+iex> change_credential(credential)
+%Ecto.Changeset{data: %Credential{}}
iex> create_credential(%{field: value})
-{:ok, %Credential{}}
+iex> create_credential(%{field: value})
+{:ok, %Credential{}}
-iex> create_credential(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_credential(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
iex> delete_credential(credential)
-{:ok, %Credential{}}
+iex> delete_credential(credential)
+{:ok, %Credential{}}
-iex> delete_credential(credential)
-{:error, %Ecto.Changeset{}}
+iex> delete_credential(credential)
+{:error, %Ecto.Changeset{}}
iex> get_credential!(123)
-%Credential{}
+iex> get_credential!(123)
+%Credential{}
-iex> get_credential!(456)
+iex> get_credential!(456)
** (Ecto.NoResultsError)
iex> has_activity_in_projects?(%Credential{id: some_id})
+iex> has_activity_in_projects?(%Credential{id: some_id})
true
-iex> has_activity_in_projects?(%Credential{id: another_id})
+iex> has_activity_in_projects?(%Credential{id: another_id})
false
@@ -659,11 +659,11 @@ invalid_projects_for_user(credential_id, us
Examples
-iex> can_credential_be_shared_to_user(credential_id, user_id)
-[]
+iex> can_credential_be_shared_to_user(credential_id, user_id)
+[]
-iex> can_credential_be_shared_to_user(credential_id, user_id)
-["52ea8758-6ce5-43d7-912f-6a1e1f11dc55"]
+iex> can_credential_be_shared_to_user(credential_id, user_id)
+["52ea8758-6ce5-43d7-912f-6a1e1f11dc55"]
@@ -703,9 +703,9 @@ list_credentials(project)
Examples
- When given a Project:
iex> list_credentials(%Project{id: 1})
-[%Credential{project_id: 1}, %Credential{project_id: 1}]
When given a User:
iex> list_credentials(%User{id: 123})
-[%Credential{user_id: 123}, %Credential{user_id: 123}]
+ When given a Project:
iex> list_credentials(%Project{id: 1})
+[%Credential{project_id: 1}, %Credential{project_id: 1}]
When given a User:
iex> list_credentials(%User{id: 123})
+[%Credential{user_id: 123}, %Credential{user_id: 123}]
@@ -816,11 +816,11 @@ schedule_credential_deletion(credential)
Examples
-iex> schedule_credential_deletion(%Credential{id: some_id})
-{:ok, %Credential{}}
+iex> schedule_credential_deletion(%Credential{id: some_id})
+{:ok, %Credential{}}
-iex> schedule_credential_deletion(%Credential{})
-{:error, %Ecto.Changeset{}}
+iex> schedule_credential_deletion(%Credential{})
+{:error, %Ecto.Changeset{}}
@@ -877,11 +877,11 @@ update_credential(credential, attrs)
Examples
-iex> update_credential(credential, %{field: new_value})
-{:ok, %Credential{}}
+iex> update_credential(credential, %{field: new_value})
+{:ok, %Credential{}}
-iex> update_credential(credential, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_credential(credential, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.DashboardStats.ProjectMetrics.html b/Lightning.DashboardStats.ProjectMetrics.html
index 1ce898bae0..2cfbff216e 100644
--- a/Lightning.DashboardStats.ProjectMetrics.html
+++ b/Lightning.DashboardStats.ProjectMetrics.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.DashboardStats.WorkflowStats.html b/Lightning.DashboardStats.WorkflowStats.html
index e4e2a72f59..eaf3d9f685 100644
--- a/Lightning.DashboardStats.WorkflowStats.html
+++ b/Lightning.DashboardStats.WorkflowStats.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.DashboardStats.html b/Lightning.DashboardStats.html
index 82f67850fd..13cddf96ff 100644
--- a/Lightning.DashboardStats.html
+++ b/Lightning.DashboardStats.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.DataclipScrubber.html b/Lightning.DataclipScrubber.html
index a2ac053a82..e85f6303e4 100644
--- a/Lightning.DataclipScrubber.html
+++ b/Lightning.DataclipScrubber.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Demo.html b/Lightning.Demo.html
index a4300453f6..44ae2108d2 100644
--- a/Lightning.Demo.html
+++ b/Lightning.Demo.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.ExportUtils.html b/Lightning.ExportUtils.html
index f7d6119b39..662a7dcf2d 100644
--- a/Lightning.ExportUtils.html
+++ b/Lightning.ExportUtils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.AccountHooking.html b/Lightning.Extensions.AccountHooking.html
index 3d88d246e3..ab195a1a9a 100644
--- a/Lightning.Extensions.AccountHooking.html
+++ b/Lightning.Extensions.AccountHooking.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.FifoRunQueue.html b/Lightning.Extensions.FifoRunQueue.html
index e9b4eadad1..cb89c17a4e 100644
--- a/Lightning.Extensions.FifoRunQueue.html
+++ b/Lightning.Extensions.FifoRunQueue.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.Message.html b/Lightning.Extensions.Message.html
index d896ef3c58..1c41cd5e03 100644
--- a/Lightning.Extensions.Message.html
+++ b/Lightning.Extensions.Message.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.ProjectHook.html b/Lightning.Extensions.ProjectHook.html
index 14987730d0..5ef83b0720 100644
--- a/Lightning.Extensions.ProjectHook.html
+++ b/Lightning.Extensions.ProjectHook.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.ProjectHooking.html b/Lightning.Extensions.ProjectHooking.html
index 73d7faee19..9d777207bf 100644
--- a/Lightning.Extensions.ProjectHooking.html
+++ b/Lightning.Extensions.ProjectHooking.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.RateLimiter.html b/Lightning.Extensions.RateLimiter.html
index 34886257df..226c8dd4a8 100644
--- a/Lightning.Extensions.RateLimiter.html
+++ b/Lightning.Extensions.RateLimiter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.RateLimiting.Context.html b/Lightning.Extensions.RateLimiting.Context.html
index 972459fc71..2a1b06c196 100644
--- a/Lightning.Extensions.RateLimiting.Context.html
+++ b/Lightning.Extensions.RateLimiting.Context.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.RateLimiting.html b/Lightning.Extensions.RateLimiting.html
index 463872e173..b73c2302d6 100644
--- a/Lightning.Extensions.RateLimiting.html
+++ b/Lightning.Extensions.RateLimiting.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.RunQueue.html b/Lightning.Extensions.RunQueue.html
index 65324c7065..4b9bc06f88 100644
--- a/Lightning.Extensions.RunQueue.html
+++ b/Lightning.Extensions.RunQueue.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.UsageLimiter.html b/Lightning.Extensions.UsageLimiter.html
index f4d70c6d42..8c6978dab9 100644
--- a/Lightning.Extensions.UsageLimiter.html
+++ b/Lightning.Extensions.UsageLimiter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Extensions.UsageLimiting.html b/Lightning.Extensions.UsageLimiting.html
index f1322a655b..3e1be34da6 100644
--- a/Lightning.Extensions.UsageLimiting.html
+++ b/Lightning.Extensions.UsageLimiting.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.FailureNotifierView.html b/Lightning.FailureNotifierView.html
index c97045bf04..c0e79f0570 100644
--- a/Lightning.FailureNotifierView.html
+++ b/Lightning.FailureNotifierView.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Graph.html b/Lightning.Graph.html
index 731f4bc48e..dec9292ac2 100644
--- a/Lightning.Graph.html
+++ b/Lightning.Graph.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Helpers.html b/Lightning.Helpers.html
index 3c9498c4a7..deafbf4d79 100644
--- a/Lightning.Helpers.html
+++ b/Lightning.Helpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Invocation.Dataclip.html b/Lightning.Invocation.Dataclip.html
index 4a94b0e860..2a051792a3 100644
--- a/Lightning.Invocation.Dataclip.html
+++ b/Lightning.Invocation.Dataclip.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Invocation.LogLine.html b/Lightning.Invocation.LogLine.html
index 9c5e292b8f..9934aa00f5 100644
--- a/Lightning.Invocation.LogLine.html
+++ b/Lightning.Invocation.LogLine.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Invocation.Query.html b/Lightning.Invocation.Query.html
index cf8d71fa86..69a68c8c60 100644
--- a/Lightning.Invocation.Query.html
+++ b/Lightning.Invocation.Query.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Invocation.Step.html b/Lightning.Invocation.Step.html
index b272ca4698..c29f7c2da3 100644
--- a/Lightning.Invocation.Step.html
+++ b/Lightning.Invocation.Step.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Invocation.html b/Lightning.Invocation.html
index 1cb6430f1c..81a2c6fb4c 100644
--- a/Lightning.Invocation.html
+++ b/Lightning.Invocation.html
@@ -13,7 +13,7 @@
-
+
@@ -519,8 +519,8 @@ change_dataclip(dataclip, attrs \\ %{})
Examples
-iex> change_dataclip(dataclip)
-%Ecto.Changeset{data: %Dataclip{}}
+iex> change_dataclip(dataclip)
+%Ecto.Changeset{data: %Dataclip{}}
@@ -550,8 +550,8 @@ change_step(step, attrs \\ %{})
Examples
-iex> change_step(step)
-%Ecto.Changeset{data: %Step{}}
+iex> change_step(step)
+%Ecto.Changeset{data: %Step{}}
@@ -611,11 +611,11 @@ create_dataclip(attrs \\ %{})
Examples
-iex> create_dataclip(%{field: value})
-{:ok, %Dataclip{}}
+iex> create_dataclip(%{field: value})
+{:ok, %Dataclip{}}
-iex> create_dataclip(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_dataclip(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
@@ -643,11 +643,11 @@ delete_dataclip(dataclip)
Examples
-iex> delete_dataclip(dataclip)
-{:ok, %Dataclip{}}
+iex> delete_dataclip(dataclip)
+{:ok, %Dataclip{}}
-iex> delete_dataclip(dataclip)
-{:error, %Ecto.Changeset{}}
+iex> delete_dataclip(dataclip)
+{:error, %Ecto.Changeset{}}
@@ -682,14 +682,14 @@ get_dataclip(step)
Examples
-iex> get_dataclip("27b73932-16c7-4a72-86a3-85d805ccff98")
-%Dataclip{}
+iex> get_dataclip("27b73932-16c7-4a72-86a3-85d805ccff98")
+%Dataclip{}
-iex> get_dataclip("27b73932-16c7-4a72-86a3-85d805ccff98")
+iex> get_dataclip("27b73932-16c7-4a72-86a3-85d805ccff98")
nil
-iex> get_dataclip(%Step{id: "a uuid"})
-%Dataclip{}
+iex> get_dataclip(%Step{id: "a uuid"})
+%Dataclip{}
@@ -723,10 +723,10 @@ get_dataclip!(id)
Examples
-iex> get_dataclip!(123)
-%Dataclip{}
+iex> get_dataclip!(123)
+%Dataclip{}
-iex> get_dataclip!(456)
+iex> get_dataclip!(456)
** (Ecto.NoResultsError)
@@ -924,10 +924,10 @@ get_step!(id)
Examples
-iex> get_step!(123)
-%Step{}
+iex> get_step!(123)
+%Step{}
-iex> get_step!(456)
+iex> get_step!(456)
** (Ecto.NoResultsError)
@@ -1056,8 +1056,8 @@ list_dataclips()
Examples
-iex> list_dataclips()
-[%Dataclip{}, ...]
+iex> list_dataclips()
+[%Dataclip{}, ...]
@@ -1166,8 +1166,8 @@ list_steps()
Examples
-iex> list_steps()
-[%Step{}, ...]
+iex> list_steps()
+[%Step{}, ...]
@@ -1294,7 +1294,7 @@ search_workorders(project)
Example:
-search_workorders(%Project{id: 1}, %SearchParams{status: ["completed"]})
+search_workorders(%Project{id: 1}, %SearchParams{status: ["completed"]})
@@ -1400,11 +1400,11 @@ update_dataclip(dataclip, attrs)
Examples
-iex> update_dataclip(dataclip, %{field: new_value})
-{:ok, %Dataclip{}}
+iex> update_dataclip(dataclip, %{field: new_value})
+{:ok, %Dataclip{}}
-iex> update_dataclip(dataclip, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_dataclip(dataclip, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.Janitor.html b/Lightning.Janitor.html
index fcbd9b5f99..6560aa1dc1 100644
--- a/Lightning.Janitor.html
+++ b/Lightning.Janitor.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Jobs.html b/Lightning.Jobs.html
index 374b75ac64..847fd2ed6e 100644
--- a/Lightning.Jobs.html
+++ b/Lightning.Jobs.html
@@ -13,7 +13,7 @@
-
+
@@ -306,8 +306,8 @@ change_job(job, attrs \\ %{})
Examples
-iex> change_job(job)
-%Ecto.Changeset{data: %Job{}}
+iex> change_job(job)
+%Ecto.Changeset{data: %Job{}}
@@ -337,11 +337,11 @@ create_job(attrs \\ %{})
Examples
-iex> create_job(%{field: value})
-{:ok, %Job{}}
+iex> create_job(%{field: value})
+{:ok, %Job{}}
-iex> create_job(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_job(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
@@ -405,10 +405,10 @@ get_job!(id)
Examples
-iex> get_job!(123)
-%Job{}
+iex> get_job!(123)
+%Job{}
-iex> get_job!(456)
+iex> get_job!(456)
** (Ecto.NoResultsError)
@@ -620,11 +620,11 @@ update_job(job, attrs)
Examples
-iex> update_job(job, %{field: new_value})
-{:ok, %Job{}}
+iex> update_job(job, %{field: new_value})
+{:ok, %Job{}}
-iex> update_job(job, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_job(job, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.KafkaTriggers.DuplicateTrackingCleanupWorker.html b/Lightning.KafkaTriggers.DuplicateTrackingCleanupWorker.html
index 6ff58b8c7d..2591d0315a 100644
--- a/Lightning.KafkaTriggers.DuplicateTrackingCleanupWorker.html
+++ b/Lightning.KafkaTriggers.DuplicateTrackingCleanupWorker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.KafkaTriggers.EventListener.html b/Lightning.KafkaTriggers.EventListener.html
index 22272b43b3..3daeed4e8a 100644
--- a/Lightning.KafkaTriggers.EventListener.html
+++ b/Lightning.KafkaTriggers.EventListener.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.KafkaTriggers.MessageHandling.html b/Lightning.KafkaTriggers.MessageHandling.html
index afaee7809e..00d2ce313f 100644
--- a/Lightning.KafkaTriggers.MessageHandling.html
+++ b/Lightning.KafkaTriggers.MessageHandling.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.KafkaTriggers.MessageRecovery.html b/Lightning.KafkaTriggers.MessageRecovery.html
index a5d20a152e..2fb1fbd5a2 100644
--- a/Lightning.KafkaTriggers.MessageRecovery.html
+++ b/Lightning.KafkaTriggers.MessageRecovery.html
@@ -13,7 +13,7 @@
-
+
@@ -152,7 +152,7 @@
an error during reprocessing. These files can be reprocessed if you think the
error was transient.
Usage:
alias Lightning.KafkaTriggers.MessageRecovery
case MessageRecovery.recover_messages(Lightning.Config.kafka_alternate_storage_file_path) do
:ok -> # Success code
-{:error, error_count} -> # Failure code
end
+{:error, error_count} -> # Failure code
end
diff --git a/Lightning.KafkaTriggers.Pipeline.html b/Lightning.KafkaTriggers.Pipeline.html
index 92b29dcc54..07fbcb6f30 100644
--- a/Lightning.KafkaTriggers.Pipeline.html
+++ b/Lightning.KafkaTriggers.Pipeline.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.KafkaTriggers.PipelineSupervisor.html b/Lightning.KafkaTriggers.PipelineSupervisor.html
index 4f747096e7..abecbd49b6 100644
--- a/Lightning.KafkaTriggers.PipelineSupervisor.html
+++ b/Lightning.KafkaTriggers.PipelineSupervisor.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.KafkaTriggers.Supervisor.html b/Lightning.KafkaTriggers.Supervisor.html
index 04e45e986e..e0a1323096 100644
--- a/Lightning.KafkaTriggers.Supervisor.html
+++ b/Lightning.KafkaTriggers.Supervisor.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.KafkaTriggers.TriggerKafkaMessageRecord.html b/Lightning.KafkaTriggers.TriggerKafkaMessageRecord.html
index 64bcc68428..6a8b685c37 100644
--- a/Lightning.KafkaTriggers.TriggerKafkaMessageRecord.html
+++ b/Lightning.KafkaTriggers.TriggerKafkaMessageRecord.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.KafkaTriggers.html b/Lightning.KafkaTriggers.html
index 85a7339901..851bc89206 100644
--- a/Lightning.KafkaTriggers.html
+++ b/Lightning.KafkaTriggers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.LogMessage.html b/Lightning.LogMessage.html
index 53245cb60b..d5c517285a 100644
--- a/Lightning.LogMessage.html
+++ b/Lightning.LogMessage.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.MetadataService.Error.html b/Lightning.MetadataService.Error.html
index ee54e3d03f..7d26842f5d 100644
--- a/Lightning.MetadataService.Error.html
+++ b/Lightning.MetadataService.Error.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.MetadataService.html b/Lightning.MetadataService.html
index 1d4be92161..8996b38134 100644
--- a/Lightning.MetadataService.html
+++ b/Lightning.MetadataService.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Name.html b/Lightning.Name.html
index 2945c87d77..8d9bd12167 100644
--- a/Lightning.Name.html
+++ b/Lightning.Name.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.OauthClients.html b/Lightning.OauthClients.html
index 8f07c2c294..c6ad93bbe9 100644
--- a/Lightning.OauthClients.html
+++ b/Lightning.OauthClients.html
@@ -13,7 +13,7 @@
-
+
@@ -267,8 +267,8 @@ change_client(client, attrs \\ %{})
Examples
-iex> change_client(%OauthClient{}, %{name: "New Client"})
-%Ecto.Changeset{...}
+iex> change_client(%OauthClient{}, %{name: "New Client"})
+%Ecto.Changeset{...}
@@ -353,11 +353,11 @@ delete_client(client)
Examples
-iex> delete_client(client)
-{:ok, %OauthClient{}}
+iex> delete_client(client)
+{:ok, %OauthClient{}}
-iex> delete_client(client)
-{:error, %Ecto.Changeset{}}
+iex> delete_client(client)
+{:error, %Ecto.Changeset{}}
@@ -403,10 +403,10 @@ get_client!(id)
Examples
-iex> get_client!(123)
-%OauthClient{}
+iex> get_client!(123)
+%OauthClient{}
-iex> get_client!(456)
+iex> get_client!(456)
** (Ecto.NoResultsError)
@@ -447,9 +447,9 @@ list_clients(project)
Examples
- When given a Project:
iex> list_clients(%Project{id: 1})
-[%OauthClient{project_id: 1}, %OauthClient{project_id: 1}]
When given a User:
iex> list_clients(%User{id: 123})
-[%OauthClient{user_id: 123}, %OauthClient{user_id: 123}]
+ When given a Project:
iex> list_clients(%Project{id: 1})
+[%OauthClient{project_id: 1}, %OauthClient{project_id: 1}]
When given a User:
iex> list_clients(%User{id: 123})
+[%OauthClient{user_id: 123}, %OauthClient{user_id: 123}]
@@ -489,11 +489,11 @@ update_client(client, attrs)
Examples
-iex> update_client(client, %{field: new_value})
-{:ok, %OauthClient{}}
+iex> update_client(client, %{field: new_value})
+{:ok, %OauthClient{}}
-iex> update_client(client, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_client(client, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.ObanManager.html b/Lightning.ObanManager.html
index c529defa78..423e67bd2d 100644
--- a/Lightning.ObanManager.html
+++ b/Lightning.ObanManager.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Policies.Dataclips.html b/Lightning.Policies.Dataclips.html
index d42379eee6..e9d8dbfd92 100644
--- a/Lightning.Policies.Dataclips.html
+++ b/Lightning.Policies.Dataclips.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Policies.Exports.html b/Lightning.Policies.Exports.html
index 6bc8f6447e..ad9a195a57 100644
--- a/Lightning.Policies.Exports.html
+++ b/Lightning.Policies.Exports.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Policies.Permissions.html b/Lightning.Policies.Permissions.html
index 58b16765c8..b91fd597ec 100644
--- a/Lightning.Policies.Permissions.html
+++ b/Lightning.Policies.Permissions.html
@@ -13,7 +13,7 @@
-
+
@@ -138,13 +138,13 @@
This module defines a unique interface managing authorizations in Lightning.
Users in Lightning have instance-wide and project-wide roles which determine their level of access to resources in the application. Fo rmore details see the documentation.
These authorizations policies are all implemented under the lib/lightning/policies
folder. In that folder you can find 3 files:
- The
users.ex
file has all the policies for the instances wide access levels - The
project_users.ex
file has all the policies for the project wide access levels - The
permissions.ex
file defines the Lightning.Policies.Permissions.can/4
interface. Which is a wrapper around the Bodyguard.permit/4
function.
-We use that interface to be able to harmonize the use of policies accross the entire app.
All the policies are tested in the test/lightning/policies
folder. And the test are written in a way that allows the reader to quickly who can do what in the app.
We have two variants of the Lightning.Policies.Permissions.can/4
interface:
Lightning.Policies.Permissions.can(policy, action, actor, resource)
returns :ok
if the actor can perform the action on the resource and {:error, :unauthorized}
otherwise.Lightning.Policies.Permissions.can?(policy, action, actor, resource)
returns true
if the actor can perform the action on the resource and false
otherwise.
Here is an example of how we the Lightning.Policies.Permissions.can/4
interface to check if the a user can edit a job or not
can_edit_workflow = Lightning.Policies.ProjectUsers |> Lightning.Policies.Permissions.can?(:edit_workflow, socket.assigns.current_user, socket.assigns.project)
+We use that interface to be able to harmonize the use of policies accross the entire app.All the policies are tested in the test/lightning/policies
folder. And the test are written in a way that allows the reader to quickly who can do what in the app.
We have two variants of the Lightning.Policies.Permissions.can/4
interface:
Lightning.Policies.Permissions.can(policy, action, actor, resource)
returns :ok
if the actor can perform the action on the resource and {:error, :unauthorized}
otherwise.Lightning.Policies.Permissions.can?(policy, action, actor, resource)
returns true
if the actor can perform the action on the resource and false
otherwise.
Here is an example of how we the Lightning.Policies.Permissions.can/4
interface to check if the a user can edit a job or not
can_edit_workflow = Lightning.Policies.ProjectUsers |> Lightning.Policies.Permissions.can?(:edit_workflow, socket.assigns.current_user, socket.assigns.project)
-if can_edit_workflow do
+if can_edit_workflow do
# allow user to edit the workflow
-else
+else
# quick user out
-end
+end
@@ -220,11 +220,11 @@ can(policy, action, user, params \\ [])
Examples
-iex> can(Lightning.Policies.Users, :create_workflow, user, project)
+iex> can(Lightning.Policies.Users, :create_workflow, user, project)
:ok
-iex> can(Lightning.Policies.Users, :create_project, user, %{})
-{:error, :unauthorized}
+iex> can(Lightning.Policies.Users, :create_project, user, %{})
+{:error, :unauthorized}
@@ -254,10 +254,10 @@ can?(policy, action, user, params \\ [])
Examples
-iex> can(Lightning.Policies.Users, :create_workflow, user, project)
+iex> can(Lightning.Policies.Users, :create_workflow, user, project)
true
-iex> can(Lightning.Policies.Users, :create_project, user, %{})
+iex> can(Lightning.Policies.Users, :create_project, user, %{})
false
diff --git a/Lightning.Policies.ProjectUsers.html b/Lightning.Policies.ProjectUsers.html
index 4957e9990f..bbe4bb11da 100644
--- a/Lightning.Policies.ProjectUsers.html
+++ b/Lightning.Policies.ProjectUsers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Policies.Provisioning.html b/Lightning.Policies.Provisioning.html
index da6573015c..4d3e832620 100644
--- a/Lightning.Policies.Provisioning.html
+++ b/Lightning.Policies.Provisioning.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Policies.Users.html b/Lightning.Policies.Users.html
index 1511786746..7fa6ef6451 100644
--- a/Lightning.Policies.Users.html
+++ b/Lightning.Policies.Users.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.Events.html b/Lightning.Projects.Events.html
index a41b5cdd74..2608239492 100644
--- a/Lightning.Projects.Events.html
+++ b/Lightning.Projects.Events.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.File.html b/Lightning.Projects.File.html
index 725a67cd9e..59ecbe8834 100644
--- a/Lightning.Projects.File.html
+++ b/Lightning.Projects.File.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.Project.html b/Lightning.Projects.Project.html
index e569448460..27307a054c 100644
--- a/Lightning.Projects.Project.html
+++ b/Lightning.Projects.Project.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.ProjectCredential.html b/Lightning.Projects.ProjectCredential.html
index a1535d5d28..b33f6d802a 100644
--- a/Lightning.Projects.ProjectCredential.html
+++ b/Lightning.Projects.ProjectCredential.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.ProjectOauthClient.html b/Lightning.Projects.ProjectOauthClient.html
index 84c7add995..a9c065d553 100644
--- a/Lightning.Projects.ProjectOauthClient.html
+++ b/Lightning.Projects.ProjectOauthClient.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.ProjectOverviewRow.html b/Lightning.Projects.ProjectOverviewRow.html
new file mode 100644
index 0000000000..fffd3b440f
--- /dev/null
+++ b/Lightning.Projects.ProjectOverviewRow.html
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+ Lightning.Projects.ProjectOverviewRow — Lightning v2.9.11
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Lightning.Projects.ProjectOverviewRow
+ (Lightning v2.9.11)
+
+
+
+
+
+Represents a summarized view of a project for a user, used in the project overview table.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Lightning.Projects.ProjectUser.DigestEnum.html b/Lightning.Projects.ProjectUser.DigestEnum.html
index e732988550..74ef5c5ee6 100644
--- a/Lightning.Projects.ProjectUser.DigestEnum.html
+++ b/Lightning.Projects.ProjectUser.DigestEnum.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.ProjectUser.RolesEnum.html b/Lightning.Projects.ProjectUser.RolesEnum.html
index 87d3e57501..172b7e3177 100644
--- a/Lightning.Projects.ProjectUser.RolesEnum.html
+++ b/Lightning.Projects.ProjectUser.RolesEnum.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.ProjectUser.html b/Lightning.Projects.ProjectUser.html
index 4ffb1508d0..bcbcc4080f 100644
--- a/Lightning.Projects.ProjectUser.html
+++ b/Lightning.Projects.ProjectUser.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.Provisioner.html b/Lightning.Projects.Provisioner.html
index 7e2b20ed2b..02d0ec9006 100644
--- a/Lightning.Projects.Provisioner.html
+++ b/Lightning.Projects.Provisioner.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Projects.html b/Lightning.Projects.html
index f30ac15173..9e57c9c996 100644
--- a/Lightning.Projects.html
+++ b/Lightning.Projects.html
@@ -13,7 +13,7 @@
-
+
@@ -319,6 +319,14 @@
+
+
+
+
+
invite_collaborators(project, collaborators, inviter)
@@ -592,7 +600,7 @@
add_project_users(project, project_users, notify_users \\ true)
-
+
View Source
@@ -622,7 +630,7 @@ add_project_users(project, project_users, n
cancel_scheduled_deletion(project_id)
-
+
View Source
@@ -646,7 +654,7 @@ cancel_scheduled_deletion(project_id)
change_project(project, attrs \\ %{})
-
+
View Source
@@ -662,8 +670,8 @@ change_project(project, attrs \\ %{})
Examples
-iex> change_project(project)
-%Ecto.Changeset{data: %Project{}}
+iex> change_project(project)
+%Ecto.Changeset{data: %Project{}}
@@ -679,7 +687,7 @@ change_project(project, attrs \\ %{})
create_project(attrs \\ %{}, schedule_email? \\ true)
-
+
View Source
@@ -695,11 +703,11 @@ create_project(attrs \\ %{}, schedule_email
Examples
-iex> create_project(%{field: value})
-{:ok, %Project{}}
+iex> create_project(%{field: value})
+{:ok, %Project{}}
-iex> create_project(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_project(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
@@ -711,7 +719,7 @@ create_project(attrs \\ %{}, schedule_email
delete_project(project)
-
+
View Source
@@ -728,11 +736,11 @@ delete_project(project)
Examples
-iex> delete_project(project)
-{:ok, %Project{}}
+iex> delete_project(project)
+{:ok, %Project{}}
-iex> delete_project(project)
-{:error, %Ecto.Changeset{}}
+iex> delete_project(project)
+{:error, %Ecto.Changeset{}}
@@ -744,7 +752,7 @@ delete_project(project)
delete_project_user!(project_user)
-
+
View Source
@@ -775,7 +783,7 @@ delete_project_user!(project_user)
export_project(atom, project_id, snapshot_ids \\ nil)
-
+
View Source
@@ -797,8 +805,8 @@ export_project(atom, project_id, snapshot_i
Examples
-iex> export_project(:yaml, project_id)
-{:ok, string}
+iex> export_project(:yaml, project_id)
+{:ok, string}
@@ -810,7 +818,7 @@ export_project(atom, project_id, snapshot_i
find_users_to_notify_of_trigger_failure(project_id)
-
+
View Source
@@ -832,7 +840,7 @@ find_users_to_notify_of_trigger_failure(pro
get_project(id)
-
+
View Source
@@ -854,7 +862,7 @@ get_project(id)
get_project!(id)
-
+
View Source
@@ -870,10 +878,10 @@ get_project!(id)
Examples
-iex> get_project!(123)
-%Project{}
+iex> get_project!(123)
+%Project{}
-iex> get_project!(456)
+iex> get_project!(456)
** (Ecto.NoResultsError)
@@ -886,7 +894,7 @@ get_project!(id)
get_project_credential(project_id, credential_id)
-
+
View Source
@@ -908,7 +916,7 @@ get_project_credential(project_id, credenti
get_project_user(id)
-
+
View Source
@@ -930,7 +938,7 @@ get_project_user(id)
get_project_user(project, user)
-
+
View Source
@@ -952,7 +960,7 @@ get_project_user(project, user)
get_project_user!(id)
-
+
View Source
@@ -968,10 +976,10 @@ get_project_user!(id)
Examples
-iex> get_project_user!(123)
-%ProjectUser{}
+iex> get_project_user!(123)
+%ProjectUser{}
-iex> get_project_user!(456)
+iex> get_project_user!(456)
** (Ecto.NoResultsError)
@@ -984,7 +992,7 @@ get_project_user!(id)
get_project_user_role(user, project)
-
+
View Source
@@ -1001,16 +1009,16 @@ get_project_user_role(user, project)
Examples
-iex> get_project_user_role(user, project)
+iex> get_project_user_role(user, project)
:admin
-iex> get_project_user_role(user, project)
+iex> get_project_user_role(user, project)
:viewer
-iex> get_project_user_role(user, project)
+iex> get_project_user_role(user, project)
:editor
-iex> get_project_user_role(user, project)
+iex> get_project_user_role(user, project)
:owner
@@ -1023,7 +1031,7 @@ get_project_user_role(user, project)
get_project_users!(id)
-
+
View Source
@@ -1045,7 +1053,7 @@ get_project_users!(id)
get_project_with_users!(id)
-
+
View Source
@@ -1061,10 +1069,10 @@ get_project_with_users!(id)
Examples
-iex> get_project!(123)
-%Project{}
+iex> get_project!(123)
+%Project{}
-iex> get_project!(456)
+iex> get_project!(456)
** (Ecto.NoResultsError)
@@ -1079,7 +1087,7 @@ get_project_with_users!(id)
get_projects_for_user(user, opts \\ [])
-
+
View Source
@@ -1111,6 +1119,30 @@ get_projects_for_user(user, opts \\ [])
Returns
- A list of projects associated with the user.
+
+
+
+
+
+
+
+
+
+
+
@@ -1122,7 +1154,7 @@ get_projects_for_user(user, opts \\ [])
invite_collaborators(project, collaborators, inviter)
-
+
View Source
@@ -1144,7 +1176,7 @@ invite_collaborators(project, collaborators
list_project_admin_emails(id)
-
+
View Source
@@ -1172,7 +1204,7 @@ list_project_admin_emails(id)
list_project_credentials(project)
-
+
View Source
@@ -1204,7 +1236,7 @@ list_project_credentials(project)
list_project_files(project, opts \\ [])
-
+
View Source
@@ -1226,7 +1258,7 @@ list_project_files(project, opts \\ [])
list_projects()
-
+
View Source
@@ -1242,8 +1274,8 @@ list_projects()
Examples
-iex> list_projects()
-[%Project{}, ...]
+iex> list_projects()
+[%Project{}, ...]
@@ -1255,7 +1287,7 @@ list_projects()
list_projects_having_history_retention()
-
+
View Source
@@ -1284,7 +1316,7 @@ list_projects_having_history_retention()
member_of?(project, user)
-
+
View Source
@@ -1306,7 +1338,7 @@ member_of?(project, user)
perform(job)
-
+
View Source
@@ -1329,7 +1361,7 @@ perform(job)
project_credentials_query(project)
-
+
View Source
@@ -1351,7 +1383,7 @@ project_credentials_query(project)
project_dataclips_query(project)
-
+
View Source
@@ -1373,7 +1405,7 @@ project_dataclips_query(project)
project_jobs_query(project)
-
+
View Source
@@ -1395,7 +1427,7 @@ project_jobs_query(project)
project_run_step_query(project)
-
+
View Source
@@ -1417,7 +1449,7 @@ project_run_step_query(project)
project_runs_query(project)
-
+
View Source
@@ -1439,7 +1471,7 @@ project_runs_query(project)
project_steps_query(project)
-
+
View Source
@@ -1461,7 +1493,7 @@ project_steps_query(project)
project_triggers_query(project)
-
+
View Source
@@ -1483,7 +1515,7 @@ project_triggers_query(project)
project_user_role_query(user, project)
-
+
View Source
@@ -1514,7 +1546,7 @@ project_user_role_query(user, project)
project_users_query(project)
-
+
View Source
@@ -1543,7 +1575,7 @@ project_users_query(project)
project_workflows_query(project)
-
+
View Source
@@ -1565,7 +1597,7 @@ project_workflows_query(project)
project_workorders_query(project)
-
+
View Source
@@ -1589,7 +1621,7 @@ project_workorders_query(project)
projects_for_user_query(user, opts \\ [])
-
+
View Source
@@ -1630,7 +1662,7 @@ projects_for_user_query(user, opts \\ [])
save_dataclips?(id)
-
+
View Source
@@ -1652,7 +1684,7 @@ save_dataclips?(id)
schedule_project_deletion(project)
-
+
View Source
@@ -1678,7 +1710,7 @@ schedule_project_deletion(project)
select_first_project_for_user(user)
-
+
View Source
@@ -1707,7 +1739,7 @@ select_first_project_for_user(user)
update_project(project, attrs)
-
+
View Source
@@ -1723,11 +1755,11 @@ update_project(project, attrs)
Examples
-iex> update_project(project, %{field: new_value})
-{:ok, %Project{}}
+iex> update_project(project, %{field: new_value})
+{:ok, %Project{}}
-iex> update_project(project, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_project(project, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
@@ -1739,7 +1771,7 @@ update_project(project, attrs)
update_project_user(project_user, attrs)
-
+
View Source
@@ -1755,11 +1787,11 @@ update_project_user(project_user, attrs)
Examples
-iex> update_project_user(project_user, %{field: new_value})
-{:ok, %ProjectUser{}}
+iex> update_project_user(project_user, %{field: new_value})
+{:ok, %ProjectUser{}}
-iex> update_project_user(projectUser, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_project_user(projectUser, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
@@ -1773,7 +1805,7 @@ update_project_user(project_user, attrs)
update_project_with_users(project, attrs, notify_users \\ true)
-
+
View Source
@@ -1802,7 +1834,7 @@ update_project_with_users(project, attrs, n
url_safe_project_name(name)
-
+
View Source
@@ -1824,7 +1856,7 @@ url_safe_project_name(name)
validate_for_deletion(project, attrs)
-
+
View Source
@@ -1840,8 +1872,8 @@ validate_for_deletion(project, attrs)
Examples
-iex> validate_for_deletion(project)
-%Ecto.Changeset{data: %Project{}}
+iex> validate_for_deletion(project)
+%Ecto.Changeset{data: %Project{}}
diff --git a/Lightning.PromEx.html b/Lightning.PromEx.html
index bd2c9f86bf..f277f4e3d9 100644
--- a/Lightning.PromEx.html
+++ b/Lightning.PromEx.html
@@ -13,7 +13,7 @@
-
+
@@ -142,24 +142,24 @@
more details regarding configuring PromEx:config :lightning, Lightning.PromEx,
disabled: false,
manual_metrics_start_delay: :no_delay,
- drop_metrics_groups: [],
+ drop_metrics_groups: [],
grafana: :disabled,
metrics_server: :disabled
Add this module to your application supervision tree. It should be one of the first
things that is started so that no Telemetry events are missed. For example, if PromEx
is started after your Repo module, you will miss Ecto's init events and the dashboards
-will be missing some data points:
def start(_type, _args) do
- children = [
+will be missing some data points:def start(_type, _args) do
+ children = [
Lightning.PromEx,
...
- ]
+ ]
...
-end
Update your endpoint.ex
file to expose your metrics (or configure a standalone
+
end
Update your endpoint.ex
file to expose your metrics (or configure a standalone
server using the :metrics_server
config options). Be sure to put this plug before
your Plug.Telemetry
entry so that you can avoid having calls to your /metrics
endpoint create their own metrics and logs which can pollute your logs/metrics given
-that Prometheus will scrape at a regular interval and that can get noisy:
defmodule LightningWeb.Endpoint do
+that Prometheus will scrape at a regular interval and that can get noisy:defmodule LightningWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :lightning
...
@@ -167,7 +167,7 @@
plug PromEx.Plug, prom_ex_module: Lightning.PromEx
...
-end
Update the list of plugins in the plugins/0
function return list to reflect your
+
end
Update the list of plugins in the plugins/0
function return list to reflect your
application's dependencies. Also update the list of dashboards that are to be uploaded
to Grafana in the dashboards/0
function.
diff --git a/Lightning.Release.html b/Lightning.Release.html
index 7d79c2ee3e..8543e500b3 100644
--- a/Lightning.Release.html
+++ b/Lightning.Release.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Repo.html b/Lightning.Repo.html
index 38422b803b..48972782eb 100644
--- a/Lightning.Repo.html
+++ b/Lightning.Repo.html
@@ -13,7 +13,7 @@
-
+
@@ -1738,13 +1738,13 @@ transact(fun, opts \\ [])
A small wrapper around Repo.transaction/2
.
Commits the transaction if the lambda returns :ok
or {:ok, result}
,
rolling it back if the lambda returns :error
or {:error, reason}
. In both
-cases, the function returns the result of the lambda.
Example:
Repo.transact(fn ->
- with {:ok, user} <- Accounts.create_user(params),
- {:ok, _log} <- Logs.log_action(:user_registered, user),
- {:ok, _job} <- Mailer.enqueue_email_confirmation(user) do
- {:ok, user}
- end
-end)
From blog post found here
+cases, the function returns the result of the lambda.Example:
Repo.transact(fn ->
+ with {:ok, user} <- Accounts.create_user(params),
+ {:ok, _log} <- Logs.log_action(:user_registered, user),
+ {:ok, _job} <- Mailer.enqueue_email_confirmation(user) do
+ {:ok, user}
+ end
+end)
From blog post found here
diff --git a/Lightning.Run.html b/Lightning.Run.html
index 9e4231362c..50cb2adfac 100644
--- a/Lightning.Run.html
+++ b/Lightning.Run.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.RunStep.html b/Lightning.RunStep.html
index 82514aa29c..12b73669c1 100644
--- a/Lightning.RunStep.html
+++ b/Lightning.RunStep.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.Events.html b/Lightning.Runs.Events.html
index 7106e79cfe..03337b7e60 100644
--- a/Lightning.Runs.Events.html
+++ b/Lightning.Runs.Events.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.Handlers.CompleteRun.html b/Lightning.Runs.Handlers.CompleteRun.html
index d9e7ebf7fc..d33db95eb7 100644
--- a/Lightning.Runs.Handlers.CompleteRun.html
+++ b/Lightning.Runs.Handlers.CompleteRun.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.Handlers.CompleteStep.html b/Lightning.Runs.Handlers.CompleteStep.html
index ffa799f59b..478801a919 100644
--- a/Lightning.Runs.Handlers.CompleteStep.html
+++ b/Lightning.Runs.Handlers.CompleteStep.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.Handlers.StartRun.html b/Lightning.Runs.Handlers.StartRun.html
index 7e911e4326..a2ba5d5e31 100644
--- a/Lightning.Runs.Handlers.StartRun.html
+++ b/Lightning.Runs.Handlers.StartRun.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.Handlers.StartStep.html b/Lightning.Runs.Handlers.StartStep.html
index 6e6aec20dd..69ed252cb3 100644
--- a/Lightning.Runs.Handlers.StartStep.html
+++ b/Lightning.Runs.Handlers.StartStep.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.Handlers.html b/Lightning.Runs.Handlers.html
index 425965408c..8085fa7fd3 100644
--- a/Lightning.Runs.Handlers.html
+++ b/Lightning.Runs.Handlers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.PromExPlugin.html b/Lightning.Runs.PromExPlugin.html
index 32c8f67cca..668bcf5330 100644
--- a/Lightning.Runs.PromExPlugin.html
+++ b/Lightning.Runs.PromExPlugin.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.Query.html b/Lightning.Runs.Query.html
index 5338475f30..f64319c8ae 100644
--- a/Lightning.Runs.Query.html
+++ b/Lightning.Runs.Query.html
@@ -13,7 +13,7 @@
-
+
@@ -241,7 +241,7 @@ eligible_for_claim()
This query does not currently take into account the priority of the run.
To allow for prioritization, the query should be updated to order by
-priority.
eligible_for_claim() |> prepend_order_by([:priority])
+priority.eligible_for_claim() |> prepend_order_by([:priority])
diff --git a/Lightning.Runs.Queue.html b/Lightning.Runs.Queue.html
index 8c2dbd0e3b..dc468e5339 100644
--- a/Lightning.Runs.Queue.html
+++ b/Lightning.Runs.Queue.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.RunOptions.html b/Lightning.Runs.RunOptions.html
index 43c5241e86..7f31639147 100644
--- a/Lightning.Runs.RunOptions.html
+++ b/Lightning.Runs.RunOptions.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runs.html b/Lightning.Runs.html
index 4669c9a2cf..e2624acd4e 100644
--- a/Lightning.Runs.html
+++ b/Lightning.Runs.html
@@ -13,7 +13,7 @@
-
+
@@ -477,7 +477,7 @@ get(id, opts \\ [])
-Get a run by id.
Optionally preload associations by passing a list of atoms to :include
.
Lightning.Runs.get(id, include: [:workflow])
+Get a run by id.
Optionally preload associations by passing a list of atoms to :include
.
Lightning.Runs.get(id, include: [:workflow])
diff --git a/Lightning.Runtime.LogAgent.StringBuffer.html b/Lightning.Runtime.LogAgent.StringBuffer.html
index f7155c4fa0..b0faff1ba3 100644
--- a/Lightning.Runtime.LogAgent.StringBuffer.html
+++ b/Lightning.Runtime.LogAgent.StringBuffer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runtime.LogAgent.html b/Lightning.Runtime.LogAgent.html
index b6eeb10698..f2f978b36c 100644
--- a/Lightning.Runtime.LogAgent.html
+++ b/Lightning.Runtime.LogAgent.html
@@ -13,7 +13,7 @@
-
+
@@ -138,9 +138,9 @@
Agent facility to consume STDOUT/STDERR byte by byte.
Since it works on a byte by byte basis, you will need to perform line-splitting
-yourself.
Usage:
{:ok, log} = LogAgent.start_link()
-"foo" = LogAgent.process_chunk(log, {:stdout, "foo"})
-"foobar" = LogAgent.process_chunk(log, {:stdout, "bar"})
+yourself.Usage:
{:ok, log} = LogAgent.start_link()
+"foo" = LogAgent.process_chunk(log, {:stdout, "foo"})
+"foobar" = LogAgent.process_chunk(log, {:stdout, "bar"})
diff --git a/Lightning.Runtime.RuntimeManager.RuntimeClient.html b/Lightning.Runtime.RuntimeManager.RuntimeClient.html
index 05ef2644e0..4f4259f9d1 100644
--- a/Lightning.Runtime.RuntimeManager.RuntimeClient.html
+++ b/Lightning.Runtime.RuntimeManager.RuntimeClient.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runtime.RuntimeManager.html b/Lightning.Runtime.RuntimeManager.html
index baebd2d6ba..b4f14d9fa6 100644
--- a/Lightning.Runtime.RuntimeManager.html
+++ b/Lightning.Runtime.RuntimeManager.html
@@ -13,7 +13,7 @@
-
+
@@ -146,8 +146,8 @@
Sample:
config :lightining, Elixir.Lightning.Runtime.RuntimeManager,
version: "0.1.0",
start: true,
args: ~w(js/app.js --bundle --target=es2016 --outdir=../priv/static/assets),
-cd: Path.expand("../assets", __DIR__),
-env: %{}
Options:
:version
- the expected runtime version
:start
- flag to start the runtime manager. If false
the GenServer
+cd: Path.expand("../assets", __DIR__),
+env: %{}
Options:
:version
- the expected runtime version
:start
- flag to start the runtime manager. If false
the GenServer
won't be started
:path
- the path to find the runtime executable at. By
default, it is automatically downloaded and placed inside
the _build
directory of your current app
Overriding the :path
is not recommended, as we will automatically
diff --git a/Lightning.SafetyString.html b/Lightning.SafetyString.html
index 32f909936f..df9585d41b 100644
--- a/Lightning.SafetyString.html
+++ b/Lightning.SafetyString.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Schema.html b/Lightning.Schema.html
index bfa0f1f0ff..cc324f72e1 100644
--- a/Lightning.Schema.html
+++ b/Lightning.Schema.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Scrubber.html b/Lightning.Scrubber.html
index ed4c9ff260..151e0c2fbd 100644
--- a/Lightning.Scrubber.html
+++ b/Lightning.Scrubber.html
@@ -13,7 +13,7 @@
-
+
@@ -137,11 +137,11 @@
-Process used to scrub strings of sensitive information.
Can be started via start_link/1
.
{:ok, scrubber} =
- Lightning.Scrubber.start_link(
+Process used to scrub strings of sensitive information.
Can be started via start_link/1
.
{:ok, scrubber} =
+ Lightning.Scrubber.start_link(
samples:
- Lightning.Credentials.sensitive_values_for(credential)
- )
Takes an optional :name
key, in case you need to name the process.
+ Lightning.Credentials.sensitive_values_for(credential)
+ )
Takes an optional :name
key, in case you need to name the process.
diff --git a/Lightning.Services.AccountHook.html b/Lightning.Services.AccountHook.html
index 39f0eab1e9..9c1412b285 100644
--- a/Lightning.Services.AccountHook.html
+++ b/Lightning.Services.AccountHook.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Services.AdapterHelper.html b/Lightning.Services.AdapterHelper.html
index 4b35bab1a5..760268ddd0 100644
--- a/Lightning.Services.AdapterHelper.html
+++ b/Lightning.Services.AdapterHelper.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Services.ProjectHook.html b/Lightning.Services.ProjectHook.html
index 0b34773e9e..6d649b400f 100644
--- a/Lightning.Services.ProjectHook.html
+++ b/Lightning.Services.ProjectHook.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Services.RateLimiter.html b/Lightning.Services.RateLimiter.html
index c71a6f32ce..d405b56e62 100644
--- a/Lightning.Services.RateLimiter.html
+++ b/Lightning.Services.RateLimiter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Services.RunQueue.html b/Lightning.Services.RunQueue.html
index 7719336889..840ddaf4f2 100644
--- a/Lightning.Services.RunQueue.html
+++ b/Lightning.Services.RunQueue.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Services.UsageLimiter.html b/Lightning.Services.UsageLimiter.html
index 5b7a637fa7..6b8f7bc29c 100644
--- a/Lightning.Services.UsageLimiter.html
+++ b/Lightning.Services.UsageLimiter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Setup.html b/Lightning.Setup.html
index b393c61a1e..23f659aca6 100644
--- a/Lightning.Setup.html
+++ b/Lightning.Setup.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.SetupUtils.Ticker.html b/Lightning.SetupUtils.Ticker.html
index 3ee4ca4c1a..d95c6bcbe4 100644
--- a/Lightning.SetupUtils.Ticker.html
+++ b/Lightning.SetupUtils.Ticker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.SetupUtils.html b/Lightning.SetupUtils.html
index ee72f377b0..96b9e48fc4 100644
--- a/Lightning.SetupUtils.html
+++ b/Lightning.SetupUtils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Storage.Backend.html b/Lightning.Storage.Backend.html
index 49ee284432..d8899f83db 100644
--- a/Lightning.Storage.Backend.html
+++ b/Lightning.Storage.Backend.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Storage.GCS.html b/Lightning.Storage.GCS.html
index e8ea1ebb9f..38515b22c2 100644
--- a/Lightning.Storage.GCS.html
+++ b/Lightning.Storage.GCS.html
@@ -13,7 +13,7 @@
-
+
@@ -150,10 +150,10 @@
Example Usage
# Store a file in GCS
-Lightning.Storage.GCS.store("/path/to/source", "destination/path")
+Lightning.Storage.GCS.store("/path/to/source", "destination/path")
# Get a signed URL for the stored file
-{:ok, url} = Lightning.Storage.GCS.get_url("destination/path")
+{:ok, url} = Lightning.Storage.GCS.get_url("destination/path")
diff --git a/Lightning.Storage.Local.html b/Lightning.Storage.Local.html
index bbffd5c7e5..2a94335ecc 100644
--- a/Lightning.Storage.Local.html
+++ b/Lightning.Storage.Local.html
@@ -13,7 +13,7 @@
-
+
@@ -156,11 +156,11 @@
Example Usage
# Store a file
-{:ok, filename} =
- Lightning.Storage.Local.store("/path/to/source", "destination/path")
+{:ok, filename} =
+ Lightning.Storage.Local.store("/path/to/source", "destination/path")
# Get the URL for the stored file
-{:ok, url} = Lightning.Storage.Local.get_url("destination/path")
+{:ok, url} = Lightning.Storage.Local.get_url("destination/path")
diff --git a/Lightning.Storage.ProjectFileDefinition.html b/Lightning.Storage.ProjectFileDefinition.html
index 7b9a88a66a..cdff96d92f 100644
--- a/Lightning.Storage.ProjectFileDefinition.html
+++ b/Lightning.Storage.ProjectFileDefinition.html
@@ -13,7 +13,7 @@
-
+
@@ -138,13 +138,13 @@
This module provides functionality for managing the storage and retrieval of project files.
It handles operations related to storing project files, generating URLs for accessing these files, and constructing storage paths for exported files. It serves as an abstraction layer over the underlying storage mechanism provided by the Lightning.Storage
module.
## Functions
store/2
: Stores a file from a given source path into the storage system based on the file's path.get_url/1
: Retrieves the URL for accessing a stored file.storage_path_for_exports/2
: Constructs a storage path for exported files, defaulting to a .zip
extension.
## Example Usage
# Store a file
- Lightning.Storage.ProjectFileDefinition.store("/path/to/source", project_file)
+ Lightning.Storage.ProjectFileDefinition.store("/path/to/source", project_file)
# Get a URL for the stored file
- url = Lightning.Storage.ProjectFileDefinition.get_url(project_file)
+ url = Lightning.Storage.ProjectFileDefinition.get_url(project_file)
# Get the storage path for an exported file
- path = Lightning.Storage.ProjectFileDefinition.storage_path_for_exports(project_file)
+ path = Lightning.Storage.ProjectFileDefinition.storage_path_for_exports(project_file)
diff --git a/Lightning.Storage.html b/Lightning.Storage.html
index fa117989d0..7bc22568db 100644
--- a/Lightning.Storage.html
+++ b/Lightning.Storage.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.TaskWorker.html b/Lightning.TaskWorker.html
index 54eec3c552..d347317ce2 100644
--- a/Lightning.TaskWorker.html
+++ b/Lightning.TaskWorker.html
@@ -13,7 +13,7 @@
-
+
@@ -140,7 +140,7 @@
A TaskWorker with concurrency limits.
A simple concurrency limiter that wraps Task.Supervisor
, which already does
have the ability to specify max_children
; it throws an error when
that limit is exceeded.
To use it, start it like any other process; ideally in your supervision tree.
...,
- {Lightning.TaskWorker, name: :cli_task_worker, max_tasks: 4}
Options
:max_tasks
Defaults to the number of system schedulers available to the vm.
+ {Lightning.TaskWorker, name: :cli_task_worker, max_tasks: 4}Options
:max_tasks
Defaults to the number of system schedulers available to the vm.
diff --git a/Lightning.UnixDateTime.html b/Lightning.UnixDateTime.html
index 7ac7440249..ae8d723544 100644
--- a/Lightning.UnixDateTime.html
+++ b/Lightning.UnixDateTime.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.Client.html b/Lightning.UsageTracking.Client.html
index 4ffd642301..c9d0109d4b 100644
--- a/Lightning.UsageTracking.Client.html
+++ b/Lightning.UsageTracking.Client.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.DailyReportConfiguration.html b/Lightning.UsageTracking.DailyReportConfiguration.html
index 782f38f870..260966bca8 100644
--- a/Lightning.UsageTracking.DailyReportConfiguration.html
+++ b/Lightning.UsageTracking.DailyReportConfiguration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.DayWorker.html b/Lightning.UsageTracking.DayWorker.html
index 8093955e01..d79587a80d 100644
--- a/Lightning.UsageTracking.DayWorker.html
+++ b/Lightning.UsageTracking.DayWorker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.GithubClient.html b/Lightning.UsageTracking.GithubClient.html
index 35701cd658..456746b3bd 100644
--- a/Lightning.UsageTracking.GithubClient.html
+++ b/Lightning.UsageTracking.GithubClient.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.ProjectMetricsService.html b/Lightning.UsageTracking.ProjectMetricsService.html
index 2954176323..1f2ef36467 100644
--- a/Lightning.UsageTracking.ProjectMetricsService.html
+++ b/Lightning.UsageTracking.ProjectMetricsService.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.Report.html b/Lightning.UsageTracking.Report.html
index b599a36714..1c4c1c0477 100644
--- a/Lightning.UsageTracking.Report.html
+++ b/Lightning.UsageTracking.Report.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.ReportData.html b/Lightning.UsageTracking.ReportData.html
index d9ce5a926e..d24a3f1902 100644
--- a/Lightning.UsageTracking.ReportData.html
+++ b/Lightning.UsageTracking.ReportData.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.ReportWorker.html b/Lightning.UsageTracking.ReportWorker.html
index 37a56cd924..af112e345e 100644
--- a/Lightning.UsageTracking.ReportWorker.html
+++ b/Lightning.UsageTracking.ReportWorker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.ResponseProcessor.html b/Lightning.UsageTracking.ResponseProcessor.html
index 986afa9d8b..10cda7495a 100644
--- a/Lightning.UsageTracking.ResponseProcessor.html
+++ b/Lightning.UsageTracking.ResponseProcessor.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.ResubmissionCandidatesWorker.html b/Lightning.UsageTracking.ResubmissionCandidatesWorker.html
index 03d92e3a79..54bc8fadf5 100644
--- a/Lightning.UsageTracking.ResubmissionCandidatesWorker.html
+++ b/Lightning.UsageTracking.ResubmissionCandidatesWorker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.ResubmissionWorker.html b/Lightning.UsageTracking.ResubmissionWorker.html
index e1311719ea..68306405ea 100644
--- a/Lightning.UsageTracking.ResubmissionWorker.html
+++ b/Lightning.UsageTracking.ResubmissionWorker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.RunService.html b/Lightning.UsageTracking.RunService.html
index 85151d7bc1..515be26869 100644
--- a/Lightning.UsageTracking.RunService.html
+++ b/Lightning.UsageTracking.RunService.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.UserQueries.html b/Lightning.UsageTracking.UserQueries.html
index ef526d7a74..52ce375fa5 100644
--- a/Lightning.UsageTracking.UserQueries.html
+++ b/Lightning.UsageTracking.UserQueries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.UserService.html b/Lightning.UsageTracking.UserService.html
index 7d3dfbd996..35bd34ab8d 100644
--- a/Lightning.UsageTracking.UserService.html
+++ b/Lightning.UsageTracking.UserService.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.WorkflowMetricsService.html b/Lightning.UsageTracking.WorkflowMetricsService.html
index 491f541a40..ac686daabe 100644
--- a/Lightning.UsageTracking.WorkflowMetricsService.html
+++ b/Lightning.UsageTracking.WorkflowMetricsService.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.UsageTracking.html b/Lightning.UsageTracking.html
index 1cfa23f210..b18fbd5105 100644
--- a/Lightning.UsageTracking.html
+++ b/Lightning.UsageTracking.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Validators.html b/Lightning.Validators.html
index e5fd5e6502..c8818a1525 100644
--- a/Lightning.Validators.html
+++ b/Lightning.Validators.html
@@ -13,7 +13,7 @@
-
+
@@ -233,10 +233,10 @@ validate_exclusive(changeset, fields, messa
Validate that only one of the fields is set at a time.
Example:
changeset
-|> validate_exclusive(
- [:source_job_id, :source_trigger_id],
+|> validate_exclusive(
+ [:source_job_id, :source_trigger_id],
"source_job_id and source_trigger_id are mutually exclusive"
-)
+)
Perform a DELETE request.
See request/1
or request/2
for options definition.
delete("/users")
-delete("/users", query: [scope: "admin"])
-delete(client, "/users")
-delete(client, "/users", query: [scope: "admin"])
-delete(client, "/users", body: %{name: "Jon"})
+Perform a DELETE request.
See request/1
or request/2
for options definition.
delete("/users")
+delete("/users", query: [scope: "admin"])
+delete(client, "/users")
+delete(client, "/users", query: [scope: "admin"])
+delete(client, "/users", body: %{name: "Jon"})
Perform a DELETE request.
See request!/1
or request!/2
for options definition.
delete!("/users")
-delete!("/users", query: [scope: "admin"])
-delete!(client, "/users")
-delete!(client, "/users", query: [scope: "admin"])
-delete!(client, "/users", body: %{name: "Jon"})
+Perform a DELETE request.
See request!/1
or request!/2
for options definition.
delete!("/users")
+delete!("/users", query: [scope: "admin"])
+delete!(client, "/users")
+delete!(client, "/users", query: [scope: "admin"])
+delete!(client, "/users", body: %{name: "Jon"})
Perform a GET request.
See request/1
or request/2
for options definition.
get("/users")
-get("/users", query: [scope: "admin"])
-get(client, "/users")
-get(client, "/users", query: [scope: "admin"])
-get(client, "/users", body: %{name: "Jon"})
+Perform a GET request.
See request/1
or request/2
for options definition.
get("/users")
+get("/users", query: [scope: "admin"])
+get(client, "/users")
+get(client, "/users", query: [scope: "admin"])
+get(client, "/users", body: %{name: "Jon"})
Perform a GET request.
See request!/1
or request!/2
for options definition.
get!("/users")
-get!("/users", query: [scope: "admin"])
-get!(client, "/users")
-get!(client, "/users", query: [scope: "admin"])
-get!(client, "/users", body: %{name: "Jon"})
+Perform a GET request.
See request!/1
or request!/2
for options definition.
get!("/users")
+get!("/users", query: [scope: "admin"])
+get!(client, "/users")
+get!(client, "/users", query: [scope: "admin"])
+get!(client, "/users", body: %{name: "Jon"})
Perform a HEAD request.
See request/1
or request/2
for options definition.
head("/users")
-head("/users", query: [scope: "admin"])
-head(client, "/users")
-head(client, "/users", query: [scope: "admin"])
-head(client, "/users", body: %{name: "Jon"})
+Perform a HEAD request.
See request/1
or request/2
for options definition.
head("/users")
+head("/users", query: [scope: "admin"])
+head(client, "/users")
+head(client, "/users", query: [scope: "admin"])
+head(client, "/users", body: %{name: "Jon"})
Perform a HEAD request.
See request!/1
or request!/2
for options definition.
head!("/users")
-head!("/users", query: [scope: "admin"])
-head!(client, "/users")
-head!(client, "/users", query: [scope: "admin"])
-head!(client, "/users", body: %{name: "Jon"})
+Perform a HEAD request.
See request!/1
or request!/2
for options definition.
head!("/users")
+head!("/users", query: [scope: "admin"])
+head!(client, "/users")
+head!(client, "/users", query: [scope: "admin"])
+head!(client, "/users", body: %{name: "Jon"})
Perform a OPTIONS request.
See request/1
or request/2
for options definition.
options("/users")
-options("/users", query: [scope: "admin"])
-options(client, "/users")
-options(client, "/users", query: [scope: "admin"])
-options(client, "/users", body: %{name: "Jon"})
+Perform a OPTIONS request.
See request/1
or request/2
for options definition.
options("/users")
+options("/users", query: [scope: "admin"])
+options(client, "/users")
+options(client, "/users", query: [scope: "admin"])
+options(client, "/users", body: %{name: "Jon"})
Perform a OPTIONS request.
See request!/1
or request!/2
for options definition.
options!("/users")
-options!("/users", query: [scope: "admin"])
-options!(client, "/users")
-options!(client, "/users", query: [scope: "admin"])
-options!(client, "/users", body: %{name: "Jon"})
+Perform a OPTIONS request.
See request!/1
or request!/2
for options definition.
options!("/users")
+options!("/users", query: [scope: "admin"])
+options!(client, "/users")
+options!(client, "/users", query: [scope: "admin"])
+options!(client, "/users", body: %{name: "Jon"})
Perform a PATCH request.
See request/1
or request/2
for options definition.
patch("/users", %{name: "Jon"})
-patch("/users", %{name: "Jon"}, query: [scope: "admin"])
-patch(client, "/users", %{name: "Jon"})
-patch(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+Perform a PATCH request.
See request/1
or request/2
for options definition.
patch("/users", %{name: "Jon"})
+patch("/users", %{name: "Jon"}, query: [scope: "admin"])
+patch(client, "/users", %{name: "Jon"})
+patch(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
Perform a PATCH request.
See request!/1
or request!/2
for options definition.
patch!("/users", %{name: "Jon"})
-patch!("/users", %{name: "Jon"}, query: [scope: "admin"])
-patch!(client, "/users", %{name: "Jon"})
-patch!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+Perform a PATCH request.
See request!/1
or request!/2
for options definition.
patch!("/users", %{name: "Jon"})
+patch!("/users", %{name: "Jon"}, query: [scope: "admin"])
+patch!(client, "/users", %{name: "Jon"})
+patch!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
Perform a POST request.
See request/1
or request/2
for options definition.
post("/users", %{name: "Jon"})
-post("/users", %{name: "Jon"}, query: [scope: "admin"])
-post(client, "/users", %{name: "Jon"})
-post(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+Perform a POST request.
See request/1
or request/2
for options definition.
post("/users", %{name: "Jon"})
+post("/users", %{name: "Jon"}, query: [scope: "admin"])
+post(client, "/users", %{name: "Jon"})
+post(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
Perform a POST request.
See request!/1
or request!/2
for options definition.
post!("/users", %{name: "Jon"})
-post!("/users", %{name: "Jon"}, query: [scope: "admin"])
-post!(client, "/users", %{name: "Jon"})
-post!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+Perform a POST request.
See request!/1
or request!/2
for options definition.
post!("/users", %{name: "Jon"})
+post!("/users", %{name: "Jon"}, query: [scope: "admin"])
+post!(client, "/users", %{name: "Jon"})
+post!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
Perform a PUT request.
See request/1
or request/2
for options definition.
put("/users", %{name: "Jon"})
-put("/users", %{name: "Jon"}, query: [scope: "admin"])
-put(client, "/users", %{name: "Jon"})
-put(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+Perform a PUT request.
See request/1
or request/2
for options definition.
put("/users", %{name: "Jon"})
+put("/users", %{name: "Jon"}, query: [scope: "admin"])
+put(client, "/users", %{name: "Jon"})
+put(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
Perform a PUT request.
See request!/1
or request!/2
for options definition.
put!("/users", %{name: "Jon"})
-put!("/users", %{name: "Jon"}, query: [scope: "admin"])
-put!(client, "/users", %{name: "Jon"})
-put!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+Perform a PUT request.
See request!/1
or request!/2
for options definition.
put!("/users", %{name: "Jon"})
+put!("/users", %{name: "Jon"}, query: [scope: "admin"])
+put!(client, "/users", %{name: "Jon"})
+put!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
ExampleApi.request(method: :get, url: "/users/path")
+ExampleApi.request(method: :get, url: "/users/path")
# use shortcut methods
-ExampleApi.get("/users/1")
-ExampleApi.post(client, "/users", %{name: "Jon"})
+ExampleApi.get("/users/1")
+ExampleApi.post(client, "/users", %{name: "Jon"})
Perform a TRACE request.
See request/1
or request/2
for options definition.
trace("/users")
-trace("/users", query: [scope: "admin"])
-trace(client, "/users")
-trace(client, "/users", query: [scope: "admin"])
-trace(client, "/users", body: %{name: "Jon"})
+Perform a TRACE request.
See request/1
or request/2
for options definition.
trace("/users")
+trace("/users", query: [scope: "admin"])
+trace(client, "/users")
+trace(client, "/users", query: [scope: "admin"])
+trace(client, "/users", body: %{name: "Jon"})
Perform a TRACE request.
See request!/1
or request!/2
for options definition.
trace!("/users")
-trace!("/users", query: [scope: "admin"])
-trace!(client, "/users")
-trace!(client, "/users", query: [scope: "admin"])
-trace!(client, "/users", body: %{name: "Jon"})
+Perform a TRACE request.
See request!/1
or request!/2
for options definition.
trace!("/users")
+trace!("/users", query: [scope: "admin"])
+trace!(client, "/users")
+trace!(client, "/users", query: [scope: "admin"])
+trace!(client, "/users", body: %{name: "Jon"})
Creating a WebhookAuthMethod
without an associated trigger:
iex> create_auth_method(%{valid_attributes}, actor: %User{})
-{:ok, %WebhookAuthMethod{}}
+Creating a WebhookAuthMethod
without an associated trigger:
iex> create_auth_method(%{valid_attributes}, actor: %User{})
+{:ok, %WebhookAuthMethod{}}
-iex> create_auth_method(%{invalid_attributes}, actor: %User{})
-{:error, %Ecto.Changeset{}}
Creating a WebhookAuthMethod
with an associated trigger:
iex> create_auth_method(%Trigger{}, %{valid_attributes}, actor: %User{})
-{:ok, %WebhookAuthMethod{}}
+iex> create_auth_method(%{invalid_attributes}, actor: %User{})
+{:error, %Ecto.Changeset{}}
Creating a WebhookAuthMethod
with an associated trigger:
iex> create_auth_method(%Trigger{}, %{valid_attributes}, actor: %User{})
+{:ok, %WebhookAuthMethod{}}
-iex> create_auth_method(%Trigger{}, %{invalid_attributes}, actor: %User{})
-{:error, %Ecto.Changeset{}}
+
iex> create_auth_method(%Trigger{}, %{invalid_attributes}, actor: %User{})
+{:error, %Ecto.Changeset{}}
Creating a changeset for an API type auth method:
iex> Lightning.Workflows.create_changeset(%WebhookAuthMethod{auth_type: :api}, %{})
-%WebhookAuthMethod{api_key: some_new_api_key}
Creating a changeset for a non-API type auth method:
iex> Lightning.Workflows.create_changeset(%WebhookAuthMethod{auth_type: :other}, %{})
-%WebhookAuthMethod{}
Creating a changeset for an API type auth method:
iex> Lightning.Workflows.create_changeset(%WebhookAuthMethod{auth_type: :api}, %{})
+%WebhookAuthMethod{api_key: some_new_api_key}
Creating a changeset for a non-API type auth method:
iex> Lightning.Workflows.create_changeset(%WebhookAuthMethod{auth_type: :other}, %{})
+%WebhookAuthMethod{}
Successful deletion:
iex> delete_auth_method(%WebhookAuthMethod{id: "some_id"})
-{:ok, %WebhookAuthMethod{}}
Deletion fails due to the item not existing or other conflict:
iex> delete_auth_method(%WebhookAuthMethod{id: "non_existing_id"})
-{:error, reason}
Successful deletion:
iex> delete_auth_method(%WebhookAuthMethod{id: "some_id"})
+{:ok, %WebhookAuthMethod{}}
Deletion fails due to the item not existing or other conflict:
iex> delete_auth_method(%WebhookAuthMethod{id: "non_existing_id"})
+{:error, reason}
When a matching WebhookAuthMethod
is found:
iex> Lightning.Workflows.find_by_api_key("existing_api_key", %Project{id: "existing_project_id"})
-%WebhookAuthMethod{}
When there is no matching WebhookAuthMethod
:
iex> Lightning.Workflows.find_by_api_key("non_existing_api_key", %Project{id: "existing_project_id"})
+When a matching WebhookAuthMethod
is found:
iex> Lightning.Workflows.find_by_api_key("existing_api_key", %Project{id: "existing_project_id"})
+%WebhookAuthMethod{}
When there is no matching WebhookAuthMethod
:
iex> Lightning.Workflows.find_by_api_key("non_existing_api_key", %Project{id: "existing_project_id"})
nil
When a WebhookAuthMethod
with the given ID exists:
iex> Lightning.Workflows.find_by_id!("existing_id")
-%WebhookAuthMethod{}
When there is no WebhookAuthMethod
with the given ID:
iex> Lightning.Workflows.find_by_id!("non_existing_id")
+When a WebhookAuthMethod
with the given ID exists:
iex> Lightning.Workflows.find_by_id!("existing_id")
+%WebhookAuthMethod{}
When there is no WebhookAuthMethod
with the given ID:
iex> Lightning.Workflows.find_by_id!("non_existing_id")
** (Ecto.NoResultsError)
@@ -652,8 +652,8 @@ find_by_username_and_password(username, pas
Examples
-When a matching WebhookAuthMethod
is found and the password is valid:
iex> Lightning.Workflows.find_by_username_and_password("existing_username", "valid_password", %Project{id: "existing_project_id"})
-%WebhookAuthMethod{}
When the username is found but the password is invalid or no matching record is found:
iex> Lightning.Workflows.find_by_username_and_password("existing_username", "invalid_password", %Project{id: "existing_project_id"})
+When a matching WebhookAuthMethod
is found and the password is valid:
iex> Lightning.Workflows.find_by_username_and_password("existing_username", "valid_password", %Project{id: "existing_project_id"})
+%WebhookAuthMethod{}
When the username is found but the password is invalid or no matching record is found:
iex> Lightning.Workflows.find_by_username_and_password("existing_username", "invalid_password", %Project{id: "existing_project_id"})
nil
@@ -702,9 +702,9 @@ list_for_project(project)
Examples
-When the project exists and has associated auth methods:
iex> list_for_project(%Project{id: "existing_project_id"})
-[%WebhookAuthMethod{}, ...]
When the project does not exist or has no associated auth methods:
iex> list_for_project(%Project{id: "non_existing_project_id"})
-[]
+When the project exists and has associated auth methods:
iex> list_for_project(%Project{id: "existing_project_id"})
+[%WebhookAuthMethod{}, ...]
When the project does not exist or has no associated auth methods:
iex> list_for_project(%Project{id: "non_existing_project_id"})
+[]
@@ -752,9 +752,9 @@ list_for_trigger(trigger)
Examples
-When the Trigger
has associated WebhookAuthMethod
s not scheduled for deletion:
iex> Lightning.Workflows.list_for_trigger(%Trigger{id: "existing_trigger_id"})
-[%WebhookAuthMethod{}, ...]
When the Trigger
has no associated WebhookAuthMethod
s or they are all scheduled for deletion:
iex> Lightning.Workflows.list_for_trigger(%Trigger{id: "trigger_without_methods"})
-[]
+When the Trigger
has associated WebhookAuthMethod
s not scheduled for deletion:
iex> Lightning.Workflows.list_for_trigger(%Trigger{id: "existing_trigger_id"})
+[%WebhookAuthMethod{}, ...]
When the Trigger
has no associated WebhookAuthMethod
s or they are all scheduled for deletion:
iex> Lightning.Workflows.list_for_trigger(%Trigger{id: "trigger_without_methods"})
+[]
@@ -807,10 +807,10 @@ perform(job)
Example
-%Oban.Job{
-args: %{"type" => "purge_deleted"}
-}
-|> MyModule.perform()
+%Oban.Job{
+args: %{"type" => "purge_deleted"}
+}
+|> MyModule.perform()
# => {:ok, %{disassociated_count: 2, deleted_count: 2}}
@@ -864,9 +864,9 @@ schedule_for_deletion(webhook_auth_method,
Examples
-When a webhook auth method is successfully scheduled for deletion:
iex> Lightning.Workflows.schedule_for_deletion(%WebhookAuthMethod{id: some_id})
-{:ok, %WebhookAuthMethod{scheduled_deletion: deletion_date}}
When scheduling for deletion fails due to validation errors:
iex> Lightning.Workflows.schedule_for_deletion(%WebhookAuthMethod{})
-{:error, %Ecto.Changeset{}}
+When a webhook auth method is successfully scheduled for deletion:
iex> Lightning.Workflows.schedule_for_deletion(%WebhookAuthMethod{id: some_id})
+{:ok, %WebhookAuthMethod{scheduled_deletion: deletion_date}}
When scheduling for deletion fails due to validation errors:
iex> Lightning.Workflows.schedule_for_deletion(%WebhookAuthMethod{})
+{:error, %Ecto.Changeset{}}
@@ -916,9 +916,9 @@ update_auth_method(webhook_auth_method, att
Examples
-Successful update:
iex> update_auth_method(webhook_auth_method, %{field: new_value}, actor: %User{})
-{:ok, %WebhookAuthMethod{}}
Update fails due to invalid data:
iex> update_auth_method(webhook_auth_method, %{field: bad_value}, actor: %User{})
-{:error, %Ecto.Changeset{}}
+Successful update:
iex> update_auth_method(webhook_auth_method, %{field: new_value}, actor: %User{})
+{:ok, %WebhookAuthMethod{}}
Update fails due to invalid data:
iex> update_auth_method(webhook_auth_method, %{field: bad_value}, actor: %User{})
+{:error, %Ecto.Changeset{}}
@@ -974,9 +974,9 @@ update_trigger_auth_methods(trigger, auth_m
Examples
-Successful association update:
iex> update_trigger_auth_methods(trigger, [webhook_auth_method], actor: %User{})
-{:ok, %Trigger{}}
Update fails due to an invalid changeset:
iex> update_trigger_auth_methods(trigger, [invalid_webhook_auth_method], actor: %User{})
-{:error, %Ecto.Changeset{}}
+Successful association update:
iex> update_trigger_auth_methods(trigger, [webhook_auth_method], actor: %User{})
+{:ok, %Trigger{}}
Update fails due to an invalid changeset:
iex> update_trigger_auth_methods(trigger, [invalid_webhook_auth_method], actor: %User{})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.WorkOrder.html b/Lightning.WorkOrder.html
index c797d2ff2a..1324b56642 100644
--- a/Lightning.WorkOrder.html
+++ b/Lightning.WorkOrder.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.WorkOrders.ExportWorker.html b/Lightning.WorkOrders.ExportWorker.html
index 0467e335b8..9064aee18f 100644
--- a/Lightning.WorkOrders.ExportWorker.html
+++ b/Lightning.WorkOrders.ExportWorker.html
@@ -13,7 +13,7 @@
-
+
@@ -138,7 +138,7 @@
This module handles the export of work orders for a given project. The export process is performed asynchronously using the Oban background job system.
## Responsibilities
- Enqueueing Export Jobs: The
enqueue_export/2
function creates and enqueues an Oban job for exporting work orders based on the given project and search parameters. - Processing Exports: The
perform/1
function is the main entry point for executing the export job. It retrieves the project, processes work orders, and handles the export process. - Export Logic: The export logic involves querying work orders, extracting relevant entities, processing logs and dataclips asynchronously, and writing the final export data to files.
- Error Handling: The module includes comprehensive error handling and logging to ensure that issues during the export process are recorded and can be diagnosed.
- Zip File Creation: After processing, the exported files are compressed into a zip file for easy download or further use.
## Usage
- To enqueue an export job, call
enqueue_export/2
with the project and search parameters. - The export process is triggered by Oban and runs in the
history_exports
queue, limited to a single attempt per job.
## Example
# Enqueue an export job
- Lightning.WorkOrders.ExportWorker.enqueue_export(project, search_params)
+ Lightning.WorkOrders.ExportWorker.enqueue_export(project, search_params)
# The job will run in the background and log the status of the export process.
This module is designed to handle potentially large datasets efficiently by using streaming, async processing, and error recovery mechanisms.
diff --git a/Lightning.WorkOrders.Manual.html b/Lightning.WorkOrders.Manual.html
index 551fe0af78..f67bd9b7ea 100644
--- a/Lightning.WorkOrders.Manual.html
+++ b/Lightning.WorkOrders.Manual.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.WorkOrders.Query.html b/Lightning.WorkOrders.Query.html
index a1c57168e2..6eb92ef340 100644
--- a/Lightning.WorkOrders.Query.html
+++ b/Lightning.WorkOrders.Query.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.WorkOrders.RetryManyWorkOrdersJob.html b/Lightning.WorkOrders.RetryManyWorkOrdersJob.html
index b54b30e115..8107de12c1 100644
--- a/Lightning.WorkOrders.RetryManyWorkOrdersJob.html
+++ b/Lightning.WorkOrders.RetryManyWorkOrdersJob.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.WorkOrders.SearchParams.html b/Lightning.WorkOrders.SearchParams.html
index 62f50b4d6c..b093bd5848 100644
--- a/Lightning.WorkOrders.SearchParams.html
+++ b/Lightning.WorkOrders.SearchParams.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.WorkOrders.html b/Lightning.WorkOrders.html
index 3f4d9af4da..ba2e7414d6 100644
--- a/Lightning.WorkOrders.html
+++ b/Lightning.WorkOrders.html
@@ -13,7 +13,7 @@
-
+
@@ -451,7 +451,7 @@ create_for(target, multi \\ Multi.new(), op
-
Create a new Work Order.
For a webhook
create_for(trigger, workflow: workflow, dataclip: dataclip)
For a user
create_for(job, workflow: workflow, dataclip: dataclip, user: user)
+Create a new Work Order.
For a webhook
create_for(trigger, workflow: workflow, dataclip: dataclip)
For a user
create_for(job, workflow: workflow, dataclip: dataclip, user: user)
@@ -503,7 +503,7 @@ get(id, opts \\ [])
-Get a Work Order by id.
Optionally preload associations by passing a list of atoms to :include
.
Lightning.WorkOrders.get(id, include: [:runs])
+Get a Work Order by id.
Optionally preload associations by passing a list of atoms to :include
.
Lightning.WorkOrders.get(id, include: [:runs])
diff --git a/Lightning.Workers.RunToken.html b/Lightning.Workers.RunToken.html
index 08690feac8..04e5d49185 100644
--- a/Lightning.Workers.RunToken.html
+++ b/Lightning.Workers.RunToken.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workers.Token.html b/Lightning.Workers.Token.html
index c1652cfbff..9a0a2f8c16 100644
--- a/Lightning.Workers.Token.html
+++ b/Lightning.Workers.Token.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workers.html b/Lightning.Workers.html
index 446d76397c..1aee6751e7 100644
--- a/Lightning.Workers.html
+++ b/Lightning.Workers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Edge.html b/Lightning.Workflows.Edge.html
index 77cd2c8abb..eeaba90dfe 100644
--- a/Lightning.Workflows.Edge.html
+++ b/Lightning.Workflows.Edge.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Job.html b/Lightning.Workflows.Job.html
index 070f046b90..dd6ecf948a 100644
--- a/Lightning.Workflows.Job.html
+++ b/Lightning.Workflows.Job.html
@@ -13,7 +13,7 @@
-
+
@@ -356,17 +356,17 @@ put_workflow(changeset, workflow)
Attaches a workflow to a job, this is useful when you have an unpersisted
Workflow changeset - and want it to be created at the same time as a Job.
Example:
workflow =
- Ecto.Changeset.cast(
- %Lightning.Workflows.Workflow{},
- %{ "project_id" => attrs[:project_id], "id" => Ecto.UUID.generate() },
- [:project_id, :id]
- )
+ Ecto.Changeset.cast(
+ %Lightning.Workflows.Workflow{},
+ %{ "project_id" => attrs[:project_id], "id" => Ecto.UUID.generate() },
+ [:project_id, :id]
+ )
job =
- %Job{}
- |> Ecto.Changeset.change()
- |> Job.put_workflow(workflow)
- |> Job.changeset(attrs)
+
%Job{}
+ |> Ecto.Changeset.change()
+ |> Job.put_workflow(workflow)
+ |> Job.changeset(attrs)
diff --git a/Lightning.Workflows.Node.html b/Lightning.Workflows.Node.html
index 566f76a56d..bca949d017 100644
--- a/Lightning.Workflows.Node.html
+++ b/Lightning.Workflows.Node.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Presence.html b/Lightning.Workflows.Presence.html
index cca9d493f3..75c4f3d5d0 100644
--- a/Lightning.Workflows.Presence.html
+++ b/Lightning.Workflows.Presence.html
@@ -13,7 +13,7 @@
-
+
@@ -352,27 +352,27 @@ build_presences_summary(presences, params)<
Examples
-iex> presences = [
-...> %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
-...> %{user: %{id: 2}, joined_at: ~N[2024-07-03 12:05:00], active_sessions: 1},
-...> %{user: %{id: 3}, joined_at: ~N[2024-07-03 12:10:00], active_sessions: 1}
-...> ]
-iex> params = %{
-...> current_user_presence: %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
-...> current_user: %{id: 1},
-...> view_only_users_ids: [2]
-...> }
-iex> build_presences_summary(presences, params)
-%{
- presences: [
- %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
- %{user: %{id: 2}, joined_at: ~N[2024-07-03 12:05:00], active_sessions: 1},
- %{user: %{id: 3}, joined_at: ~N[2024-07-03 12:10:00], active_sessions: 1}
- ],
- prior_user_presence: %{user: %{id: 3}, joined_at: ~N[2024-07-03 12:10:00], active_sessions: 1},
- current_user_presence: %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
+iex> presences = [
+...> %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
+...> %{user: %{id: 2}, joined_at: ~N[2024-07-03 12:05:00], active_sessions: 1},
+...> %{user: %{id: 3}, joined_at: ~N[2024-07-03 12:10:00], active_sessions: 1}
+...> ]
+iex> params = %{
+...> current_user_presence: %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
+...> current_user: %{id: 1},
+...> view_only_users_ids: [2]
+...> }
+iex> build_presences_summary(presences, params)
+%{
+ presences: [
+ %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
+ %{user: %{id: 2}, joined_at: ~N[2024-07-03 12:05:00], active_sessions: 1},
+ %{user: %{id: 3}, joined_at: ~N[2024-07-03 12:10:00], active_sessions: 1}
+ ],
+ prior_user_presence: %{user: %{id: 3}, joined_at: ~N[2024-07-03 12:10:00], active_sessions: 1},
+ current_user_presence: %{user: %{id: 1}, joined_at: ~N[2024-07-03 12:00:00], active_sessions: 1},
has_presence_edit_priority: true
-}
+}
@@ -516,8 +516,8 @@ list_presences(topic)
Examples
-iex> Lightning.Workflows.Presence.list_presences("workflow:canvas")
-[%Lightning.Workflows.Presence{user: %User{id: 1}, ...}, ...]
+iex> Lightning.Workflows.Presence.list_presences("workflow:canvas")
+[%Lightning.Workflows.Presence{user: %User{id: 1}, ...}, ...]
@@ -553,12 +553,12 @@ new_user_presence(user, joined_at, active_s
Examples
-iex> Lightning.Workflows.Presence.new_user_presence(%User{id: 1}, 1625597762000000)
-%Lightning.Workflows.Presence{
- user: %User{id: 1},
+iex> Lightning.Workflows.Presence.new_user_presence(%User{id: 1}, 1625597762000000)
+%Lightning.Workflows.Presence{
+ user: %User{id: 1},
joined_at: 1625597762000000,
active_sessions: 0
-}
+}
@@ -636,7 +636,7 @@ track_user_presence(user, topic, pid)
Examples
-iex> Lightning.Workflows.Presence.track_user_presence(%User{id: 1}, "room:lobby", self())
+iex> Lightning.Workflows.Presence.track_user_presence(%User{id: 1}, "room:lobby", self())
:ok
diff --git a/Lightning.Workflows.Query.html b/Lightning.Workflows.Query.html
index 9632c225a8..faa688b514 100644
--- a/Lightning.Workflows.Query.html
+++ b/Lightning.Workflows.Query.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Scheduler.html b/Lightning.Workflows.Scheduler.html
index f2c81345e4..10e5698139 100644
--- a/Lightning.Workflows.Scheduler.html
+++ b/Lightning.Workflows.Scheduler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Snapshot.Edge.html b/Lightning.Workflows.Snapshot.Edge.html
index faabe76b61..494505521c 100644
--- a/Lightning.Workflows.Snapshot.Edge.html
+++ b/Lightning.Workflows.Snapshot.Edge.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Snapshot.Job.html b/Lightning.Workflows.Snapshot.Job.html
index 66f798342c..549250ff05 100644
--- a/Lightning.Workflows.Snapshot.Job.html
+++ b/Lightning.Workflows.Snapshot.Job.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Snapshot.Trigger.html b/Lightning.Workflows.Snapshot.Trigger.html
index 537e2e0523..5dd91238b3 100644
--- a/Lightning.Workflows.Snapshot.Trigger.html
+++ b/Lightning.Workflows.Snapshot.Trigger.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Snapshot.html b/Lightning.Workflows.Snapshot.html
index d7abd91144..8bbb2b77e5 100644
--- a/Lightning.Workflows.Snapshot.html
+++ b/Lightning.Workflows.Snapshot.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Trigger.html b/Lightning.Workflows.Trigger.html
index 611a3f4c9b..aa51ded153 100644
--- a/Lightning.Workflows.Trigger.html
+++ b/Lightning.Workflows.Trigger.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Triggers.Events.html b/Lightning.Workflows.Triggers.Events.html
index b3d3e35b6d..051c0d0d68 100644
--- a/Lightning.Workflows.Triggers.Events.html
+++ b/Lightning.Workflows.Triggers.Events.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Triggers.KafkaConfiguration.html b/Lightning.Workflows.Triggers.KafkaConfiguration.html
index 30aa9a8cfb..bacc7f27de 100644
--- a/Lightning.Workflows.Triggers.KafkaConfiguration.html
+++ b/Lightning.Workflows.Triggers.KafkaConfiguration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.WebhookAuthMethod.html b/Lightning.Workflows.WebhookAuthMethod.html
index c1cbea7ff5..70fede481b 100644
--- a/Lightning.Workflows.WebhookAuthMethod.html
+++ b/Lightning.Workflows.WebhookAuthMethod.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.WebhookAuthMethodAudit.html b/Lightning.Workflows.WebhookAuthMethodAudit.html
index 4c9a3c93da..ff01b862d5 100644
--- a/Lightning.Workflows.WebhookAuthMethodAudit.html
+++ b/Lightning.Workflows.WebhookAuthMethodAudit.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Workflow.html b/Lightning.Workflows.Workflow.html
index 1edf645262..b274b95957 100644
--- a/Lightning.Workflows.Workflow.html
+++ b/Lightning.Workflows.Workflow.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.html b/Lightning.Workflows.html
index 8d09a90bc7..34f2fbdd94 100644
--- a/Lightning.Workflows.html
+++ b/Lightning.Workflows.html
@@ -13,7 +13,7 @@
-
+
@@ -444,8 +444,8 @@ change_workflow(workflow, attrs \\ %{})
Examples
-iex> change_workflow(workflow)
-%Ecto.Changeset{data: %Workflow{}}
+iex> change_workflow(workflow)
+%Ecto.Changeset{data: %Workflow{}}
@@ -507,12 +507,12 @@ get_edge_by_trigger(trigger)
Examples
-trigger = %Trigger{id: 1, ...}
-Lightning.Workflows.get_edge_by_trigger(trigger)
+trigger = %Trigger{id: 1, ...}
+Lightning.Workflows.get_edge_by_trigger(trigger)
# => %Edge{source_trigger: %Trigger{}, target_job: %Job{}, ...}
-non_existent_trigger = %Trigger{id: 999, ...}
-Lightning.Workflows.get_edge_by_trigger(non_existent_trigger)
+non_existent_trigger = %Trigger{id: 999, ...}
+Lightning.Workflows.get_edge_by_trigger(non_existent_trigger)
# => nil
@@ -582,10 +582,10 @@ get_trigger_by_webhook(path)
Examples
-Lightning.Workflows.get_trigger_by_webhook("some_path_or_id")
+Lightning.Workflows.get_trigger_by_webhook("some_path_or_id")
# => %Trigger{id: 1, custom_path: "some_path_or_id", ...}
-Lightning.Workflows.get_trigger_by_webhook("non_existent_path_or_id")
+Lightning.Workflows.get_trigger_by_webhook("non_existent_path_or_id")
# => nil
@@ -660,10 +660,10 @@ get_workflow!(id)
Examples
-iex> get_workflow!(123)
-%Workflow{}
+iex> get_workflow!(123)
+%Workflow{}
-iex> get_workflow!(456)
+iex> get_workflow!(456)
** (Ecto.NoResultsError)
@@ -767,8 +767,8 @@ list_workflows()
Examples
-iex> list_workflows()
-[%Workflow{}, ...]
+iex> list_workflows()
+[%Workflow{}, ...]
@@ -798,8 +798,8 @@ mark_for_deletion(workflow, attrs \\ %{})
Examples
-iex> change_request_deletion(workflow)
-%Ecto.Changeset{data: %Workflow{}}
+iex> change_request_deletion(workflow)
+%Ecto.Changeset{data: %Workflow{}}
diff --git a/Lightning.epub b/Lightning.epub
index 759e40f0e91bac46c2fad5b7615bae665ea515d1..73dd57a5d5e489c7f82d41acf1e4e3d01a50bca6 100644
GIT binary patch
delta 239350
zcmXtfV{|4w7i}@Mjj5-$ZQHhO`>E}xw%e&~+qOAV+r0CB_ul+TR(>RFWo4h7v-i$)
zI%QD_C4!<1_z!fD{~Cg(Rw4oi_`j}R0txoNzEKM{AM}5N4>(ja@iCO9WmrewTZZ6J#|~HBt5e62KAOhpba#9BupTVrFk8x%f!#4BpZ9L
z2;O)DqS}O79}rYs=i`)$6{t^;^o*<1ua5WgQawG>cDkhp5}?X$vFfYxR5en8@FwUHb=^Gzrs+8@^~nEiHh?5q!NzsA)!S^D~sCtvgoEQYj+fq>)jDa
z<-1-xs-AU*x0NxuL?hEXPyE;9xTpRi14H
z;+Xuv4#-Q#22rA~upXtHpAjhzO)UhG>>(i36m>b(P4=#4Gs_NZ*0lbpQ6rU
z*llJPEHQtJ>9(m!0WQ!nfbs*u=!IcylD*7_RzZdifpYW&@Pw`Lc$4guv!V3#5tM0TQO2>gcc
ztnFhHE*}WBHh%}x1uawOt69X9L^Z#HU)F&i^qdHCqt+%DY+aCRz209rKp_T7)z4?Z
z*Yhr*q0wnGuNOZW%UcO@kh#F5vQkj%0wl3w!3H5*s?pFiwp8I2;nj#%`ZVS)7eSd|
zoVjw@dLbFJ-H6YlK^>iTo2mBD=C%qjYbDNW1?*-Z0aWO#`Z_&+!pRqe!aI|9XS)7*
zahG4eD@IPyr*^(T9N`EAC!Deqo0p$>&BwiC$R!-*^d53rI`PeDk)xKY=!WvV#^h_Y
z@9a(YLP#vM1EK9FfeO5h06#=v9oEaS!y?<&s&4)Z;%OijDMi02OnW$}q;}97lk>y+
zBy?Z+7^u&P3K|M@Vx$1&0cJ1)q{IIfox0OmEwA7+t%2srOPXyosVzHn{d(GMz5m)%
z;0#TXtT-v&i2%_NOI?@EQ(a-~#4(jWh}DNWH*R5WMSl=7rK}m*l>Vpz8Z(iBRs$oL
zh-i%=#%h0x{((g&DaY=URpHB9W*@7Kh`ku+FzE6AdKmVYrEnuAu#8(hI)VZ&F-fpc
zh(h+R%|qXgllb-z$#s?TIUMA+!8dQO%)1}4>iR-OMS6;l2Urs7nJ5@4?nN*rd-eh4
znMskfE0=4a3`c2gnPrbC91ehi%;*eXlWmsft0ptVlwo3UcY)+E+dwpf6_$@_4QN$G
zPCM;`8G=n2((ZC(`T^>0e-_{nGZ`SZjey0w+@g}qIQlVy)AJM3ii^u@a8t?`-47K;
zn^qZcTOgM3XHVyVLCBu^9QL99>*M0WHeXfzv~V&M&TNh!1&v-!+KR}|kQOlN`=Zl%
z%|O9_P1=Yh*Oc-;kDlK|)$`p_>jgZsOk-aap7u-B(+kUWXs#~NbHbtV6o81KLHxGiYDXp
z-^2!a1Y{+PAi0JvT;gy0wz6E!u4~X5=qCD(d|`}#lTQd-Byn;Y(_)gG(MvvqniYzK
zrRC%G(4|{qrz>n6ZV$Y7Y62X;C+wLgOF(s*`B`v8$=Sl#M#OlcpNCBdLs+ZUo(__|
zt|cRc-M1v_{AZnJ1q8~hdD^%a=xQdVwag6;AOklB7vb&Xq{dILZn!#*zvk|i1-C#s
z{grjIxH^!sf{)9b!dgF)2T`Ec&U%7JMLz- g^3*V1Ly3jLDr@lm80zE%-Eg6$
z_JSKg@-`75V%ust|Jr(YH#k5*dhV`n)Kqy-wp>lHDqST7KJ7Mde+B@r>cOv?B3PaC
zL)WaG6yGS3b{yjcvj7lL?hhc=bAP<&JJN$(Id55eK-W_=Lw8cLR+7Xc#D`9!66At|
zsG`Sy+vpGtQ}+T;
p)cJYmY|a5sDZagViTp
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