From c693d546a1c837111ae822827f248db3280c86b6 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.CLI.html b/Lightning.CLI.html index 675cdf5bb0..3ac544cdba 100644 --- a/Lightning.CLI.html +++ b/Lightning.CLI.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Credentials.Audit.html b/Lightning.Credentials.Audit.html index 3a4c45594f..7ca1ad9d99 100644 --- a/Lightning.Credentials.Audit.html +++ b/Lightning.Credentials.Audit.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Credentials.Credential.html b/Lightning.Credentials.Credential.html index 82f926379b..1e82e240cb 100644 --- a/Lightning.Credentials.Credential.html +++ b/Lightning.Credentials.Credential.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Credentials.Schema.html b/Lightning.Credentials.Schema.html index 0b1cebe56c..bb492c1526 100644 --- a/Lightning.Credentials.Schema.html +++ b/Lightning.Credentials.Schema.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Credentials.SchemaDocument.html b/Lightning.Credentials.SchemaDocument.html index 1a71d1e44b..f7d38c3a19 100644 --- a/Lightning.Credentials.SchemaDocument.html +++ b/Lightning.Credentials.SchemaDocument.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Credentials.SensitiveValues.html b/Lightning.Credentials.SensitiveValues.html index 3119b3888d..46be1b92b1 100644 --- a/Lightning.Credentials.SensitiveValues.html +++ b/Lightning.Credentials.SensitiveValues.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Credentials.html b/Lightning.Credentials.html index 85a098df72..95dbcc715f 100644 --- a/Lightning.Credentials.html +++ b/Lightning.Credentials.html @@ -13,7 +13,7 @@ - + @@ -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.InvocationReason.html b/Lightning.InvocationReason.html
index 2444b61b4f..1f573e94ad 100644
--- a/Lightning.InvocationReason.html
+++ b/Lightning.InvocationReason.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.InvocationReasons.html b/Lightning.InvocationReasons.html
index 03994770f1..5ab25ead27 100644
--- a/Lightning.InvocationReasons.html
+++ b/Lightning.InvocationReasons.html
@@ -13,7 +13,7 @@
-
+
@@ -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 011badba41..496f3b0fd0 100644
--- a/Lightning.Jobs.Job.html
+++ b/Lightning.Jobs.Job.html
@@ -13,7 +13,7 @@
-
+
@@ -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.MetadataService.Error.html b/Lightning.MetadataService.Error.html
index 354cb93fdd..c4fa580238 100644
--- a/Lightning.MetadataService.Error.html
+++ b/Lightning.MetadataService.Error.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.MetadataService.html b/Lightning.MetadataService.html
index 514416c172..b9b301bba7 100644
--- a/Lightning.MetadataService.html
+++ b/Lightning.MetadataService.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Name.html b/Lightning.Name.html
index 0f6b7d51ed..e097ec546a 100644
--- a/Lightning.Name.html
+++ b/Lightning.Name.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.ObanManager.html b/Lightning.ObanManager.html
index 27bd4b4a41..8734bb6c13 100644
--- a/Lightning.ObanManager.html
+++ b/Lightning.ObanManager.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Pipeline.Runner.Handler.html b/Lightning.Pipeline.Runner.Handler.html
index a134611a2b..18952ee225 100644
--- a/Lightning.Pipeline.Runner.Handler.html
+++ b/Lightning.Pipeline.Runner.Handler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Pipeline.Runner.html b/Lightning.Pipeline.Runner.html
index 5ff683b1bf..a498da99f2 100644
--- a/Lightning.Pipeline.Runner.html
+++ b/Lightning.Pipeline.Runner.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Pipeline.StateAssembler.html b/Lightning.Pipeline.StateAssembler.html
index e3d2884f4f..2117f8e461 100644
--- a/Lightning.Pipeline.StateAssembler.html
+++ b/Lightning.Pipeline.StateAssembler.html
@@ -13,7 +13,7 @@
-
+
@@ -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.Pipeline.html b/Lightning.Pipeline.html index db058f2bca..622bf9db21 100644 --- a/Lightning.Pipeline.html +++ b/Lightning.Pipeline.html @@ -13,7 +13,7 @@ - + diff --git a/Lightning.Policies.Permissions.html b/Lightning.Policies.Permissions.html index 0058e5302e..975f989cfb 100644 --- a/Lightning.Policies.Permissions.html +++ b/Lightning.Policies.Permissions.html @@ -13,7 +13,7 @@ - + @@ -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.Release.html b/Lightning.Release.html
index 7b965ac10a..0efc199137 100644
--- a/Lightning.Release.html
+++ b/Lightning.Release.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Repo.html b/Lightning.Repo.html
index f5e4746dcb..247cebc513 100644
--- a/Lightning.Repo.html
+++ b/Lightning.Repo.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.RunSearchForm.html b/Lightning.RunSearchForm.html
index b2a1e59cca..9ae2304b04 100644
--- a/Lightning.RunSearchForm.html
+++ b/Lightning.RunSearchForm.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runtime.ChildProcess.html b/Lightning.Runtime.ChildProcess.html
index 2ae1786741..fe197172d6 100644
--- a/Lightning.Runtime.ChildProcess.html
+++ b/Lightning.Runtime.ChildProcess.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runtime.Handler.html b/Lightning.Runtime.Handler.html
index 0b28bd16f0..31a8dd99da 100644
--- a/Lightning.Runtime.Handler.html
+++ b/Lightning.Runtime.Handler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runtime.LogAgent.StringBuffer.html b/Lightning.Runtime.LogAgent.StringBuffer.html
index de2ba016a4..abd6098b7c 100644
--- a/Lightning.Runtime.LogAgent.StringBuffer.html
+++ b/Lightning.Runtime.LogAgent.StringBuffer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runtime.LogAgent.html b/Lightning.Runtime.LogAgent.html
index 1eeb0e1093..eace43d283 100644
--- a/Lightning.Runtime.LogAgent.html
+++ b/Lightning.Runtime.LogAgent.html
@@ -13,7 +13,7 @@
-
+
@@ -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.Runtime.Result.html b/Lightning.Runtime.Result.html
index 7f971a2e38..07950bdd60 100644
--- a/Lightning.Runtime.Result.html
+++ b/Lightning.Runtime.Result.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Runtime.RunSpec.html b/Lightning.Runtime.RunSpec.html
index ad839391e9..c0d653e1e5 100644
--- a/Lightning.Runtime.RunSpec.html
+++ b/Lightning.Runtime.RunSpec.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.SafetyString.html b/Lightning.SafetyString.html
index ef9436834d..d1b4c06093 100644
--- a/Lightning.SafetyString.html
+++ b/Lightning.SafetyString.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Scrubber.html b/Lightning.Scrubber.html
index 7b3c2668a7..20c4295891 100644
--- a/Lightning.Scrubber.html
+++ b/Lightning.Scrubber.html
@@ -13,7 +13,7 @@
-
+
@@ -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.SetupUtils.html b/Lightning.SetupUtils.html
index e718ffbc99..07b21be5c6 100644
--- a/Lightning.SetupUtils.html
+++ b/Lightning.SetupUtils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.TaskWorker.html b/Lightning.TaskWorker.html
index 65b8b7ef5a..22586e27b6 100644
--- a/Lightning.TaskWorker.html
+++ b/Lightning.TaskWorker.html
@@ -13,7 +13,7 @@
-
+
@@ -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 b3ee7f7053..0bc787ea8a 100644
--- a/Lightning.Validators.html
+++ b/Lightning.Validators.html
@@ -13,7 +13,7 @@
-
+
@@ -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.Vault.html b/Lightning.Vault.html
index 5f70c1d211..c984782104 100644
--- a/Lightning.Vault.html
+++ b/Lightning.Vault.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.VersionControl.GithubClient.html b/Lightning.VersionControl.GithubClient.html
index e8ad9961e5..af0ab43c66 100644
--- a/Lightning.VersionControl.GithubClient.html
+++ b/Lightning.VersionControl.GithubClient.html
@@ -13,7 +13,7 @@
-
+
@@ -170,7 +170,7 @@
- fire_repository_dispatch(installation_id, repo_name, user_name)
+ fire_repository_dispatch(installation_id, repo_name, user_email)
@@ -332,6 +332,14 @@
+
+
+ send_sentry_error(msg)
+
+
+
+
+
trace(client, url, opts)
@@ -438,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"})
@@ -471,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"})
@@ -485,9 +493,9 @@ delete!(client, url, opts)
Link to this function
- fire_repository_dispatch(installation_id, repo_name, user_name)
+ fire_repository_dispatch(installation_id, repo_name, user_email)
-
+
View Source
@@ -525,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"})
@@ -558,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"})
@@ -574,7 +582,7 @@ get!(client, url, opts)
get_repo_branches(installation_id, repo_name)
-
+
View Source
@@ -612,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"})
@@ -645,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"})
@@ -661,7 +669,7 @@ head!(client, url, opts)
installation_repos(installation_id)
-
+
View Source
@@ -699,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"})
@@ -732,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"})
@@ -765,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"])
@@ -797,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"])
@@ -829,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"])
@@ -861,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"])
@@ -893,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"])
@@ -925,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"])
@@ -970,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"})
@@ -1005,6 +1013,28 @@ request!(client \\ %Tesla.Client{}, options
Perform request and raise in case of error.
This is similar to request/2
behaviour from Tesla 0.x
See request/2
for list of available options.
+
+
+
+
+
+
+
+
+
@@ -1032,11 +1062,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"})
@@ -1065,11 +1095,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.VersionControl.GithubToken.html b/Lightning.VersionControl.GithubToken.html
index 1ff731a7cb..69cee02d8b 100644
--- a/Lightning.VersionControl.GithubToken.html
+++ b/Lightning.VersionControl.GithubToken.html
@@ -13,7 +13,7 @@
-
+
@@ -102,7 +102,7 @@
-
+
View Source
@@ -203,7 +203,7 @@
build(cert, app_id)
-
+
View Source
@@ -236,7 +236,7 @@ build(cert, app_id)
generate_and_sign(extra_claims \\ %{}, key \\ __default_signer__())
-
+
View Source
@@ -269,7 +269,7 @@ generate_and_sign(extra_claims \\ %{}, key
generate_and_sign!(extra_claims \\ %{}, key \\ __default_signer__())
-
+
View Source
@@ -301,7 +301,7 @@ generate_and_sign!(extra_claims \\ %{}, key
verify_and_validate(bearer_token, key \\ __default_signer__(), context \\ %{})
-
+
View Source
@@ -334,7 +334,7 @@ verify_and_validate(bearer_token, key \\ __
verify_and_validate!(bearer_token, key \\ __default_signer__(), context \\ %{})
-
+
View Source
diff --git a/Lightning.VersionControl.ProjectRepo.html b/Lightning.VersionControl.ProjectRepo.html
index f9fb035956..40b2bd86c5 100644
--- a/Lightning.VersionControl.ProjectRepo.html
+++ b/Lightning.VersionControl.ProjectRepo.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.VersionControl.html b/Lightning.VersionControl.html
index ca2c3a7ef9..641a846bc2 100644
--- a/Lightning.VersionControl.html
+++ b/Lightning.VersionControl.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.WorkOrder.html b/Lightning.WorkOrder.html
index 911c63e544..dd20764b03 100644
--- a/Lightning.WorkOrder.html
+++ b/Lightning.WorkOrder.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.WorkOrderService.html b/Lightning.WorkOrderService.html
index 8991608129..9d2ca15bc5 100644
--- a/Lightning.WorkOrderService.html
+++ b/Lightning.WorkOrderService.html
@@ -13,7 +13,7 @@
-
+
@@ -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.Edge.html b/Lightning.Workflows.Edge.html
index c7c7a8068d..3beb297157 100644
--- a/Lightning.Workflows.Edge.html
+++ b/Lightning.Workflows.Edge.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Graph.html b/Lightning.Workflows.Graph.html
index 101261f4d8..e916118fbc 100644
--- a/Lightning.Workflows.Graph.html
+++ b/Lightning.Workflows.Graph.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.Workflow.html b/Lightning.Workflows.Workflow.html
index 0191a12a78..c5c19b1b1d 100644
--- a/Lightning.Workflows.Workflow.html
+++ b/Lightning.Workflows.Workflow.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.Workflows.html b/Lightning.Workflows.html
index 6d5654cda7..c2b6913998 100644
--- a/Lightning.Workflows.html
+++ b/Lightning.Workflows.html
@@ -13,7 +13,7 @@
-
+
@@ -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.Workorders.SearchParams.html b/Lightning.Workorders.SearchParams.html
index b0e27407dc..9ce58299ab 100644
--- a/Lightning.Workorders.SearchParams.html
+++ b/Lightning.Workorders.SearchParams.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Lightning.epub b/Lightning.epub
index 3f97cc7d9aabf3c201938178dd038b4a9669b463..1c4c0ca5d9c6ed1a46e91a809fbe01b1c4aad4ce 100644
GIT binary patch
delta 97478
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