From 530e4fe6873dabe9e719fccded057296e4f9059e 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{}
+
@@ -1452,10 +1452,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{}
+
@@ -1484,10 +1484,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{}
+
@@ -1516,10 +1516,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{}
+
@@ -1716,8 +1716,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 234728567e..cdb95053e1 100644 --- a/Lightning.Credentials.html +++ b/Lightning.Credentials.html @@ -338,8 +338,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
notes
@@ -519,11 +519,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"]
@@ -551,8 +551,8 @@ list_credentials()
Examples
-iex> list_credentials()
-[%Credential{}, ...]
+iex> list_credentials()
+[%Credential{}, ...]
@@ -602,8 +602,8 @@ list_credentials_for_user(user_id)
Examples
-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},...]
@@ -698,11 +698,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{}}
@@ -759,11 +759,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.Invocation.html b/Lightning.Invocation.html
index 9cee134943..f6273737ad 100644
--- a/Lightning.Invocation.html
+++ b/Lightning.Invocation.html
@@ -476,8 +476,8 @@ change_dataclip(dataclip, attrs \\ %{})
Examples
-iex> change_dataclip(dataclip)
-%Ecto.Changeset{data: %Dataclip{}}
+iex> change_dataclip(dataclip)
+%Ecto.Changeset{data: %Dataclip{}}
@@ -507,8 +507,8 @@ change_run(run, attrs \\ %{})
Examples
-iex> change_run(run)
-%Ecto.Changeset{data: %Run{}}
+iex> change_run(run)
+%Ecto.Changeset{data: %Run{}}
@@ -546,11 +546,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{}}
@@ -602,11 +602,11 @@ create_run(attrs \\ %{})
Examples
-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{}}
@@ -634,11 +634,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{}}
@@ -666,11 +666,11 @@ delete_run(run)
Examples
-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{}}
@@ -859,14 +859,14 @@ get_dataclip(run)
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(%Run{id: "a uuid"})
-%Dataclip{}
+iex> get_dataclip(%Run{id: "a uuid"})
+%Dataclip{}
@@ -900,10 +900,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)
@@ -982,10 +982,10 @@ get_run!(id)
Examples
-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 cc1a399ee0..0f409ac8c3 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 922d5ce871..636e120894 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)
diff --git a/Lightning.Jobs.html b/Lightning.Jobs.html
index ad92fa6d42..6588a0493c 100644
--- a/Lightning.Jobs.html
+++ b/Lightning.Jobs.html
@@ -295,8 +295,8 @@ change_job(job, attrs \\ %{})
Examples
-iex> change_job(job)
-%Ecto.Changeset{data: %Job{}}
+iex> change_job(job)
+%Ecto.Changeset{data: %Job{}}
@@ -326,11 +326,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{}}
@@ -358,11 +358,11 @@ delete_job(job)
Examples
-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{}}
@@ -448,10 +448,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)
@@ -637,11 +637,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.Pipeline.StateAssembler.html b/Lightning.Pipeline.StateAssembler.html
index 5456b75de8..e101437dc1 100644
--- a/Lightning.Pipeline.StateAssembler.html
+++ b/Lightning.Pipeline.StateAssembler.html
@@ -121,7 +121,7 @@
How state is assembled
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> }
+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> }
saved-inputs
diff --git a/Lightning.Policies.Permissions.html b/Lightning.Policies.Permissions.html
index e2a31f759e..e38a612cec 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:
- 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_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
@@ -199,11 +199,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}
@@ -233,10 +233,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.Projects.html b/Lightning.Projects.html
index 83e3e07e58..3a89f8c983 100644
--- a/Lightning.Projects.html
+++ b/Lightning.Projects.html
@@ -540,8 +540,8 @@ change_project(project, attrs \\ %{})
Examples
-iex> change_project(project)
-%Ecto.Changeset{data: %Project{}}
+iex> change_project(project)
+%Ecto.Changeset{data: %Project{}}
@@ -571,11 +571,11 @@ create_project(attrs \\ %{})
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{}}
@@ -604,11 +604,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{}}
@@ -642,8 +642,8 @@ export_project(atom, project_id)
Examples
-iex> export_project(:yaml, project_id)
-{:ok, string}
+iex> export_project(:yaml, project_id)
+{:ok, string}
@@ -693,10 +693,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)
@@ -791,10 +791,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)
@@ -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 2c082facdc..bf35de30a5 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 bf30f52f4f..1f33f71a7c 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 ab54577763..9d4034a0ca 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 d456dd48b6..8652f72dd7 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.VersionControl.GithubClient.html b/Lightning.VersionControl.GithubClient.html
index 7009235603..c5e813dddc 100644
--- a/Lightning.VersionControl.GithubClient.html
+++ b/Lightning.VersionControl.GithubClient.html
@@ -446,11 +446,11 @@ delete(client, url, opts)
-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"})
@@ -479,11 +479,11 @@ delete!(client, url, opts)
-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"})
@@ -533,11 +533,11 @@ get(client, url, opts)
-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"})
@@ -566,11 +566,11 @@ get!(client, url, opts)
-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"})
@@ -620,11 +620,11 @@ head(client, url, opts)
-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"})
@@ -653,11 +653,11 @@ head!(client, url, opts)
-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"})
@@ -707,11 +707,11 @@ options(client, url, opts)
-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"})
@@ -740,11 +740,11 @@ options!(client, url, opts)
-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"})
@@ -773,10 +773,10 @@ patch(client, url, body, opts)
-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"])
@@ -805,10 +805,10 @@ patch!(client, url, body, opts)
-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"])
@@ -837,10 +837,10 @@ post(client, url, body, opts)
-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"])
@@ -869,10 +869,10 @@ post!(client, url, body, opts)
-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"])
@@ -901,10 +901,10 @@ put(client, url, body, opts)
-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"])
@@ -933,10 +933,10 @@ put!(client, url, body, opts)
-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"])
@@ -978,11 +978,11 @@ request(client \\ %Tesla.Client{}, options)
Examples
-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"})
@@ -1064,11 +1064,11 @@ trace(client, url, opts)
-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"})
@@ -1097,11 +1097,11 @@ trace!(client, url, opts)
-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"})
diff --git a/Lightning.WorkOrderService.html b/Lightning.WorkOrderService.html
index 4c2e706279..4a5d53f590 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 0cb119373c..0bd7d85110 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 23b08f944b43ae863fe4f65d0a8561e48290298f..0bdcf4376cdd46af44ca4ae60d2bea1c5354b621 100644
GIT binary patch
delta 95493
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