From 62454de4b9da91a8ca5f77c7d48e6f3077b53772 Mon Sep 17 00:00:00 2001
From: taylordowns2000 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 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_update_email_instructions(user, cur
Examples
-
+iex> deliver_update_email_instructions(user, current_email, &Routes.user_update_email_url(conn, :edit, &1))
-{:ok, %{to: ..., body: ...}}
iex> deliver_update_email_instructions(user, current_email, &Routes.user_update_email_url(conn, :edit, &1))
+{:ok, %{to: ..., body: ...}}
deliver_user_confirmation_instructions(user
Examples
-
iex> deliver_user_confirmation_instructions(user, &Routes.user_confirmation_url(conn, :edit, &1))
-{:ok, %{to: ..., body: ...}}
+
+iex> deliver_user_confirmation_instructions(confirmed_user, &Routes.user_confirmation_url(conn, :edit, &1))
+{:error, :already_confirmed}iex> deliver_user_confirmation_instructions(user, &Routes.user_confirmation_url(conn, :edit, &1))
+{:ok, %{to: ..., body: ...}}
-iex> deliver_user_confirmation_instructions(confirmed_user, &Routes.user_confirmation_url(conn, :edit, &1))
-{: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_token!(id)
Examples
-iex> get_token!(123)
-%UserToken{}
+
iex> get_token!(123)
+%UserToken{}
-iex> get_token!(456)
+iex> get_token!(456)
** (Ecto.NoResultsError)
get_user!(id)
Examples
-iex> get_user!(123)
-%User{}
+
@@ -1348,10 +1348,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{}
+
@@ -1380,10 +1380,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{}
+
@@ -1412,10 +1412,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{}
+
@@ -1583,8 +1583,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{}}
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{}}
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
@@ -411,10 +411,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 }
create_attempt(work_order, job, reason)
Examples
-iex> create_attempt(%{field: value})
-{:ok, %Attempt{}}
+
+iex> create_attempt(%{field: bad_value})
+{:error, %Ecto.Changeset{}}iex> create_attempt(%{field: value})
+{:ok, %Attempt{}}
-iex> create_attempt(%{field: bad_value})
-{:error, %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"}])
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.Credentials.html b/Lightning.Credentials.html index 0afd7fb50f..28ba5b0d44 100644 --- a/Lightning.Credentials.html +++ b/Lightning.Credentials.html @@ -277,8 +277,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> 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"]
iex> list_credentials()
-[%Credential{}, ...]
+iex> list_credentials()
+[%Credential{}, ...]
iex> list_credentials_for_user(123)
-[%Credential{user_id: 123}, %Credential{user_id: 123},...]
+iex> list_credentials_for_user(123)
+[%Credential{user_id: 123}, %Credential{user_id: 123},...]
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{}}
iex> change_dataclip(dataclip)
-%Ecto.Changeset{data: %Dataclip{}}
+iex> change_dataclip(dataclip)
+%Ecto.Changeset{data: %Dataclip{}}
iex> change_run(run)
-%Ecto.Changeset{data: %Run{}}
+iex> change_run(run)
+%Ecto.Changeset{data: %Run{}}
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{}}
iex> create_run(%{field: value})
-{:ok, %Run{}}
+iex> create_run(%{field: value})
+{:ok, %Run{}}
-iex> create_run(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_run(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
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{}}
iex> delete_run(run)
-{:ok, %Run{}}
+iex> delete_run(run)
+{:ok, %Run{}}
-iex> delete_run(run)
-{:error, %Ecto.Changeset{}}
+iex> delete_run(run)
+{:error, %Ecto.Changeset{}}
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(%Run{id: "a uuid"})
-%Dataclip{}
+iex> get_dataclip(%Run{id: "a uuid"})
+%Dataclip{}
iex> get_dataclip!(123)
-%Dataclip{}
+iex> get_dataclip!(123)
+%Dataclip{}
-iex> get_dataclip!(456)
+iex> get_dataclip!(456)
** (Ecto.NoResultsError)
iex> get_run!(123)
-%Run{}
+iex> get_run!(123)
+%Run{}
-iex> get_run!(456)
+iex> get_run!(456)
** (Ecto.NoResultsError)
@@ -1064,8 +1064,8 @@ list_dataclips()
Examples
-iex> list_dataclips()
-[%Dataclip{}, ...]
+iex> list_dataclips()
+[%Dataclip{}, ...]
@@ -1174,8 +1174,8 @@ list_runs()
Examples
-iex> list_runs()
-[%Run{}, ...]
+iex> list_runs()
+[%Run{}, ...]
@@ -1330,11 +1330,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{}}
@@ -1362,11 +1362,11 @@ update_run(run, attrs)
Examples
-iex> update_run(run, %{field: new_value})
-{:ok, %Run{}}
+iex> update_run(run, %{field: new_value})
+{:ok, %Run{}}
-iex> update_run(run, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_run(run, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.InvocationReasons.html b/Lightning.InvocationReasons.html
index cb4c9fadfa..274bc9f5e2 100644
--- a/Lightning.InvocationReasons.html
+++ b/Lightning.InvocationReasons.html
@@ -273,11 +273,11 @@ create_reason(attrs \\ %{})
Examples
-iex> create_reason(%{field: value})
-{:ok, %InvocationReason{}}
+iex> create_reason(%{field: value})
+{:ok, %InvocationReason{}}
-iex> create_reason(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_reason(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.Jobs.Job.html b/Lightning.Jobs.Job.html
index b6381cc257..93ae641f49 100644
--- a/Lightning.Jobs.Job.html
+++ b/Lightning.Jobs.Job.html
@@ -336,17 +336,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)
iex> change_job(job)
-%Ecto.Changeset{data: %Job{}}
+iex> change_job(job)
+%Ecto.Changeset{data: %Job{}}
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{}}
iex> delete_job(job)
-{:ok, %Job{}}
+iex> delete_job(job)
+{:ok, %Job{}}
-iex> delete_job(job)
-{:error, %Ecto.Changeset{}}
+iex> delete_job(job)
+{:error, %Ecto.Changeset{}}
iex> get_job!(123)
-%Job{}
+iex> get_job!(123)
+%Job{}
-iex> get_job!(456)
+iex> get_job!(456)
** (Ecto.NoResultsError)
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.Pipeline.StateAssembler.html b/Lightning.Pipeline.StateAssembler.html
index fe1e083b9a..ed155164ec 100644
--- a/Lightning.Pipeline.StateAssembler.html
+++ b/Lightning.Pipeline.StateAssembler.html
@@ -121,7 +121,7 @@ For the most common jobs, an inbound webhook will store an :http_request
type
-dataclip. The reason that is created is associated with the dataclip.
At runtime, the initial state for a Run will be in the shape of:
{ "data": <the dataclip>, "configuration": <the job's credential> }
At runtime, the initial state for a Run will be in the shape of:
{ "data": <the dataclip>, "configuration": <the job's credential> }
saved-inputs
diff --git a/Lightning.Policies.Permissions.html b/Lightning.Policies.Permissions.html index 0d272cecf7..5336197548 100644 --- a/Lightning.Policies.Permissions.html +++ b/Lightning.Policies.Permissions.html @@ -115,13 +115,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:
users.ex
file has all the policies for the instances wide access levelsproject_users.ex
file has all the policies for the project wide access levelspermissions.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_job = Lightning.Policies.ProjectUsers |> Lightning.Policies.Permissions.can?(:edit_job, 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_job = Lightning.Policies.ProjectUsers |> Lightning.Policies.Permissions.can?(:edit_job, socket.assigns.current_user, socket.assigns.project)
-if can_edit_job do
+if can_edit_job do
# allow user to edit the job
-else
+else
# quick user out
-end
+end
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}
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
iex> change_project(project)
-%Ecto.Changeset{data: %Project{}}
+iex> change_project(project)
+%Ecto.Changeset{data: %Project{}}
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{}}
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{}}
iex> export_project(:yaml, project_id)
-{:ok, string}
+iex> export_project(:yaml, project_id)
+{:ok, string}
iex> get_project!(123)
-%Project{}
+iex> get_project!(123)
+%Project{}
-iex> get_project!(456)
+iex> get_project!(456)
** (Ecto.NoResultsError)
iex> get_project_user!(123)
-%ProjectUser{}
+iex> get_project_user!(123)
+%ProjectUser{}
-iex> get_project_user!(456)
+iex> get_project_user!(456)
** (Ecto.NoResultsError)
@@ -824,16 +824,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
@@ -862,10 +862,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)
@@ -976,8 +976,8 @@ list_projects()
Examples
-iex> list_projects()
-[%Project{}, ...]
+iex> list_projects()
+[%Project{}, ...]
@@ -1435,11 +1435,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{}}
@@ -1467,11 +1467,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{}}
@@ -1521,8 +1521,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.Runtime.LogAgent.html b/Lightning.Runtime.LogAgent.html
index a6bc92d402..05ba063da7 100644
--- a/Lightning.Runtime.LogAgent.html
+++ b/Lightning.Runtime.LogAgent.html
@@ -115,9 +115,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.Scrubber.html b/Lightning.Scrubber.html
index c314961b0f..a5ef7e93c2 100644
--- a/Lightning.Scrubber.html
+++ b/Lightning.Scrubber.html
@@ -114,11 +114,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.TaskWorker.html b/Lightning.TaskWorker.html
index 0094acd777..301675f0d2 100644
--- a/Lightning.TaskWorker.html
+++ b/Lightning.TaskWorker.html
@@ -117,7 +117,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.Validators.html b/Lightning.Validators.html
index d55cb5372c..5bef836b3c 100644
--- a/Lightning.Validators.html
+++ b/Lightning.Validators.html
@@ -192,10 +192,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"
-)
+)
diff --git a/Lightning.WorkOrderService.html b/Lightning.WorkOrderService.html
index 7fee045de5..dbea625cb6 100644
--- a/Lightning.WorkOrderService.html
+++ b/Lightning.WorkOrderService.html
@@ -342,11 +342,11 @@ create_work_order(attrs \\ %{})
Examples
-iex> create_work_order(%{field: value})
-{:ok, %WorkOrder{}}
+iex> create_work_order(%{field: value})
+{:ok, %WorkOrder{}}
-iex> create_work_order(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_work_order(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.Workflows.html b/Lightning.Workflows.html
index 834751f63f..7eca5233b8 100644
--- a/Lightning.Workflows.html
+++ b/Lightning.Workflows.html
@@ -349,8 +349,8 @@ change_workflow(workflow, attrs \\ %{})
Examples
-iex> change_workflow(workflow)
-%Ecto.Changeset{data: %Workflow{}}
+iex> change_workflow(workflow)
+%Ecto.Changeset{data: %Workflow{}}
@@ -402,11 +402,11 @@ create_workflow(attrs \\ %{})
Examples
-iex> create_workflow(%{field: value})
-{:ok, %Workflow{}}
+iex> create_workflow(%{field: value})
+{:ok, %Workflow{}}
-iex> create_workflow(%{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> create_workflow(%{field: bad_value})
+{:error, %Ecto.Changeset{}}
@@ -434,11 +434,11 @@ delete_workflow(workflow)
Examples
-iex> delete_workflow(workflow)
-{:ok, %Workflow{}}
+iex> delete_workflow(workflow)
+{:ok, %Workflow{}}
-iex> delete_workflow(workflow)
-{:error, %Ecto.Changeset{}}
+iex> delete_workflow(workflow)
+{:error, %Ecto.Changeset{}}
@@ -539,10 +539,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)
@@ -623,8 +623,8 @@ list_workflows()
Examples
-iex> list_workflows()
-[%Workflow{}, ...]
+iex> list_workflows()
+[%Workflow{}, ...]
@@ -654,8 +654,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{}}
@@ -733,11 +733,11 @@ update_workflow(workflow, attrs)
Examples
-iex> update_workflow(workflow, %{field: new_value})
-{:ok, %Workflow{}}
+iex> update_workflow(workflow, %{field: new_value})
+{:ok, %Workflow{}}
-iex> update_workflow(workflow, %{field: bad_value})
-{:error, %Ecto.Changeset{}}
+iex> update_workflow(workflow, %{field: bad_value})
+{:error, %Ecto.Changeset{}}
diff --git a/Lightning.epub b/Lightning.epub
index 522fc681920073a1868122961d6752c2a583a37d..5053930fc48dcdf7189edb3590de0130c75559e1 100644
GIT binary patch
delta 91970
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