From 4919c4c68c7ec8c006ce55460fdbda575c60018d 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 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 09712aa050..0afd7fb50f 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 ac27799c44..cb4c9fadfa 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 9da3a12c13..b6381cc257 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 d2c1a1e1b3..fe1e083b9a 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 b88750659f..0d272cecf7 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 c37ae6f976..a6bc92d402 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 0dc2ad4cbf..c314961b0f 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 6446cbce33..0094acd777 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 1428cc0d0a..d55cb5372c 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 3a026b7693..7fee045de5 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 08ee48a4bc..834751f63f 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 48c99eeec8257536ed8554d02750591a484e57c2..522fc681920073a1868122961d6752c2a583a37d 100644
GIT binary patch
delta 83619
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