From 52b17e845cef3a52f8fd33d562581dee211879af 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 d99b297fda..9f0ad34b7a 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 66e933b5c4..6649790e4b 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 5487bda169..51fb282da4 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 b7a68b53d3..2d810c6c3a 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 bf883bd376..efe8998feb 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 2f18c2b4e4..e40c321de7 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 125e28cb6b..bcb790eb01 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 0515ea6437..4ac735f18e 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 9673ad0d6c..0e6d55b6e1 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 5c0ab9edcb..76f7368c33 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 cb0a94339f..4e1b2d5270 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 3c89cb14b62a9a9d03aa4c5f962addefc3a2e02a..42de37a63a0d73d3cc803a80741e9d3c6714c815 100644
GIT binary patch
delta 94272
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