From 48a294095f8b939ea793255bb1f0ca5c0c110c10 Mon Sep 17 00:00:00 2001
From: mayel Perform a DELETE request. See Perform a DELETE request. See Perform a DELETE request. See Perform a DELETE request. See Perform a GET request. See Perform a GET request. See Perform a GET request. See Perform a GET request. See Perform a HEAD request. See Perform a HEAD request. See Perform a HEAD request. See Perform a HEAD request. See Perform a OPTIONS request. See Perform a OPTIONS request. See Perform a OPTIONS request. See Perform a OPTIONS request. See Perform a PATCH request. See Perform a PATCH request. See Perform a PATCH request. See Perform a PATCH request. See Perform a POST request. See Perform a POST request. See Perform a POST request. See Perform a POST request. See Perform a PUT request. See Perform a PUT request. See Perform a PUT request. See Perform a PUT request. See Perform a TRACE request. See Perform a TRACE request. See Perform a TRACE request. See Perform a TRACE request. See ACLs represent fully populated access control rules that can be reused.
-Can be reused to secure multiple objects, thus exists independently of any object. The table doesn't have any fields of its own:delete(client, url, opts)
-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"})
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"})
delete!(client, url, opts)
-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"})
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"})
get(client, url, opts)
-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"})
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"})
get!(client, url, opts)
-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"})
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"})
head(client, url, opts)
-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"})
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"})
head!(client, url, opts)
-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"})
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"})
options(client, url, opts)
-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"})
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"})
options!(client, url, opts)
-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"})
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"})
patch(client, url, body, opts)
-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"])
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"])
patch!(client, url, body, opts)
-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"])
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"])
post(client, url, body, opts)
-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"])
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"])
post!(client, url, body, opts)
-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"])
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"])
put(client, url, body, opts)
-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"])
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"])
put!(client, url, body, opts)
-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"])
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"])
request(client \\ %Tesla.Client{}, options)
Examples
-
ExampleApi.request(method: :get, url: "/users/path")
+
+ExampleApi.get("/users/1")
+ExampleApi.post(client, "/users", %{name: "Jon"})ExampleApi.request(method: :get, url: "/users/path")
# use shortcut methods
-ExampleApi.get("/users/1")
-ExampleApi.post(client, "/users", %{name: "Jon"})
trace(client, url, opts)
-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"})
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"})
trace!(client, url, opts)
-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"})
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"})
+Can be reused to secure multiple objects, thus exists independently of any object.has_many(:grants, Grant)
-has_many(:controlled, Controlled)
The table doesn't have any fields of its own:
has_many(:grants, Grant)
+has_many(:controlled, Controlled)
diff --git a/Bonfire.Boundaries.Acts.SetBoundaries.html b/Bonfire.Boundaries.Acts.SetBoundaries.html
index 2a20b215854..c8501cfe620 100644
--- a/Bonfire.Boundaries.Acts.SetBoundaries.html
+++ b/Bonfire.Boundaries.Acts.SetBoundaries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Blocks.LiveHandler.html b/Bonfire.Boundaries.Blocks.LiveHandler.html
index a3078a27f24..6eb8e0f02ef 100644
--- a/Bonfire.Boundaries.Blocks.LiveHandler.html
+++ b/Bonfire.Boundaries.Blocks.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Blocks.html b/Bonfire.Boundaries.Blocks.html
index f4cd56ed537..44dd5c6fbfd 100644
--- a/Bonfire.Boundaries.Blocks.html
+++ b/Bonfire.Boundaries.Blocks.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Circles.html b/Bonfire.Boundaries.Circles.html
index 1cca0489791..f8caa53e456 100644
--- a/Bonfire.Boundaries.Circles.html
+++ b/Bonfire.Boundaries.Circles.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Controlleds.html b/Bonfire.Boundaries.Controlleds.html
index 9e4c8ff2e3b..ea9c8455ab7 100644
--- a/Bonfire.Boundaries.Controlleds.html
+++ b/Bonfire.Boundaries.Controlleds.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Debug.html b/Bonfire.Boundaries.Debug.html
index 5b627f246a3..1408fc965bc 100644
--- a/Bonfire.Boundaries.Debug.html
+++ b/Bonfire.Boundaries.Debug.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Fixtures.html b/Bonfire.Boundaries.Fixtures.html
index cc6fd85df75..73dbd327970 100644
--- a/Bonfire.Boundaries.Fixtures.html
+++ b/Bonfire.Boundaries.Fixtures.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.FixturesUsersMigrations.html b/Bonfire.Boundaries.FixturesUsersMigrations.html
index 87d711ab168..75f3ed5c628 100644
--- a/Bonfire.Boundaries.FixturesUsersMigrations.html
+++ b/Bonfire.Boundaries.FixturesUsersMigrations.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Grants.html b/Bonfire.Boundaries.Grants.html
index 2edc96ccdeb..f6e23c95ccd 100644
--- a/Bonfire.Boundaries.Grants.html
+++ b/Bonfire.Boundaries.Grants.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Integration.html b/Bonfire.Boundaries.Integration.html
index 4495eac0318..003571b6462 100644
--- a/Bonfire.Boundaries.Integration.html
+++ b/Bonfire.Boundaries.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.LiveHandler.html b/Bonfire.Boundaries.LiveHandler.html
index 8464044ef17..883e3cc8ab7 100644
--- a/Bonfire.Boundaries.LiveHandler.html
+++ b/Bonfire.Boundaries.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Queries.html b/Bonfire.Boundaries.Queries.html
index 413ee4bdec1..9c872e56671 100644
--- a/Bonfire.Boundaries.Queries.html
+++ b/Bonfire.Boundaries.Queries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Roles.html b/Bonfire.Boundaries.Roles.html
index ffe601643d3..2c9a8cc5b22 100644
--- a/Bonfire.Boundaries.Roles.html
+++ b/Bonfire.Boundaries.Roles.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.RuntimeConfig.html b/Bonfire.Boundaries.RuntimeConfig.html
index bf04920ac5c..5b4b3153767 100644
--- a/Bonfire.Boundaries.RuntimeConfig.html
+++ b/Bonfire.Boundaries.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Summary.html b/Bonfire.Boundaries.Summary.html
index d5fbfefc288..2afc6b5dc07 100644
--- a/Bonfire.Boundaries.Summary.html
+++ b/Bonfire.Boundaries.Summary.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Users.html b/Bonfire.Boundaries.Users.html
index 735ec3e50a4..6eefb2662d5 100644
--- a/Bonfire.Boundaries.Users.html
+++ b/Bonfire.Boundaries.Users.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Verbs.html b/Bonfire.Boundaries.Verbs.html
index 70655659ccc..88cee3567ee 100644
--- a/Bonfire.Boundaries.Verbs.html
+++ b/Bonfire.Boundaries.Verbs.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Web.ExcludeBoundaries.html b/Bonfire.Boundaries.Web.ExcludeBoundaries.html
index 76c6d4d1376..6705c902058 100644
--- a/Bonfire.Boundaries.Web.ExcludeBoundaries.html
+++ b/Bonfire.Boundaries.Web.ExcludeBoundaries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.Web.Routes.html b/Bonfire.Boundaries.Web.Routes.html
index a5a458ae83e..214ea81c28c 100644
--- a/Bonfire.Boundaries.Web.Routes.html
+++ b/Bonfire.Boundaries.Web.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Boundaries.html b/Bonfire.Boundaries.html
index 2c7480f7ec7..ae71eb7109e 100644
--- a/Bonfire.Boundaries.html
+++ b/Bonfire.Boundaries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Benchmark.html b/Bonfire.Common.Benchmark.html
index aef324f4a15..5cfc806adad 100644
--- a/Bonfire.Common.Benchmark.html
+++ b/Bonfire.Common.Benchmark.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Cache.html b/Bonfire.Common.Cache.html
index fa7fd8e7dcb..2816f7f213c 100644
--- a/Bonfire.Common.Cache.html
+++ b/Bonfire.Common.Cache.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Changelog.Github.DataGrabber.html b/Bonfire.Common.Changelog.Github.DataGrabber.html
index cdfe34c84b6..f93e5d50a1d 100644
--- a/Bonfire.Common.Changelog.Github.DataGrabber.html
+++ b/Bonfire.Common.Changelog.Github.DataGrabber.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Config.Error.html b/Bonfire.Common.Config.Error.html
index 87ea321fcb0..79e56514c77 100644
--- a/Bonfire.Common.Config.Error.html
+++ b/Bonfire.Common.Config.Error.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Config.LoadExtensionsConfig.html b/Bonfire.Common.Config.LoadExtensionsConfig.html
index 1ff948a9dd2..bb052eadd27 100644
--- a/Bonfire.Common.Config.LoadExtensionsConfig.html
+++ b/Bonfire.Common.Config.LoadExtensionsConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Config.html b/Bonfire.Common.Config.html
index b3c910556f0..31ee24842ff 100644
--- a/Bonfire.Common.Config.html
+++ b/Bonfire.Common.Config.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.ConfigModule.html b/Bonfire.Common.ConfigModule.html
index 4dc28ba9932..f28ace0f2e4 100644
--- a/Bonfire.Common.ConfigModule.html
+++ b/Bonfire.Common.ConfigModule.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.ContextModule.html b/Bonfire.Common.ContextModule.html
index 082bde6bc06..46d8f342707 100644
--- a/Bonfire.Common.ContextModule.html
+++ b/Bonfire.Common.ContextModule.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.DatesTimes.html b/Bonfire.Common.DatesTimes.html
index d40f882c15e..81c22b15c04 100644
--- a/Bonfire.Common.DatesTimes.html
+++ b/Bonfire.Common.DatesTimes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Enums.html b/Bonfire.Common.Enums.html
index b12dfc4f2df..2458e86f793 100644
--- a/Bonfire.Common.Enums.html
+++ b/Bonfire.Common.Enums.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Errors.html b/Bonfire.Common.Errors.html
index 4d157abc37d..cab3cc2a376 100644
--- a/Bonfire.Common.Errors.html
+++ b/Bonfire.Common.Errors.html
@@ -13,7 +13,7 @@
-
+
@@ -495,12 +495,12 @@ iex> Exception.format_mfa(Foo, :bar, 1)
-{Foo, :bar, "Foo.bar/1"}
-iex> Exception.format_mfa(Foo, :bar, [])
-{Foo, :bar, "Foo.bar()"}
-iex> Exception.format_mfa(nil, :bar, [])
-{nil, :bar, "nil.bar()"}
Anonymous functions are reported as -func/arity-anonfn-count-, +
iex> Exception.format_mfa(Foo, :bar, 1)
+{Foo, :bar, "Foo.bar/1"}
+iex> Exception.format_mfa(Foo, :bar, [])
+{Foo, :bar, "Foo.bar()"}
+iex> Exception.format_mfa(nil, :bar, [])
+{nil, :bar, "nil.bar()"}
Anonymous functions are reported as -func/arity-anonfn-count-, where func is the name of the enclosing function. Convert to "anonymous fn in func/arity"
diff --git a/Bonfire.Common.Extend.html b/Bonfire.Common.Extend.html index 99c3b28ad92..0f3c4efe1c5 100644 --- a/Bonfire.Common.Extend.html +++ b/Bonfire.Common.Extend.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.ExtensionBehaviour.html b/Bonfire.Common.ExtensionBehaviour.html index ea5cb674a99..e64277f6b28 100644 --- a/Bonfire.Common.ExtensionBehaviour.html +++ b/Bonfire.Common.ExtensionBehaviour.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.ExtensionModule.html b/Bonfire.Common.ExtensionModule.html index 21612970a44..6c653dc8e93 100644 --- a/Bonfire.Common.ExtensionModule.html +++ b/Bonfire.Common.ExtensionModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Extensions.Diff.html b/Bonfire.Common.Extensions.Diff.html index ac66babfb9b..a24045aa14d 100644 --- a/Bonfire.Common.Extensions.Diff.html +++ b/Bonfire.Common.Extensions.Diff.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Extensions.html b/Bonfire.Common.Extensions.html index 484a011ba07..d9edf510eab 100644 --- a/Bonfire.Common.Extensions.html +++ b/Bonfire.Common.Extensions.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.HTTP.Connection.html b/Bonfire.Common.HTTP.Connection.html index 07fcc93b7b1..6c18c4c8695 100644 --- a/Bonfire.Common.HTTP.Connection.html +++ b/Bonfire.Common.HTTP.Connection.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.HTTP.RequestBuilder.html b/Bonfire.Common.HTTP.RequestBuilder.html index 019989e239c..36677128727 100644 --- a/Bonfire.Common.HTTP.RequestBuilder.html +++ b/Bonfire.Common.HTTP.RequestBuilder.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.HTTP.html b/Bonfire.Common.HTTP.html index c0db6e96b1e..be994cc4ff1 100644 --- a/Bonfire.Common.HTTP.html +++ b/Bonfire.Common.HTTP.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Localise.Cldr.AcceptLanguage.html b/Bonfire.Common.Localise.Cldr.AcceptLanguage.html index e8d63ca6bc8..9d82e7f67fc 100644 --- a/Bonfire.Common.Localise.Cldr.AcceptLanguage.html +++ b/Bonfire.Common.Localise.Cldr.AcceptLanguage.html @@ -13,7 +13,7 @@ - + @@ -142,7 +142,7 @@Cldr.LanguageTag
.The format of an Accept-Language
header is as follows in ABNF
format:
Accept-Language = "Accept-Language" ":"
1#( language-range [ ";" "q" "=" qvalue ] )
- language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
Each language-range MAY be given an associated quality value which represents an + language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
Each language-range MAY be given an associated quality value which represents an estimate of the user's preference for the languages specified by that range. The quality value defaults to "q=1". For example,
Accept-Language: da, en-gb;q=0.8, en;q=0.7
would mean: "I prefer Danish, but will accept British English and other types of English."
@@ -255,54 +255,54 @@iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- %Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
+ transform: %{},
+ language_variants: []
+ }}
-iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- %Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
-
-iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("xx,yy;q=0.3")
-{:error,
- {Cldr.NoMatchingLocale,
- "No configured locale could be matched to \"xx,yy;q=0.3\""}}
-
-iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("invalid_tag")
-{:error, {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+ transform: %{},
+ language_variants: []
+ }}
+
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("xx,yy;q=0.3")
+{:error,
+ {Cldr.NoMatchingLocale,
+ "No configured locale could be matched to \"xx,yy;q=0.3\""}}
+
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("invalid_tag")
+{:error, {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
iex> Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- [
- {1.0,
- %Cldr.LanguageTag{
+iex> Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ [
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
- ]}
-
-iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse("invalid_tag")
-{:error,
- {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
-
-iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3,invalid_tag")
-{:ok,
- [
- {1.0,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }}
+ ]}
+
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse("invalid_tag")
+{:error,
+ {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3,invalid_tag")
+{:ok,
+ [
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }},
- {:error,
- {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
- ]}
+ transform: %{},
+ language_variants: []
+ }},
+ {:error,
+ {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+ ]}
iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3")
-[
- {1.0,
- %Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3")
+[
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
-]
+ transform: %{},
+ language_variants: []
+ }}
+]
Bonfire.Common.Localise.Cldr.AcceptLanguage.parse! "invalid_tag"
** (Cldr.AcceptLanguageError) "Expected a BCP47 language tag. Could not parse the remaining "g" starting at position 11
(ex_cldr) lib/cldr/accept_language.ex:304: Cldr.AcceptLanguage.parse!/1
-iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,invalid_tag")
-[
- {1.0,
- %Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,invalid_tag")
+[
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }},
- {:error,
- {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
-]
+ transform: %{},
+ language_variants: []
+ }},
+ {:error,
+ {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+]
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "en-GB"
-{:ok, Cldr.Calendar.GB}
+{:ok, Cldr.Calendar.GB}
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "en-GB-u-ca-gregory"
-{:ok, Cldr.Calendar.Gregorian}
+{:ok, Cldr.Calendar.Gregorian}
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "en"
-{:ok, Cldr.Calendar.US}
+{:ok, Cldr.Calendar.US}
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "fa-IR"
-{:ok, Cldr.Calendar.Persian}
+{:ok, Cldr.Calendar.Persian}
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :US
-{:ok, Cldr.Calendar.Gregorian}
+{:ok, Cldr.Calendar.Gregorian}
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :XX
-{:error, {Cldr.UnknownTerritoryError, "The territory :XX is unknown"}}
iex: MyApp.Cldr.Calendar.strftime_options!
-[
- am_pm_names: #Function<0.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
- month_names: #Function<1.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
- abbreviated_month_names: #Function<2.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
- day_of_week_names: #Function<3.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
- abbreviated_day_of_week_names: #Function<4.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>
-]
iex: NimbleStrftime.format(Date.today(), MyApp.Cldr.Calendar.strftime_options!())
+iex: NimbleStrftime.format(Date.today(), MyApp.Cldr.Calendar.strftime_options!())
MyApp.Cldr.Currency.currencies_for_locale("en") => {:ok, - %{
FJD: %Cldr.Currency{
+ %{ FJD: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "FJD",
- count: %{one: "Fijian dollar", other: "Fijian dollars"},
+ count: %{one: "Fijian dollar", other: "Fijian dollars"},
digits: 2,
from: nil,
iso_digits: 2,
@@ -427,12 +427,12 @@ currencies_for_locale(locale, only \\ :all,
symbol: "FJD",
tender: true,
to: nil
- },
- SUR: %Cldr.Currency{
+ },
+ SUR: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "SUR",
- count: %{one: "Soviet rouble", other: "Soviet roubles"},
+ count: %{one: "Soviet rouble", other: "Soviet roubles"},
digits: 2,
from: nil,
iso_digits: nil,
@@ -442,7 +442,7 @@ currencies_for_locale(locale, only \\ :all,
symbol: "SUR",
tender: true,
to: nil
- },
+ },
...
}}
@@ -493,11 +493,11 @@ currencies_for_locale!(locale, only \\ :all
Example
MyApp.Cldr.Currency.currencies_for_locale!("en")
- => %{
FJD: %Cldr.Currency{
+ => %{FJD: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "FJD",
- count: %{one: "Fijian dollar", other: "Fijian dollars"},
+ count: %{one: "Fijian dollar", other: "Fijian dollars"},
digits: 2,
from: nil,
iso_digits: 2,
@@ -507,12 +507,12 @@ currencies_for_locale!(locale, only \\ :all
symbol: "FJD",
tender: true,
to: nil
-},
-SUR: %Cldr.Currency{
+},
+SUR: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "SUR",
- count: %{one: "Soviet rouble", other: "Soviet roubles"},
+ count: %{one: "Soviet rouble", other: "Soviet roubles"},
digits: 2,
from: nil,
iso_digits: nil,
@@ -522,7 +522,7 @@ currencies_for_locale!(locale, only \\ :all
symbol: "SUR",
tender: true,
to: nil
-},
+},
...
}
@@ -580,13 +580,13 @@ currency_for_code(currency_or_currency_code
Examples
-iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code("AUD")
-{:ok,
- %Cldr.Currency{
+iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code("AUD")
+{:ok,
+ %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "AUD",
- count: %{one: "Australian dollar", other: "Australian dollars"},
+ count: %{one: "Australian dollar", other: "Australian dollars"},
digits: 2,
iso_digits: 2,
name: "Australian Dollar",
@@ -594,15 +594,15 @@ currency_for_code(currency_or_currency_code
rounding: 0,
symbol: "A$",
tender: true
-}}
+}}
-iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code("THB")
-{:ok,
- %Cldr.Currency{
+iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code("THB")
+{:ok,
+ %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "THB",
- count: %{one: "Thai baht", other: "Thai baht"},
+ count: %{one: "Thai baht", other: "Thai baht"},
digits: 2,
iso_digits: 2,
name: "Thai Baht",
@@ -610,7 +610,7 @@ currency_for_code(currency_or_currency_code
rounding: 0,
symbol: "THB",
tender: true
-}}
+}}
@@ -669,12 +669,12 @@ currency_for_code!(currency_or_currency_cod
Examples
-iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code!("AUD")
-%Cldr.Currency{
+iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code!("AUD")
+%Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "AUD",
- count: %{one: "Australian dollar", other: "Australian dollars"},
+ count: %{one: "Australian dollar", other: "Australian dollars"},
digits: 2,
iso_digits: 2,
name: "Australian Dollar",
@@ -682,14 +682,14 @@ currency_for_code!(currency_or_currency_cod
rounding: 0,
symbol: "A$",
tender: true
-}
+}
-iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code!("THB")
-%Cldr.Currency{
+iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code!("THB")
+%Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "THB",
- count: %{one: "Thai baht", other: "Thai baht"},
+ count: %{one: "Thai baht", other: "Thai baht"},
digits: 2,
iso_digits: 2,
name: "Thai Baht",
@@ -697,7 +697,7 @@ currency_for_code!(currency_or_currency_cod
rounding: 0,
symbol: "THB",
tender: true
-}
+}
@@ -738,15 +738,15 @@ currency_from_locale(locale)
Examples
-iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en")
+iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en")
iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale
:USD
-iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en-AU")
+iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en-AU")
iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale
:AUD
-iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale("en-GB")
+iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale("en-GB")
:GBP
@@ -790,14 +790,14 @@ currency_history_for_locale(language_tag)
Example
-iex> MyApp.Cldr.Currency.currency_history_for_locale("en")
-{:ok,
- %{
- USD: %{from: ~D[1792-01-01], to: nil},
- USN: %{tender: false},
- USS: %{from: nil, tender: false, to: ~D[2014-03-01]}
- }
-}
+iex> MyApp.Cldr.Currency.currency_history_for_locale("en")
+{:ok,
+ %{
+ USD: %{from: ~D[1792-01-01], to: nil},
+ USN: %{tender: false},
+ USS: %{from: nil, tender: false, to: ~D[2014-03-01]}
+ }
+}
@@ -856,9 +856,9 @@ currency_strings(locale, only \\ :all, exce
Example
-MyApp.Cldr.Currency.currency_strings("en")
-=> {:ok,
- %{
+MyApp.Cldr.Currency.currency_strings("en")
+=> {:ok,
+ %{
"mexican silver pesos" => :MXP,
"sudanese dinar" => :SDD,
"bad" => :BAD,
@@ -868,7 +868,7 @@ currency_strings(locale, only \\ :all, exce
"guyanaese dollars" => :GYD,
"equatorial guinean ekwele" => :GQE,
...
- }}
+ }}
@@ -927,8 +927,8 @@ currency_strings!(locale_name, only \\ :all
Example
-MyApp.Cldr.Currency.currency_strings!("en")
-=> %{
+MyApp.Cldr.Currency.currency_strings!("en")
+=> %{
"mexican silver pesos" => :MXP,
"sudanese dinar" => :SDD,
"bad" => :BAD,
@@ -938,7 +938,7 @@ currency_strings!(locale_name, only \\ :all
"guyanaese dollars" => :GYD,
"equatorial guinean ekwele" => :GQE,
...
- }
+ }
@@ -976,10 +976,10 @@ current_currency_from_locale(locale)
Example
-iex> MyApp.Cldr.Currency.current_currency_from_locale("en")
+iex> MyApp.Cldr.Currency.current_currency_from_locale("en")
:USD
-iex> MyApp.Cldr.Currency.current_currency_from_locale("en-AU")
+iex> MyApp.Cldr.Currency.current_currency_from_locale("en-AU")
:AUD
@@ -1027,7 +1027,7 @@ current_territory_currencies()
Example
-iex> Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies()
+iex> Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies()
@@ -1119,11 +1119,11 @@ known_currency_code(currency_code)
Examples
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("AUD")
-{:ok, :AUD}
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("AUD")
+{:ok, :AUD}
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("GGG")
-{:error, {Cldr.UnknownCurrencyError, "The currency \"GGG\" is invalid"}}
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("GGG")
+{:error, {Cldr.UnknownCurrencyError, "The currency \"GGG\" is invalid"}}
@@ -1170,13 +1170,13 @@ known_currency_code?(currency_code)
Examples
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("AUD")
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("AUD")
true
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("GGG")
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("GGG")
false
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(:XCV)
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(:XCV)
false
@@ -1211,7 +1211,7 @@ known_currency_codes()
Example
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_codes()
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_codes()
@@ -1270,14 +1270,14 @@ new(currency, options \\ [])
Example
-iex> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: "Custom Name", digits: 0)
-{:ok,
- %Cldr.Currency{
+iex> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: "Custom Name", digits: 0)
+{:ok,
+ %Cldr.Currency{
alt_code: :XAE,
cash_digits: 0,
cash_rounding: nil,
code: :XAE,
- count: %{other: "Custom Name"},
+ count: %{other: "Custom Name"},
digits: 0,
from: nil,
iso_digits: 0,
@@ -1287,11 +1287,11 @@ new(currency, options \\ [])
symbol: "XAE",
tender: false,
to: nil
- }}
-iex> MyApp.Cldr.Currency.new(:XAH, name: "Custom Name")
-{:error, "Required options are missing. Required options are [:name, :digits]"}
-iex> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: "XAE", digits: 0)
-{:error, {Cldr.CurrencyAlreadyDefined, "Currency :XAE is already defined."}}
+ }}
+iex> MyApp.Cldr.Currency.new(:XAH, name: "Custom Name")
+{:error, "Required options are missing. Required options are [:name, :digits]"}
+iex> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: "XAE", digits: 0)
+{:error, {Cldr.CurrencyAlreadyDefined, "Currency :XAE is already defined."}}
@@ -1349,20 +1349,20 @@ pluralize(number, currency, options \\ [])<
Examples
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD)
-{:ok, "US dollar"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD)
+{:ok, "US dollar"}
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(3, :USD)
-{:ok, "US dollars"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(3, :USD)
+{:ok, "US dollars"}
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "zh")
-{:ok, "美元"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "zh")
+{:ok, "美元"}
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "fr")
-{:ok, "dollars des États-Unis"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "fr")
+{:ok, "dollars des États-Unis"}
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD, locale: "fr")
-{:ok, "dollar des États-Unis"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD, locale: "fr")
+{:ok, "dollar des États-Unis"}
@@ -1404,8 +1404,8 @@ strings_for_currency(currency, locale)
Example
-iex> MyApp.Cldr.Currency.strings_for_currency(:AUD, "en")
-["a$", "australian dollars", "aud", "australian dollar"]
+iex> MyApp.Cldr.Currency.strings_for_currency(:AUD, "en")
+["a$", "australian dollars", "aud", "australian dollar"]
diff --git a/Bonfire.Common.Localise.Cldr.Date.Interval.html b/Bonfire.Common.Localise.Cldr.Date.Interval.html
index d5c29a14104..92ec6c15ba0 100644
--- a/Bonfire.Common.Localise.Cldr.Date.Interval.html
+++ b/Bonfire.Common.Localise.Cldr.Date.Interval.html
@@ -13,7 +13,7 @@
-
+
@@ -296,30 +296,30 @@ to_string(from, to, options)
Examples
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]
-{:ok, "Jan 1 – Dec 31, 2020"}
+{:ok, "Jan 1 – Dec 31, 2020"}
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]
-{:ok, "Jan 1 – 12, 2020"}
+{:ok, "Jan 1 – 12, 2020"}
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],
...> format: :long, style: :year_and_month
-{:ok, "January – December 2020"}
+{:ok, "January – December 2020"}
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
...> format: :short
-{:ok, "1/1/2020 – 1/12/2020"}
+{:ok, "1/1/2020 – 1/12/2020"}
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
...> format: :long, locale: "fr"
-{:ok, "mer. 1 – dim. 12 janv. 2020"}
+{:ok, "mer. 1 – dim. 12 janv. 2020"}
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
...> format: :long, locale: "th", number_system: :thai
-{:ok, "พ. ๑ ม.ค. – อา. ๑๒ ม.ค. ๒๐๒๐"}
+
{:ok, "พ. ๑ ม.ค. – อา. ๑๒ ม.ค. ๒๐๒๐"}
@@ -396,17 +396,17 @@ to_string!(from, to, options)
Examples
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31])
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31])
"Jan 1 – Dec 31, 2020"
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12])
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12])
"Jan 1 – 12, 2020"
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
...> format: :long
"Wed, Jan 1 – Sun, Jan 12, 2020"
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-01]),
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-01]),
...> format: :long, style: :year_and_month
"January – December 2020"
@@ -414,11 +414,11 @@ to_string!(from, to, options)
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! ~I"2020-01/12"
"Jan 1 – Dec 31, 2020"
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
...> format: :short
"1/1/2020 – 1/12/2020"
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
...> format: :long, locale: "fr"
"mer. 1 – dim. 12 janv. 2020"
diff --git a/Bonfire.Common.Localise.Cldr.Date.html b/Bonfire.Common.Localise.Cldr.Date.html
index 3e1bd247fd7..dc09fbc040d 100644
--- a/Bonfire.Common.Localise.Cldr.Date.html
+++ b/Bonfire.Common.Localise.Cldr.Date.html
@@ -13,7 +13,7 @@
-
+
@@ -242,22 +242,22 @@ to_string(date, options \\ [])
Examples
iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :medium, locale: "en"
-{:ok, "Jul 10, 2017"}
+{:ok, "Jul 10, 2017"}
iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], locale: "en"
-{:ok, "Jul 10, 2017"}
+{:ok, "Jul 10, 2017"}
iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :full, locale: "en"
-{:ok, "Monday, July 10, 2017"}
+{:ok, "Monday, July 10, 2017"}
iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: "en"
-{:ok, "7/10/17"}
+{:ok, "7/10/17"}
iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: "fr"
-{:ok, "10/07/2017"}
+{:ok, "10/07/2017"}
iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :long, locale: "af"
-{:ok, "10 Julie 2017"}
+{:ok, "10 Julie 2017"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for(:en)
-{:ok, [:buddhist, :chinese, :coptic, :dangi, :ethiopic, :ethiopic_amete_alem,
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for(:en)
+{:ok, [:buddhist, :chinese, :coptic, :dangi, :ethiopic, :ethiopic_amete_alem,
:generic, :gregorian, :hebrew, :indian, :islamic, :islamic_civil,
- :islamic_rgsa, :islamic_tbla, :islamic_umalqura, :japanese, :persian, :roc]}
+ :islamic_rgsa, :islamic_tbla, :islamic_umalqura, :japanese, :persian, :roc]}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en)
-{:ok, %Cldr.Date.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en)
+{:ok, %Cldr.Date.Formats{
full: "EEEE, MMMM d, y",
long: "MMMM d, y",
medium: "MMM d, y",
short: "M/d/yy"
-}}
+}}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en, :buddhist)
-{:ok, %Cldr.Date.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en, :buddhist)
+{:ok, %Cldr.Date.Formats{
full: "EEEE, MMMM d, y G",
long: "MMMM d, y G",
medium: "MMM d, y G",
short: "M/d/y GGGGG"
-}}
+}}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en)
-{:ok, %Cldr.DateTime.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en)
+{:ok, %Cldr.DateTime.Formats{
full: "{1} 'at' {0}",
long: "{1} 'at' {0}",
medium: "{1}, {0}",
- short: "{1}, {0}"}
-}
+ short: "{1}, {0}"}
+}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en, :buddhist)
-{:ok, %Cldr.DateTime.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en, :buddhist)
+{:ok, %Cldr.DateTime.Formats{
full: "{1} 'at' {0}",
long: "{1} 'at' {0}",
medium: "{1}, {0}",
- short: "{1}, {0}"}
-}
+ short: "{1}, {0}"}
+}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats "en"
-{
+{
:ok,
- %{
+ %{
d: "d",
h: "h a",
hm: "h:mm a",
@@ -626,7 +626,7 @@ date_time_available_formats(locale \\ Bonfi
hmv: "h:mm a v",
ms: "mm:ss",
y: "y",
- yw: %{one: "'week' w 'of' Y", other: "'week' w 'of' Y"},
+ yw: %{one: "'week' w 'of' Y", other: "'week' w 'of' Y"},
Bh: "h B",
Bhm: "h:mm B",
Bhms: "h:mm:ss B",
@@ -652,7 +652,7 @@ date_time_available_formats(locale \\ Bonfi
MEd: "E, M/d",
MMM: "LLL",
MMMEd: "E, MMM d",
- MMMMW: %{one: "'week' W 'of' MMMM", other: "'week' W 'of' MMMM"},
+ MMMMW: %{one: "'week' W 'of' MMMM", other: "'week' W 'of' MMMM"},
MMMMd: "MMMM d",
MMMd: "MMM d",
Md: "M/d",
@@ -665,8 +665,8 @@ date_time_available_formats(locale \\ Bonfi
yMd: "M/d/y",
yQQQ: "QQQ y",
yQQQQ: "QQQQ y"
- }
-}
+ }
+}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en)
-{:ok, %Cldr.DateTime.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en)
+{:ok, %Cldr.DateTime.Formats{
full: "{1}, {0}",
long: "{1}, {0}",
medium: "{1}, {0}",
short: "{1}, {0}"
-}}
+}}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en, :buddhist)
-{:ok, %Cldr.DateTime.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en, :buddhist)
+{:ok, %Cldr.DateTime.Formats{
full: "{1}, {0}",
long: "{1}, {0}",
medium: "{1}, {0}",
short: "{1}, {0}"
-}}
+}}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback :en, :gregorian
-[0, " – ", 1]
+[0, " – ", 1]
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format :en
-{:ok, ["GMT", 0]}
+{:ok, ["GMT", 0]}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :en
-{:ok, "GMT"}
+{:ok, "GMT"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :fr
-{:ok, "UTC"}
+{:ok, "UTC"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format "en"
-{:ok, {"+HH:mm", "-HH:mm"}}
+{:ok, {"+HH:mm", "-HH:mm"}}
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en)
-{:ok, %Cldr.Time.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en)
+{:ok, %Cldr.Time.Formats{
full: "h:mm:ss a zzzz",
long: "h:mm:ss a z",
medium: "h:mm:ss a",
short: "h:mm a"
-}}
+}}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en, :buddhist)
-{:ok, %Cldr.Time.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en, :buddhist)
+{:ok, %Cldr.Time.Formats{
full: "h:mm:ss a zzzz",
long: "h:mm:ss a z",
medium: "h:mm:ss a",
short: "h:mm a"
-}}
+}}
iex> Bonfire.Common.Localise.Cldr.DateTime.Formatter.format ~U[2017-09-03 10:23:00.0Z], "yy/MM/dd hh:MM", "en"
-{:ok, "17/09/03 10:09"}
+{:ok, "17/09/03 10:09"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z],
...> ~U[2020-12-31 10:00:00.0Z]
-{:ok, "Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM"}
+{:ok, "Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z], nil
-{:ok, "Jan 1, 2020, 12:00:00 AM –"}
+{:ok, "Jan 1, 2020, 12:00:00 AM –"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(-1)
-{:ok, "1 second ago"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(-1)
+{:ok, "1 second ago"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1)
-{:ok, "in 1 second"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1)
+{:ok, "in 1 second"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day)
-{:ok, "tomorrow"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day)
+{:ok, "tomorrow"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, locale: "fr")
-{:ok, "demain"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, locale: "fr")
+{:ok, "demain"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, style: :narrow)
-{:ok, "tomorrow"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, style: :narrow)
+{:ok, "tomorrow"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year)
-{:ok, "in 1,234 years"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year)
+{:ok, "in 1,234 years"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year, locale: "fr")
-{:ok, "dans 1 234 ans"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year, locale: "fr")
+{:ok, "dans 1 234 ans"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(31)
-{:ok, "in 31 seconds"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(31)
+{:ok, "in 31 seconds"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], relative_to: ~D[2017-04-26])
-{:ok, "in 3 days"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], relative_to: ~D[2017-04-26])
+{:ok, "in 3 days"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :short, locale: "fr")
-{:ok, "dans 5 min"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :short, locale: "fr")
+{:ok, "dans 5 min"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :narrow, locale: "fr")
-{:ok, "+5 min"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :narrow, locale: "fr")
+{:ok, "+5 min"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 2, unit: :wed, style: :short, locale: "en"
-{:ok, "in 2 Wed."}
+{:ok, "in 2 Wed."}
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 1, unit: :wed, style: :short
-{:ok, "next Wed."}
+{:ok, "next Wed."}
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed, style: :short
-{:ok, "last Wed."}
+{:ok, "last Wed."}
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed
-{:ok, "last Wednesday"}
+{:ok, "last Wednesday"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :quarter
-{:ok, "last quarter"}
+{:ok, "last quarter"}
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :mon, locale: "fr"
-{:ok, "lundi dernier"}
+{:ok, "lundi dernier"}
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], unit: :ziggeraut)
-{:error, {Cldr.UnknownTimeUnit,
- "Unknown time unit :ziggeraut. Valid time units are [:day, :fri, :hour, :minute, :mon, :month, :quarter, :sat, :second, :sun, :thu, :tue, :wed, :week, :year]"}}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], unit: :ziggeraut)
+{:error, {Cldr.UnknownTimeUnit,
+ "Unknown time unit :ziggeraut. Valid time units are [:day, :fri, :hour, :minute, :mon, :month, :quarter, :sat, :second, :sun, :thu, :tue, :wed, :week, :year]"}}
iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
+iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime
-{:ok, "Jan 1, 2000, 11:59:59 PM"}
+{:ok, "Jan 1, 2000, 11:59:59 PM"}
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, locale: "en"
-{:ok, "Jan 1, 2000, 11:59:59 PM"}
+{:ok, "Jan 1, 2000, 11:59:59 PM"}
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :long, locale: "en"
-{:ok, "January 1, 2000, 11:59:59 PM UTC"}
+{:ok, "January 1, 2000, 11:59:59 PM UTC"}
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :hms, locale: "en"
-{:ok, "11:59:59 PM"}
+{:ok, "11:59:59 PM"}
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: "en"
-{:ok, "Saturday, January 1, 2000, 11:59:59 PM GMT"}
+{:ok, "Saturday, January 1, 2000, 11:59:59 PM GMT"}
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: "fr"
-{:ok, "samedi 1 janvier 2000, 23:59:59 UTC"}
+{:ok, "samedi 1 janvier 2000, 23:59:59 UTC"}
iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
+iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, locale: "en"
"Jan 1, 2000, 11:59:59 PM"
iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :long, locale: "en"
diff --git a/Bonfire.Common.Localise.Cldr.Interval.html b/Bonfire.Common.Localise.Cldr.Interval.html
index 3fb11d1a9a1..17bab6273f3 100644
--- a/Bonfire.Common.Localise.Cldr.Interval.html
+++ b/Bonfire.Common.Localise.Cldr.Interval.html
@@ -13,7 +13,7 @@
-
+
@@ -306,11 +306,11 @@ to_string(interval, options)
iex> use CalendarInterval
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I"2020-01-01/12",
...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
-iex> Bonfire.Common.Localise.Cldr.Interval.to_string Date.range(~D[2020-01-01], ~D[2020-12-31]),
+iex> Bonfire.Common.Localise.Cldr.Interval.to_string Date.range(~D[2020-01-01], ~D[2020-12-31]),
...> format: :long
-{:ok, "Wed, Jan 1 – Thu, Dec 31, 2020"}
+{:ok, "Wed, Jan 1 – Thu, Dec 31, 2020"}
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]
-{:ok, "Jan 1 – Dec 31, 2020"}
+{:ok, "Jan 1 – Dec 31, 2020"}
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]
-{:ok, "Jan 1 – 12, 2020"}
+{:ok, "Jan 1 – 12, 2020"}
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],
...> format: :long, style: :year_and_month
-{:ok, "January – December 2020"}
+{:ok, "January – December 2020"}
iex> use CalendarInterval
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I"2020-01-01/12",
...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-12-01 10:05:00.0Z],
...> format: :long
-{:ok, "January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC"}
+{:ok, "January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC"}
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:05:00.0Z],
...> format: :long
-{:ok, "January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC"}
+{:ok, "January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC"}
> Bonfire.Common.Localise.Cldr.Language.Language.available_languages(:en)
-["aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb", "af", "afh", "agq", "ain",
+> Bonfire.Common.Localise.Cldr.Language.Language.available_languages(:en)
+["aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb", "af", "afh", "agq", "ain",
"ak", "akk", "akz", "ale", "aln", "alt", "am", "an", "ang", "anp", "ar",
"ar-001", "arc", "arn", "aro", "arp", "arq", "ars", "arw", "ary", "arz", "as",
"asa", "ase", "ast", "av", "avk", "awa", "ay", "az", "ba", "bal", "ban", "bar",
-"bas", "bax", "bbc", "bbj", ...]
+"bas", "bax", "bbc", "bbj", ...]
> Bonfire.Common.Localise.Cldr.Language.Language.known_languages(:en)
-%{"bez" => %{standard: "Bena"}, "lo" => %{standard: "Lao"},
-"kha" => %{standard: "Khasi"}, "eo" => %{standard: "Esperanto"},
-"rm" => %{standard: "Romansh"}, "ja" => %{standard: "Japanese"},
-"sw-CD" => %{standard: "Congo Swahili"},
-"pdc" => %{standard: "Pennsylvania German"}, "om" => %{standard: "Oromo"},
-"jut" => %{standard: "Jutish"}, "lij" => %{standard: "Ligurian"},
-"kut" => %{standard: "Kutenai"}, "vep" => %{standard: "Veps"},
-"yao" => %{standard: "Yao"}, "gez" => %{standard: "Geez"},
-"cr" => %{standard: "Cree"}, "ne" => %{standard: "Nepali"},
-"zbl" => %{standard: "Blissymbols"}, "ae" => %{standard: "Avestan"},
-"rof" => %{standard: "Rombo"}, "tkl" => %{standard: "Tokelau"},
-"rgn" => %{standard: "Romagnol"}, "el" => %{standard: "Greek"},
-"myv" => %{standard: "Erzya"}, "smj" => %{standard: "Lule Sami"},
-"fo" => %{standard: "Faroese"}, "ii" => %{standard: "Sichuan Yi"},
-"bum" => %{standard: "Bulu"}, "za" => %{standard: "Zhuang"},
-"raj" => %{standard: "Rajasthani"}, "mrj" => %{standard: "Western Mari"},
-"stq" => %{standard: "Saterland Frisian"}, "hu" => %{standard: "Hungarian"},
-"mga" => %{standard: "Middle Irish"}, "bej" => %{standard: "Beja"},
-"yue" => %{standard: "Cantonese"}, "xog" => %{standard: "Soga"},
-"ttt" => %{standard: "Muslim Tat"}, "uga" => %{standard: "Ugaritic"},
-"rup" => %{standard: "Aromanian"},
-"crs" => %{standard: "Seselwa Creole French"}, "oc" => %{standard: "Occitan"},
-"chp" => %{standard: "Chipewyan"}, "zen" => %{standard: "Zenaga"},
-"kmb" => %{standard: "Kimbundu"}, "nr" => %{standard: "South Ndebele"},
-"tiv" => %{standard: "Tiv"}, "aln" => %{standard: "Gheg Albanian"},
-"sh" => %{standard: "Serbo-Croatian"}, "fil" => %{...}, ...}
+> Bonfire.Common.Localise.Cldr.Language.Language.known_languages(:en)
+%{"bez" => %{standard: "Bena"}, "lo" => %{standard: "Lao"},
+"kha" => %{standard: "Khasi"}, "eo" => %{standard: "Esperanto"},
+"rm" => %{standard: "Romansh"}, "ja" => %{standard: "Japanese"},
+"sw-CD" => %{standard: "Congo Swahili"},
+"pdc" => %{standard: "Pennsylvania German"}, "om" => %{standard: "Oromo"},
+"jut" => %{standard: "Jutish"}, "lij" => %{standard: "Ligurian"},
+"kut" => %{standard: "Kutenai"}, "vep" => %{standard: "Veps"},
+"yao" => %{standard: "Yao"}, "gez" => %{standard: "Geez"},
+"cr" => %{standard: "Cree"}, "ne" => %{standard: "Nepali"},
+"zbl" => %{standard: "Blissymbols"}, "ae" => %{standard: "Avestan"},
+"rof" => %{standard: "Rombo"}, "tkl" => %{standard: "Tokelau"},
+"rgn" => %{standard: "Romagnol"}, "el" => %{standard: "Greek"},
+"myv" => %{standard: "Erzya"}, "smj" => %{standard: "Lule Sami"},
+"fo" => %{standard: "Faroese"}, "ii" => %{standard: "Sichuan Yi"},
+"bum" => %{standard: "Bulu"}, "za" => %{standard: "Zhuang"},
+"raj" => %{standard: "Rajasthani"}, "mrj" => %{standard: "Western Mari"},
+"stq" => %{standard: "Saterland Frisian"}, "hu" => %{standard: "Hungarian"},
+"mga" => %{standard: "Middle Irish"}, "bej" => %{standard: "Beja"},
+"yue" => %{standard: "Cantonese"}, "xog" => %{standard: "Soga"},
+"ttt" => %{standard: "Muslim Tat"}, "uga" => %{standard: "Ugaritic"},
+"rup" => %{standard: "Aromanian"},
+"crs" => %{standard: "Seselwa Creole French"}, "oc" => %{standard: "Occitan"},
+"chp" => %{standard: "Chipewyan"}, "zen" => %{standard: "Zenaga"},
+"kmb" => %{standard: "Kimbundu"}, "nr" => %{standard: "South Ndebele"},
+"tiv" => %{standard: "Tiv"}, "aln" => %{standard: "Gheg Albanian"},
+"sh" => %{standard: "Serbo-Croatian"}, "fil" => %{...}, ...}
iex> Bonfire.Common.Localise.Cldr.Language.Language.to_string("eo")
-{:ok, "Esperanto"}
+iex> Bonfire.Common.Localise.Cldr.Language.Language.to_string("eo")
+{:ok, "Esperanto"}
Cldr backend module that formats lists.
If we have a list of days like ["Monday", "Tuesday", "Wednesday"]
-then we can format that list for a given locale by:
iex> Bonfire.Common.Localise.Cldr.List.to_string(["Monday", "Tuesday", "Wednesday"], locale: "en")
-{:ok, "Monday, Tuesday, and Wednesday"}
+then we can format that list for a given locale by:iex> Bonfire.Common.Localise.Cldr.List.to_string(["Monday", "Tuesday", "Wednesday"], locale: "en")
+{:ok, "Monday, Tuesday, and Wednesday"}
iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en")
-{:ok, ["a", ", ", "b", ", and ", "c"]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en")
+{:ok, ["a", ", ", "b", ", and ", "c"]}
-iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en", format: :unit_narrow)
-{:ok, ["a", " ", "b", " ", "c"]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en", format: :unit_narrow)
+{:ok, ["a", " ", "b", " ", "c"]}
-iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "fr")
-{:ok, ["a", ", ", "b", " et ", "c"]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "fr")
+{:ok, ["a", ", ", "b", " et ", "c"]}
-iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2,3,4,5,6])
-{:ok, [1, ", ", 2, ", ", 3, ", ", 4, ", ", 5, ", and ", 6]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2,3,4,5,6])
+{:ok, [1, ", ", 2, ", ", 3, ", ", 4, ", ", 5, ", and ", 6]}
-iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a"])
-{:ok, ["a"]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a"])
+{:ok, ["a"]}
-iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2])
-{:ok, [1, " and ", 2]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2])
+{:ok, [1, " and ", 2]}
iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en")
-["a", ", ", "b", ", and ", "c"]
+iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en")
+["a", ", ", "b", ", and ", "c"]
-iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en", format: :unit_narrow)
-["a", " ", "b", " ", "c"]
+iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en", format: :unit_narrow)
+["a", " ", "b", " ", "c"]
iex> Bonfire.Common.Localise.Cldr.List.list_formats_for(:en)
-[:or, :or_narrow, :or_short, :standard, :standard_narrow, :standard_short,
- :unit, :unit_narrow, :unit_short]
+iex> Bonfire.Common.Localise.Cldr.List.list_formats_for(:en)
+[:or, :or_narrow, :or_short, :standard, :standard_narrow, :standard_short,
+ :unit, :unit_narrow, :unit_short]
iex> Bonfire.Common.Localise.Cldr.List.list_patterns_for(:en)
-%{
- or: %{
- 2 => [0, " or ", 1],
- end: [0, ", or ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- },
- or_narrow: %{
- 2 => [0, " or ", 1],
- end: [0, ", or ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- },
- or_short: %{
- 2 => [0, " or ", 1],
- end: [0, ", or ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- },
- standard: %{
- 2 => [0, " and ", 1],
- end: [0, ", and ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- },
- standard_narrow: %{
- 2 => [0, ", ", 1],
- end: [0, ", ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- },
- standard_short: %{
- 2 => [0, " & ", 1],
- end: [0, ", & ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- },
- unit: %{
- 2 => [0, ", ", 1],
- end: [0, ", ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- },
- unit_narrow: %{
- 2 => [0, " ", 1],
- end: [0, " ", 1],
- middle: [0, " ", 1],
- start: [0, " ", 1]
- },
- unit_short: %{
- 2 => [0, ", ", 1],
- end: [0, ", ", 1],
- middle: [0, ", ", 1],
- start: [0, ", ", 1]
- }
-}
+iex> Bonfire.Common.Localise.Cldr.List.list_patterns_for(:en)
+%{
+ or: %{
+ 2 => [0, " or ", 1],
+ end: [0, ", or ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ },
+ or_narrow: %{
+ 2 => [0, " or ", 1],
+ end: [0, ", or ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ },
+ or_short: %{
+ 2 => [0, " or ", 1],
+ end: [0, ", or ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ },
+ standard: %{
+ 2 => [0, " and ", 1],
+ end: [0, ", and ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ },
+ standard_narrow: %{
+ 2 => [0, ", ", 1],
+ end: [0, ", ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ },
+ standard_short: %{
+ 2 => [0, " & ", 1],
+ end: [0, ", & ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ },
+ unit: %{
+ 2 => [0, ", ", 1],
+ end: [0, ", ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ },
+ unit_narrow: %{
+ 2 => [0, " ", 1],
+ end: [0, " ", 1],
+ middle: [0, " ", 1],
+ start: [0, " ", 1]
+ },
+ unit_short: %{
+ 2 => [0, ", ", 1],
+ end: [0, ", ", 1],
+ middle: [0, ", ", 1],
+ start: [0, ", ", 1]
+ }
+}
iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en")
-{:ok, "a, b, and c"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en")
+{:ok, "a, b, and c"}
-iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en", format: :unit_narrow)
-{:ok, "a b c"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en", format: :unit_narrow)
+{:ok, "a b c"}
-iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "fr")
-{:ok, "a, b et c"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "fr")
+{:ok, "a, b et c"}
-iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2,3,4,5,6])
-{:ok, "1, 2, 3, 4, 5, and 6"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2,3,4,5,6])
+{:ok, "1, 2, 3, 4, 5, and 6"}
-iex> Bonfire.Common.Localise.Cldr.List.to_string(["a"])
-{:ok, "a"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string(["a"])
+{:ok, "a"}
-iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2])
-{:ok, "1 and 2"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2])
+{:ok, "1 and 2"}
iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en")
+iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en")
"a, b, and c"
-iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en", format: :unit_narrow)
+iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en", format: :unit_narrow)
"a b c"
iex> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:"fr-CA")
-{:ok, [:"fr-CA", :fr, :und]}
+iex> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:"fr-CA")
+{:ok, [:"fr-CA", :fr, :und]}
# Fallbacks are typically formed by progressively
# stripping variant, territory and script from the
# given locale name. But not always - there are
# certain fallbacks that take a different path.
-iex> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:nb)
-{:ok, [:nb, :no, :und]}
+iex> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:nb)
+{:ok, [:nb, :no, :und]}
Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:"fr-CA")
-=> {:ok,
- [#Cldr.LanguageTag<fr-CA [validated]>, #Cldr.LanguageTag<fr [validated]>,
- #Cldr.LanguageTag<und [validated]>]}
+Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:"fr-CA")
+=> {:ok,
+ [#Cldr.LanguageTag<fr-CA [validated]>, #Cldr.LanguageTag<fr [validated]>,
+ #Cldr.LanguageTag<und [validated]>]}
# Fallbacks are typically formed by progressively
# stripping variant, territory and script from the
# given locale name. But not always - there are
# certain fallbacks that take a different path.
-Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:nb))
-=> {:ok,
- [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>,
- #Cldr.LanguageTag<und [validated]>]}
+Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:nb))
+=> {:ok,
+ [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>,
+ #Cldr.LanguageTag<und [validated]>]}
iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host "a.b.com.au"
-Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:"en-AU")
+Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:"en-AU")
-iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host("a.b.com.tv")
-{:error,
- {Cldr.UnknownLocaleError, "No locale was identified for territory \"tv\""}}
+iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host("a.b.com.tv")
+{:error,
+ {Cldr.UnknownLocaleError, "No locale was identified for territory \"tv\""}}
-iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host("a.b.com")
-{:error,
- {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}
+iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host("a.b.com")
+{:error,
+ {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}
iex> Cldr.Locale.territory_from_host("a.b.com.au")
-{:ok, :AU}
+iex> Cldr.Locale.territory_from_host("a.b.com.au")
+{:ok, :AU}
-iex> Cldr.Locale.territory_from_host("a.b.com")
-{:error,
- {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}
+iex> Cldr.Locale.territory_from_host("a.b.com")
+{:error,
+ {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}
iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"}
"one"
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"}
nil
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"}
"other"
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"}
"other"
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"}
"one"
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"}
nil
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"}
nil
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
"few"
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
"other"
#=> Bonfire.Common.Localise.Cldr.Number.Format.Format.decimal_format_list
-["#", "#,##,##0%",
+["#", "#,##,##0%",
"#,##,##0.###", "#,##,##0.00¤", "#,##,##0.00¤;(#,##,##0.00¤)",
"#,##,##0 %", "#,##0%", "#,##0.###", "#,##0.00 ¤",
"#,##0.00 ¤;(#,##0.00 ¤)", "#,##0.00¤", "#,##0.00¤;(#,##0.00¤)",
@@ -472,7 +472,7 @@ decimal_format_list()
"000 B ¤", "000 E ¤", "000 K ¤", "000 MRD ¤", "000 Md ¤", "000 Mio'.' ¤",
"000 Mio ¤", "000 Mld ¤", "000 Mln ¤", "000 Mn ¤", "000 Mrd'.' ¤",
"000 Mrd ¤", "000 Mr ¤", "000 M ¤", "000 NT ¤", "000 N ¤", "000 Tn ¤",
-"000 Tr ¤", ...]
+"000 Tr ¤", ...]
iex> Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for(:en)
-{:ok, ["#,##0%", "#,##0.###", "#,##0.00", "#,##0.00;(#,##0.00)","#E0",
+iex> Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for(:en)
+{:ok, ["#,##0%", "#,##0.###", "#,##0.00", "#,##0.00;(#,##0.00)","#E0",
"0 billion", "0 million", "0 thousand",
"0 trillion", "00 billion", "00 million", "00 thousand", "00 trillion",
"000 billion", "000 million", "000 thousand", "000 trillion", "000B", "000K",
@@ -529,7 +529,7 @@ decimal_format_list_for(locale \\ Bonfire.C
"¤#,##0.00", "¤#,##0.00;(¤#,##0.00)", "¤000B", "¤000K", "¤000M",
"¤000T", "¤00B", "¤00K", "¤00M", "¤00T", "¤0B", "¤0K", "¤0M", "¤0T",
"¤ #,##0.00", "¤ #,##0.00;(¤ #,##0.00)", "¤ 000B", "¤ 000K", "¤ 000M",
- "¤ 000T", "¤ 00B", "¤ 00K", "¤ 00M", "¤ 00T", "¤ 0B", "¤ 0K", "¤ 0M", "¤ 0T"]}
+ "¤ 000T", "¤ 00B", "¤ 00K", "¤ 00M", "¤ 00T", "¤ 0B", "¤ 0K", "¤ 0M", "¤ 0T"]}
iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for(:en)
-{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
+iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for(:en)
+{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!(:en)
-%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
+iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!(:en)
+%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for("en")
-{:ok, 1}
+iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for("en")
+{:ok, 1}
iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!("en")
+iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!("en")
1
iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"}
"one"
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
nil
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
"two"
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
"two"
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
"one"
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
nil
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
"two"
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
"other"
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
"other"
diff --git a/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html b/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html
index d89d6667a14..bae5a794083 100644
--- a/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html
+++ b/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Localise.Cldr.Number.Symbol.html b/Bonfire.Common.Localise.Cldr.Number.Symbol.html
index e16834891bf..aca5ebf4cad 100644
--- a/Bonfire.Common.Localise.Cldr.Number.Symbol.html
+++ b/Bonfire.Common.Localise.Cldr.Number.Symbol.html
@@ -13,7 +13,7 @@
-
+
@@ -372,9 +372,9 @@ number_symbols_for(locale \\ Bonfire.Common
Example:
-iex> Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for(:th)
-{:ok, %{
- latn: %Cldr.Number.Symbol{
+iex> Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for(:th)
+{:ok, %{
+ latn: %Cldr.Number.Symbol{
decimal: ".",
exponential: "E",
group: ",",
@@ -387,8 +387,8 @@ number_symbols_for(locale \\ Bonfire.Common
plus_sign: "+",
superscripting_exponent: "×",
time_separator: ":"
- },
- thai: %Cldr.Number.Symbol{
+ },
+ thai: %Cldr.Number.Symbol{
decimal: ".",
exponential: "E",
group: ",",
@@ -401,8 +401,8 @@ number_symbols_for(locale \\ Bonfire.Common
plus_sign: "+",
superscripting_exponent: "×",
time_separator: ":"
- }
- }}
+ }
+ }}
diff --git a/Bonfire.Common.Localise.Cldr.Number.System.html b/Bonfire.Common.Localise.Cldr.Number.System.html
index 92c407f4018..5b3f310ff26 100644
--- a/Bonfire.Common.Localise.Cldr.Number.System.html
+++ b/Bonfire.Common.Localise.Cldr.Number.System.html
@@ -13,7 +13,7 @@
-
+
@@ -311,23 +311,23 @@ number_system_for(locale, system_name)
Examples
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "th", :latn
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "en", :default
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "he", :traditional
-{:ok, %{rules: "hebrew", type: :algorithmic}}
+{:ok, %{rules: "hebrew", type: :algorithmic}}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "en", :native
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "en", :finance
-{
+{
:error,
- {Cldr.UnknownNumberSystemError,
- "The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}"}
-}
+
{Cldr.UnknownNumberSystemError,
+ "The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}"}
+}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for "en"
-{:ok, [:latn]}
+{:ok, [:latn]}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for "en"
-{:ok, %{default: :latn, native: :latn}}
+{:ok, %{default: :latn, native: :latn}}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for "th"
-{:ok, %{default: :latn, native: :thai}}
+{:ok, %{default: :latn, native: :thai}}
iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
ex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:default, "en")
-{:ok, :latn}
+ex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:default, "en")
+{:ok, :latn}
-iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from("latn", "en")
-{:ok, :latn}
+iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from("latn", "en")
+{:ok, :latn}
-iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:native, "en")
-{:ok, :latn}
+iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:native, "en")
+{:ok, :latn}
-iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:nope, "en")
-{
+iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:nope, "en")
+{
:error,
- {Cldr.UnknownNumberSystemError, "The number system :nope is unknown"}
-}
Note that return value is not guaranteed to be a valid
+
{Cldr.UnknownNumberSystemError, "The number system :nope is unknown"}
+}
Note that return value is not guaranteed to be a valid number system for the given locale as demonstrated in the third example.
iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123456, :hebr
-{:ok, "קכ״ג׳תנ״ו"}
+{:ok, "קכ״ג׳תנ״ו"}
iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hans
-{:ok, "一百二十三"}
+{:ok, "一百二十三"}
iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hant
-{:ok, "一百二十三"}
+{:ok, "一百二十三"}
iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hansfin
-{:ok, "壹佰贰拾叁"}
+{:ok, "壹佰贰拾叁"}
To configure these transliteration pairs, add the to the use Cldr
configuration
-in a backend module:
defmodule MyApp.Cldr do
+in a backend module:defmodule MyApp.Cldr do
use Cldr,
- locale: ["en", "fr", "th"],
+ locale: ["en", "fr", "th"],
default_locale: "en",
- precompile_transliterations: [{:latn, :thai}, {:arab, :thai}]
-end
Where each tuple in the list configures one transliteration map. In this example, two maps are
+
precompile_transliterations: [{:latn, :thai}, {:arab, :thai}]
+end
Where each tuple in the list configures one transliteration map. In this example, two maps are
configured: from :latn
to :thai
and from :arab
to :thai
.
A list of configurable number systems is returned by Cldr.Number.System.numeric_systems/0
.
If a transliteration is requested between two number pairs that have not been configured for precompilation, a warning is logged.
iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556")
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556")
"123556"
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
"123 556,000"
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
"123556"
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
"๑๒๓๕๕๖"
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
"๑๒๓๕๕๖"
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
"Some number is: ๑๒๓๕๕๖"
diff --git a/Bonfire.Common.Localise.Cldr.Number.html b/Bonfire.Common.Localise.Cldr.Number.html
index 4e22c976e5d..b97336cbf16 100644
--- a/Bonfire.Common.Localise.Cldr.Number.html
+++ b/Bonfire.Common.Localise.Cldr.Number.html
@@ -13,7 +13,7 @@
-
+
@@ -435,19 +435,19 @@ parse(string, options \\ [])
Examples
-iex> Bonfire.Common.Localise.Cldr.Number.parse("+1.000,34", locale: "de")
-{:ok, 1000.34}
+iex> Bonfire.Common.Localise.Cldr.Number.parse("+1.000,34", locale: "de")
+{:ok, 1000.34}
-iex> Bonfire.Common.Localise.Cldr.Number.parse("-1_000_000.34")
-{:ok, -1000000.34}
+iex> Bonfire.Common.Localise.Cldr.Number.parse("-1_000_000.34")
+{:ok, -1000000.34}
-iex> Bonfire.Common.Localise.Cldr.Number.parse("1.000", locale: "de", number: :integer)
-{:ok, 1000}
+iex> Bonfire.Common.Localise.Cldr.Number.parse("1.000", locale: "de", number: :integer)
+{:ok, 1000}
-iex> Bonfire.Common.Localise.Cldr.Number.parse("+1.000,34", locale: "de", number: :integer)
-{:error,
- {Cldr.Number.ParseError,
- "The string \"+1.000,34\" could not be parsed as a number"}}
+iex> Bonfire.Common.Localise.Cldr.Number.parse("+1.000,34", locale: "de", number: :integer)
+{:error,
+ {Cldr.Number.ParseError,
+ "The string \"+1.000,34\" could not be parsed as a number"}}
@@ -519,17 +519,17 @@ resolve_currencies(list, options \\ [])
Examples
-iex> Bonfire.Common.Localise.Cldr.Number.scan("100 US dollars")
+iex> Bonfire.Common.Localise.Cldr.Number.scan("100 US dollars")
...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies
-[100, :USD]
+[100, :USD]
-iex> Bonfire.Common.Localise.Cldr.Number.scan("100 eurosports")
-...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(fuzzy: 0.75)
-[100, :EUR]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("100 eurosports")
+...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(fuzzy: 0.75)
+[100, :EUR]
-iex> Bonfire.Common.Localise.Cldr.Number.scan("100 dollars des États-Unis")
-...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(locale: "fr")
-[100, :USD]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("100 dollars des États-Unis")
+...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(locale: "fr")
+[100, :USD]
@@ -606,19 +606,19 @@ resolve_currency(string, options \\ [])
Examples
-iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("US dollars")
-[:USD]
+iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("US dollars")
+[:USD]
-iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
-[:EUR]
+iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
+[:EUR]
-iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
-[:USD]
+iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
+[:USD]
-iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("not a known currency", locale: "fr")
-{:error,
- {Cldr.UnknownCurrencyError,
- "The currency \"not a known currency\" is unknown or not supported"}}
+iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("not a known currency", locale: "fr")
+{:error,
+ {Cldr.UnknownCurrencyError,
+ "The currency \"not a known currency\" is unknown or not supported"}}
@@ -682,13 +682,13 @@ resolve_per(string, options \\ [])
Examples
iex> Bonfire.Common.Localise.Cldr.Number.resolve_per "11%"
-["11", :percent]
+["11", :percent]
iex> Bonfire.Common.Localise.Cldr.Number.resolve_per "% of linguists"
-[:percent, " of linguists"]
+[:percent, " of linguists"]
iex> Bonfire.Common.Localise.Cldr.Number.resolve_per "% of linguists %"
-[:percent, " of linguists ", :percent]
+ [:percent, " of linguists ", :percent]
iex> Bonfire.Common.Localise.Cldr.Number.scan("100%")
-...> |> Bonfire.Common.Localise.Cldr.Number.resolve_pers()
-[100, :percent]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("100%")
+...> |> Bonfire.Common.Localise.Cldr.Number.resolve_pers()
+[100, :percent]
iex> Bonfire.Common.Localise.Cldr.Number.scan("£1_000_000.34")
-["£", 1000000.34]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("£1_000_000.34")
+["£", 1000000.34]
-iex> Bonfire.Common.Localise.Cldr.Number.scan("I want £1_000_000 dollars")
-["I want £", 1000000, " dollars"]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("I want £1_000_000 dollars")
+["I want £", 1000000, " dollars"]
-iex> Bonfire.Common.Localise.Cldr.Number.scan("The prize is 23")
-["The prize is ", 23]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("The prize is 23")
+["The prize is ", 23]
-iex> Bonfire.Common.Localise.Cldr.Number.scan("The lottery number is 23 for the next draw")
-["The lottery number is ", 23, " for the next draw"]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("The lottery number is 23 for the next draw")
+["The lottery number is ", 23, " for the next draw"]
-iex> Bonfire.Common.Localise.Cldr.Number.scan("The loss is -1.000 euros", locale: "de", number: :integer)
-["The loss is ", -1000, " euros"]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("The loss is -1.000 euros", locale: "de", number: :integer)
+["The loss is ", -1000, " euros"]
iex> Bonfire.Common.Localise.Cldr.Number.to_approx_string 1234
-{:ok, "~1,234"}
+{:ok, "~1,234"}
iex> Bonfire.Common.Localise.Cldr.Number.to_at_least_string 1234
-{:ok, "1,234+"}
+{:ok, "1,234+"}
iex> Bonfire.Common.Localise.Cldr.Number.to_at_most_string 1234
-{:ok, "≤1,234"}
+{:ok, "≤1,234"}
iex> Bonfire.Common.Localise.Cldr.Number.to_range_string 1234..5678
-{:ok, "1,234–5,678"}
+{:ok, "1,234–5,678"}
Wrapping elements is particularly useful when formatting a number with a currency symbol and the requirement is to have different HTML formatting -applied to the symbol than the number. For example:
iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
+applied to the symbol than the number. For example:iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
...> string, :currency_symbol -> "<span class=\"symbol\">" <> string <> "</span>"
...> string, :number -> "<span class=\"number\">" <> string <> "</span>"
...> string, :currency_space -> "<span>" <> string <> "</span>"
...> string, _other -> string
-...> end)
-{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}
It is also possible and recommended to use the Phoenix.HTML.Tag.content_tag/3
+
...> end)
+{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}
It is also possible and recommended to use the Phoenix.HTML.Tag.content_tag/3
function if wrapping HTML tags since these will ensure HTML entities are
-correctly encoded. For example:
iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
-...> string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: "symbol")
-...> string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: "number")
-...> string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)
+correctly encoded. For example:iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
+...> string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: "symbol")
+...> string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: "number")
+...> string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)
...> string, _other -> string
-...> end)
-{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}
When formatting a number the format is parsed into format elements that might include
+
...> end)
+{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}
When formatting a number the format is parsed into format elements that might include a currency symbol, a literal string, inserted text between a currency symbol and the currency amount, a percent sign, the number itself and several other elements. In some cases it is helpful to be apply specific formatting to each element. @@ -1162,80 +1162,80 @@
iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345
-{:ok, "12,345"}
+{:ok, "12,345"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, locale: "fr"
-{:ok, "12 345"}
+{:ok, "12 345"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1345.32, currency: :EUR, locale: "es", minimum_grouping_digits: 1
-{:ok, "1.345,32 €"}
+{:ok, "1.345,32 €"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1345.32, currency: :EUR, locale: "es"
-{:ok, "1345,32 €"}
+{:ok, "1345,32 €"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, locale: "fr", currency: "USD"
-{:ok, "12 345,00 $US"}
+{:ok, "12 345,00 $US"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: "#E0"
-{:ok, "1.2345E4"}
+{:ok, "1.2345E4"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: "THB"
-{:ok, "THB 12,345.00"}
+{:ok, "THB 12,345.00"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string -12345, format: :accounting, currency: "THB"
-{:ok, "(THB 12,345.00)"}
+{:ok, "(THB 12,345.00)"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: "THB",
...> locale: "th"
-{:ok, "฿12,345.00"}
+{:ok, "฿12,345.00"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: "THB",
...> locale: "th", number_system: :native
-{:ok, "฿๑๒,๓๔๕.๐๐"}
+{:ok, "฿๑๒,๓๔๕.๐๐"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :long
-{:ok, "1 thousand"}
+{:ok, "1 thousand"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :long, currency: "USD"
-{:ok, "1,244 US dollars"}
+{:ok, "1,244 US dollars"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :short
-{:ok, "1K"}
+{:ok, "1K"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :short, currency: "EUR"
-{:ok, "€1K"}
+{:ok, "€1K"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1234, format: :spellout
-{:ok, "one thousand two hundred thirty-four"}
+{:ok, "one thousand two hundred thirty-four"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1234, format: :spellout_verbose
-{:ok, "one thousand two hundred and thirty-four"}
+{:ok, "one thousand two hundred and thirty-four"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 1989, format: :spellout_year
-{:ok, "nineteen eighty-nine"}
+{:ok, "nineteen eighty-nine"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, format: :ordinal
-{:ok, "123rd"}
+{:ok, "123rd"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, format: :roman
-{:ok, "CXXIII"}
+{:ok, "CXXIII"}
iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, locale: "th-u-nu-thai"
-{:ok, "๑๒๓"}
An error tuple {:error, reason}
will be returned if an error is detected.
-The two most likely causes of an error return are:
iex> Bonfire.Common.Localise.Cldr.Number.to_string(12345, format: "0#")
- {:error, {Cldr.FormatCompileError,
- "Decimal format compiler: syntax error before: \"#\""}}
locale
and
+The two most likely causes of an error return are: iex> Bonfire.Common.Localise.Cldr.Number.to_string(12345, format: "0#")
+ {:error, {Cldr.FormatCompileError,
+ "Decimal format compiler: syntax error before: \"#\""}}
locale
and
number_system
. This happens typically when the number system is
:algorithmic
rather than the more common :numeric
. In this case the error
-return looks like: iex> Bonfire.Common.Localise.Cldr.Number.to_string(1234, locale: "he", number_system: "hebr", format: :percent)
- {:error, {Cldr.UnknownFormatError,
- "The locale :he with number system :hebr does not define a format :percent"}}
+return looks like: iex> Bonfire.Common.Localise.Cldr.Number.to_string(1234, locale: "he", number_system: "hebr", format: :percent)
+ {:error, {Cldr.UnknownFormatError,
+ "The locale :he with number system :hebr does not define a format :percent"}}
iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system "en", :latn
-{:ok, :latn}
+{:ok, :latn}
iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system "en", :default
-{:ok, :latn}
+{:ok, :latn}
iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system "en", :unknown
-{:error,
- {Cldr.UnknownNumberSystemError, "The number system :unknown is unknown"}}
+{:error,
+ {Cldr.UnknownNumberSystemError, "The number system :unknown is unknown"}}
iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system "zz", :default
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
Functions to implement the number system rule-based-number-format rules of CLDR.
These rules are defined only on the "und" locale and represent specialised number formatting.
The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets(:und)
-...> |> Enum.sort()
-[
+defined in the Unicode CLDR data repository. Available rules are identified by:iex> Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets(:und)
+...> |> Enum.sort()
+[
:armenian_lower,
:armenian_upper,
:cyrillic_lower,
@@ -155,9 +155,9 @@
:roman_upper,
:tamil,
:zz_default
-]
A rule can then be invoked on an available rule_set. For example
iex> Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)
-"CXXIII"
This particular call is equivalent to the call through the public API of:
iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :roman)
-{:ok, "CXXIII"}
+]
A rule can then be invoked on an available rule_set. For example
iex> Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)
+"CXXIII"
This particular call is equivalent to the call through the public API of:
iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :roman)
+{:ok, "CXXIII"}
Functions to implement the ordinal rule-based-number-format rules of CLDR.
As CLDR notes, the data is incomplete or non-existent for many languages. It is considered complete for English however.
The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets(:en)
-[:digits_ordinal]
+defined in the Unicode CLDR data repository. Available rules are identified by:iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets(:en)
+[:digits_ordinal]
-iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets("fr")
-...> |> Enum.sort()
-[
+iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets("fr")
+...> |> Enum.sort()
+[
:digits_ordinal,
:digits_ordinal_feminine,
:digits_ordinal_feminine_plural,
:digits_ordinal_masculine,
:digits_ordinal_masculine_plural
-]
A rule can then be invoked on an available rule_set. For example
iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)
-"123rd"
This call is equivalent to the call through the public API of:
iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :ordinal)
-{:ok, "123rd"}
+]
A rule can then be invoked on an available rule_set. For example
iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)
+"123rd"
This call is equivalent to the call through the public API of:
iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :ordinal)
+{:ok, "123rd"}
Functions to implement the spellout rule-based-number-format rules of CLDR.
As CLDR notes, the data is incomplete or non-existent for many languages. It is considered complete for English however.
The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets("en")
-...> |> Enum.sort()
-[
+defined in the Unicode CLDR data repository. Available rules are identified by:iex> Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets("en")
+...> |> Enum.sort()
+[
:spellout_cardinal,
:spellout_cardinal_verbose,
:spellout_numbering,
@@ -149,9 +149,9 @@
:spellout_numbering_year,
:spellout_ordinal,
:spellout_ordinal_verbose
-]
A rule can then be invoked on an available rule_set. For example:
iex> Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal(123, "en")
-"one hundred twenty-third"
This call is equivalent to the call through the public API of:
iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :spellout)
-{:ok, "one hundred twenty-three"}
+]
A rule can then be invoked on an available rule_set. For example:
iex> Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal(123, "en")
+"one hundred twenty-third"
This call is equivalent to the call through the public API of:
iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :spellout)
+{:ok, "one hundred twenty-three"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :short
-{:ok, "10 – 10 AM"}
+{:ok, "10 – 10 AM"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :medium
-{:ok, "10:00 – 10:03 AM"}
+{:ok, "10:00 – 10:03 AM"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :long
-{:ok, "10:00 – 10:03 AM"}
+{:ok, "10:00 – 10:03 AM"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],
...> format: :long, style: :flex
-{:ok, "10:00 – 10:03 in the morning"}
+{:ok, "10:00 – 10:03 in the morning"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],
...> format: :long, style: :flex
-{:ok, "12:00 – 10:00 in the morning"}
+{:ok, "12:00 – 10:00 in the morning"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],
...> format: :long, style: :zone
-{:ok, "12:00 – 10:00 AM Etc/UTC"}
+{:ok, "12:00 – 10:00 AM Etc/UTC"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],
...> format: :long, style: :flex, locale: "th"
-{:ok, "10:00 – 10:03 ในตอนเช้า"}
+{:ok, "10:00 – 10:03 ในตอนเช้า"}
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], nil
-{:ok, "10:00:00 AM –"}
+{:ok, "10:00:00 AM –"}
iex> Cldr.Time.to_string ~T[07:35:13.215217]
-{:ok, "7:35:13 AM"}
+{:ok, "7:35:13 AM"}
iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :short
-{:ok, "7:35 AM"}
+{:ok, "7:35 AM"}
iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium, locale: "fr"
-{:ok, "07:35:13"}
+{:ok, "07:35:13"}
iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium
-{:ok, "7:35:13 AM"}
+{:ok, "7:35:13 AM"}
-iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
+iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
iex> Cldr.Time.to_string datetime, format: :long
-{:ok, "11:59:59 PM UTC"}
+{:ok, "11:59:59 PM UTC"}
iex> unit = Cldr.Unit.new!(1.83, :meter)
-iex> Bonfire.Common.Localise.Cldr.Unit.localize(unit, usage: :person_height, territory: :US)
-[
- Cldr.Unit.new!(:foot, 6, usage: :person_height),
- Cldr.Unit.new!(:inch, "0.04724409448818897637795275598", usage: :person_height)
-]
+iex> unit = Cldr.Unit.new!(1.83, :meter)
+iex> Bonfire.Common.Localise.Cldr.Unit.localize(unit, usage: :person_height, territory: :US)
+[
+ Cldr.Unit.new!(:foot, 6, usage: :person_height),
+ Cldr.Unit.new!(:inch, "0.04724409448818897637795275598", usage: :person_height)
+]
iex> Bonfire.Common.Localise.Cldr.Unit.parse "1kg"
-Cldr.Unit.new(1, :kilogram)
+Cldr.Unit.new(1, :kilogram)
iex> Bonfire.Common.Localise.Cldr.Unit.parse "1 tages", locale: "de"
-Cldr.Unit.new(1, :day)
+Cldr.Unit.new(1, :day)
iex> Bonfire.Common.Localise.Cldr.Unit.parse "1 tag", locale: "de"
-Cldr.Unit.new(1, :day)
+Cldr.Unit.new(1, :day)
-iex> Bonfire.Common.Localise.Cldr.Unit.parse("42 millispangels")
-{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
+iex> Bonfire.Common.Localise.Cldr.Unit.parse("42 millispangels")
+{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
iex> Bonfire.Common.Localise.Cldr.Unit.parse! "1kg"
-Cldr.Unit.new!(1, :kilogram)
+Cldr.Unit.new!(1, :kilogram)
iex> Bonfire.Common.Localise.Cldr.Unit.parse! "1 tages", locale: "de"
-Cldr.Unit.new!(1, :day)
+Cldr.Unit.new!(1, :day)
-iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 candela per lux")
-Cldr.Unit.new!(42, "candela per lux")
+iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 candela per lux")
+Cldr.Unit.new!(42, "candela per lux")
-iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 millispangels")
+iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 millispangels")
** (Cldr.UnknownUnitError) Unknown unit was detected at "spangels"
iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "kg"
-{:ok, :kilogram}
+{:ok, :kilogram}
iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "w"
-{:ok, :watt}
+{:ok, :watt}
iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "w", only: :duration
-{:ok, :week}
+{:ok, :week}
-iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "m", only: [:year, :month, :day]
-{:ok, :month}
+iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "m", only: [:year, :month, :day]
+{:ok, :month}
iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "tages", locale: "de"
-{:ok, :day}
+{:ok, :day}
iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "tag", locale: "de"
-{:ok, :day}
+{:ok, :day}
-iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name("millispangels")
-{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
+iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name("millispangels")
+{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
iex> meter = Cldr.Unit.new!(:meter, 1)
+iex> meter = Cldr.Unit.new!(:meter, 1)
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-US", usage: :person_height
-{:ok, [:foot, :inch], []}
+{:ok, [:foot, :inch], []}
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-US", usage: :person
-{:ok, [:inch], []}
+{:ok, [:inch], []}
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-AU", usage: :person
-{:ok, [:centimeter], []}
+{:ok, [:centimeter], []}
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-US", usage: :road
-{:ok, [:foot], [round_nearest: 1]}
+{:ok, [:foot], [round_nearest: 1]}
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-AU", usage: :road
-{:ok, [:meter], [round_nearest: 1]}
+{:ok, [:meter], [round_nearest: 1]}
iex> meter = Cldr.Unit.new!(:meter, 2)
+iex> meter = Cldr.Unit.new!(:meter, 2)
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-US", usage: :person_height
-[:foot, :inch]
+[:foot, :inch]
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-AU", usage: :person
-[:centimeter]
+[:centimeter]
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-US", usage: :road
-[:foot]
+[:foot]
iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-AU", usage: :road
-[:meter]
+[:meter]
iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist Cldr.Unit.new!(:gallon, 123)
-{:ok, ["123", " gallons"]}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist Cldr.Unit.new!(:gallon, 123)
+{:ok, ["123", " gallons"]}
iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist! 123, unit: :gallon
-["123", " gallons"]
+["123", " gallons"]
iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 123)
-{:ok, "123 gallons"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 123)
+{:ok, "123 gallons"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1)
-{:ok, "1 gallon"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1)
+{:ok, "1 gallon"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af"
-{:ok, "1 gelling"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af"
+{:ok, "1 gelling"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af-NA"
-{:ok, "1 gelling"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af-NA"
+{:ok, "1 gelling"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "bs"
-{:ok, "1 galon"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "bs"
+{:ok, "1 galon"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :long
-{:ok, "1 thousand gallons"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :long
+{:ok, "1 thousand gallons"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :short
-{:ok, "1K gallons"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :short
+{:ok, "1K gallons"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234)
-{:ok, "1,234 megahertz"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234)
+{:ok, "1,234 megahertz"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234), style: :narrow
-{:ok, "1,234MHz"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234), style: :narrow
+{:ok, "1,234MHz"}
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megabyte, 1234), locale: "en", style: :unknown
-{:error, {Cldr.UnknownFormatError, "The unit style :unknown is not known."}}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megabyte, 1234), locale: "en", style: :unknown
+{:error, {Cldr.UnknownFormatError, "The unit style :unknown is not known."}}
iex> Bonfire.Common.Localise.Cldr.default_locale()
-%Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.default_locale()
+%Cldr.LanguageTag{
backend: Bonfire.Common.Localise.Cldr,
canonical_locale_name: "en-001",
cldr_locale_name: :"en-001",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en-001",
script: :Latn,
territory: :"001",
- transform: %{},
- language_variants: []
-}
+ transform: %{},
+ language_variants: []
+}
iex> Bonfire.Common.Localise.Cldr.default_territory()
+iex> Bonfire.Common.Localise.Cldr.default_territory()
:"001"
iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore")
+iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore")
"And furthermore…"
-iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja)
+iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja)
"And furthermore…there is much to be done"
-iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore", format: :word)
+iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore", format: :word)
"And furthermore …"
-iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja, format: :word)
+iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja, format: :word)
"And furthermore … there is much to be done"
@@ -709,23 +709,23 @@ get_locale()
Example
-iex> Bonfire.Common.Localise.Cldr.put_locale("pl")
-iex> Bonfire.Common.Localise.Cldr.get_locale()
-%Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.put_locale("pl")
+iex> Bonfire.Common.Localise.Cldr.get_locale()
+%Cldr.LanguageTag{
backend: Elixir.Bonfire.Common.Localise.Cldr,
canonical_locale_name: "pl",
cldr_locale_name: :pl,
- extensions: %{},
+ extensions: %{},
language: "pl",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :pl,
territory: :PL,
requested_locale_name: "pl",
script: :Latn,
- transform: %{},
- language_variants: []
- }
+ transform: %{},
+ language_variants: []
+ }
@@ -812,10 +812,10 @@ known_gettext_locale_name(locale_name)
Examples
-iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en")
+iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en")
"en"
-iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en-SA")
+iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en-SA")
false
@@ -858,10 +858,10 @@ known_gettext_locale_name?(locale_name)
Examples
-iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("en")
+iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("en")
true
-iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("!!")
+iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("!!")
false
@@ -935,10 +935,10 @@ known_locale_name(locale_name)
Examples
-iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-AU")
+iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-AU")
:"en-AU"
-iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-SA")
+iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-SA")
false
@@ -980,10 +980,10 @@ known_locale_name?(locale_name)
Examples
-iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:en)
+iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:en)
true
-iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:"!!")
+iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:"!!")
false
@@ -1037,8 +1037,8 @@ known_number_system_types()
Example
-iex> Bonfire.Common.Localise.Cldr.known_number_system_types()
-[:default, :finance, :native, :traditional]
+iex> Bonfire.Common.Localise.Cldr.known_number_system_types()
+[:default, :finance, :native, :traditional]
@@ -1103,10 +1103,10 @@ known_rbnf_locale_name(locale_name)
Examples
-iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:en)
+iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:en)
:en
-iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:"en-SA")
+iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:"en-SA")
false
@@ -1149,10 +1149,10 @@ known_rbnf_locale_name?(locale_name)
Examples
-iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:en)
+iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:en)
true
-iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:"!!")
+iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:"!!")
false
@@ -1288,14 +1288,14 @@ put_gettext_locale(locale)
Examples
iex> import Cldr.LanguageTag.Sigil
-iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"en")
-{:ok, "en"}
+iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"en")
+{:ok, "en"}
iex> import Cldr.LanguageTag.Sigil
-iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"de")
-{:error,
- {Cldr.UnknownLocaleError,
- "Locale #Cldr.LanguageTag<de [validated]> does not map to a known gettext locale name"}}
+iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"de")
+{:error,
+ {Cldr.UnknownLocaleError,
+ "Locale #Cldr.LanguageTag<de [validated]> does not map to a known gettext locale name"}}
@@ -1339,29 +1339,29 @@ put_locale(locale_name)
Examples
-iex> Bonfire.Common.Localise.Cldr.put_locale("en")
-{:ok,
- %Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.put_locale("en")
+{:ok,
+ %Cldr.LanguageTag{
backend: Bonfire.Common.Localise.Cldr,
canonical_locale_name: "en",
cldr_locale_name: :en,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en",
script: :Latn,
territory: :US,
- transform: %{},
- language_variants: []
- }}
+ transform: %{},
+ language_variants: []
+ }}
-iex> Bonfire.Common.Localise.Cldr.put_locale("invalid-locale!")
-{:error, {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
+iex> Bonfire.Common.Localise.Cldr.put_locale("invalid-locale!")
+{:error, {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
@@ -1410,10 +1410,10 @@ quote(string, options \\ [])
Examples
-iex> Bonfire.Common.Localise.Cldr.quote("Quoted String")
+iex> Bonfire.Common.Localise.Cldr.quote("Quoted String")
"“Quoted String”"
-iex> Bonfire.Common.Localise.Cldr.quote("Quoted String", locale: :ja)
+iex> Bonfire.Common.Localise.Cldr.quote("Quoted String", locale: :ja)
"「Quoted String」"
@@ -1544,47 +1544,47 @@ validate_locale(locale)
Examples
-iex> Bonfire.Common.Localise.Cldr.validate_locale(:en)
-{:ok,
-%Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.validate_locale(:en)
+{:ok,
+%Cldr.LanguageTag{
backend: Bonfire.Common.Localise.Cldr,
canonical_locale_name: "en",
cldr_locale_name: :en,
- extensions: %{},
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en",
script: :Latn,
territory: :US,
- transform: %{},
- language_variants: []
-}}
+ transform: %{},
+ language_variants: []
+}}
-iex> Bonfire.Common.Localise.Cldr.validate_locale Bonfire.Common.Localise.Cldr.default_locale()
-{:ok,
-%Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.validate_locale Bonfire.Common.Localise.Cldr.default_locale()
+{:ok,
+%Cldr.LanguageTag{
backend: Bonfire.Common.Localise.Cldr,
canonical_locale_name: "en-001",
cldr_locale_name: :"en-001",
- extensions: %{},
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en-001",
script: :Latn,
territory: :"001",
- transform: %{},
- language_variants: []
-}}
+ transform: %{},
+ language_variants: []
+}}
-iex> Bonfire.Common.Localise.Cldr.validate_locale("zzz")
-{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
+iex> Bonfire.Common.Localise.Cldr.validate_locale("zzz")
+{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
@@ -1654,23 +1654,23 @@ validate_number_system_type(number_system_t
Examples
-iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:default)
-{:ok, :default}
+iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:default)
+{:ok, :default}
-iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:traditional)
-{:ok, :traditional}
+iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:traditional)
+{:ok, :traditional}
-iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:latn)
-{
+iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:latn)
+{
:error,
- {Cldr.UnknownNumberSystemTypeError, "The number system type :latn is unknown"}
-}
+ {Cldr.UnknownNumberSystemTypeError, "The number system type :latn is unknown"}
+}
-iex> Bonfire.Common.Localise.Cldr.validate_number_system_type("bork")
-{
+iex> Bonfire.Common.Localise.Cldr.validate_number_system_type("bork")
+{
:error,
- {Cldr.UnknownNumberSystemTypeError, "The number system type \"bork\" is invalid"}
-}
+ {Cldr.UnknownNumberSystemTypeError, "The number system type \"bork\" is invalid"}
+}
diff --git a/Bonfire.Common.Localise.Gettext.Helpers.html b/Bonfire.Common.Localise.Gettext.Helpers.html
index 6600afaa390..4d5d771d55f 100644
--- a/Bonfire.Common.Localise.Gettext.Helpers.html
+++ b/Bonfire.Common.Localise.Gettext.Helpers.html
@@ -13,7 +13,7 @@
-
+
@@ -143,9 +143,9 @@
# Simple translation
usage:
- <%= l("Hello") %>
- <%= l("Hello %{name}", name: "Bookchin") %>
- <%= l("Hi", [], "test context") %>
+ <%= l("Hello") %>
+ <%= l("Hello %{name}", name: "Bookchin") %>
+ <%= l("Hi", [], "test context") %>
output:
@@ -157,8 +157,8 @@
# Plural translation
usage:
- <%= lp("Hi friend", "Hi friends", 2) %>
- <%= lp("Hiya %{user_or_users}", "Hiyas %{user_or_users}", 1, [user_or_users: "Bookchin"], "test context") %>
+ <%= lp("Hi friend", "Hi friends", 2) %>
+ <%= lp("Hiya %{user_or_users}", "Hiyas %{user_or_users}", 1, [user_or_users: "Bookchin"], "test context") %>
output:
Hi friends
diff --git a/Bonfire.Common.Localise.Gettext.Plural.html b/Bonfire.Common.Localise.Gettext.Plural.html
index c9d1ce0cc7d..4ce0f268bf0 100644
--- a/Bonfire.Common.Localise.Gettext.Plural.html
+++ b/Bonfire.Common.Localise.Gettext.Plural.html
@@ -13,7 +13,7 @@
-
+
@@ -221,10 +221,10 @@ nplurals(locale_name)
Examples
-iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("pl")
+iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("pl")
4
-iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("en")
+iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("en")
2
@@ -262,28 +262,28 @@ plural(locale, n)
Examples
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 1)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 1)
0
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 2)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 2)
1
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 5)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 5)
2
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 112)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 112)
2
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 1)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 1)
0
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 2)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 2)
1
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 112)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 112)
1
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en_GB", 112)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en_GB", 112)
1
diff --git a/Bonfire.Common.Localise.Gettext.html b/Bonfire.Common.Localise.Gettext.html
index ce58d6f6d64..29f3c6821b8 100644
--- a/Bonfire.Common.Localise.Gettext.html
+++ b/Bonfire.Common.Localise.Gettext.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Localise.html b/Bonfire.Common.Localise.html
index 86ed6d45888..17df0bc93cb 100644
--- a/Bonfire.Common.Localise.html
+++ b/Bonfire.Common.Localise.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Media.html b/Bonfire.Common.Media.html
index 2f3aecd0dc9..1442d239c0d 100644
--- a/Bonfire.Common.Media.html
+++ b/Bonfire.Common.Media.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Modularity.DeclareHelpers.html b/Bonfire.Common.Modularity.DeclareHelpers.html
index 08c658825a2..faa0b277175 100644
--- a/Bonfire.Common.Modularity.DeclareHelpers.html
+++ b/Bonfire.Common.Modularity.DeclareHelpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Module.Override.html b/Bonfire.Common.Module.Override.html
index 05a7ff738f9..a84eb8f831d 100644
--- a/Bonfire.Common.Module.Override.html
+++ b/Bonfire.Common.Module.Override.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Needles.Pointers.Queries.html b/Bonfire.Common.Needles.Pointers.Queries.html
index 6bf4401d7e6..d68179b6fc4 100644
--- a/Bonfire.Common.Needles.Pointers.Queries.html
+++ b/Bonfire.Common.Needles.Pointers.Queries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Needles.Preload.html b/Bonfire.Common.Needles.Preload.html
index fa434e5b3b2..ed4e8640a78 100644
--- a/Bonfire.Common.Needles.Preload.html
+++ b/Bonfire.Common.Needles.Preload.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Needles.Tables.Queries.html b/Bonfire.Common.Needles.Tables.Queries.html
index efee1ac3fec..3b6069f31a9 100644
--- a/Bonfire.Common.Needles.Tables.Queries.html
+++ b/Bonfire.Common.Needles.Tables.Queries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Needles.Tables.html b/Bonfire.Common.Needles.Tables.html
index 9bafab04e97..13d1f5400f2 100644
--- a/Bonfire.Common.Needles.Tables.html
+++ b/Bonfire.Common.Needles.Tables.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Needles.html b/Bonfire.Common.Needles.html
index 4d10cf5bf78..177d74aae7a 100644
--- a/Bonfire.Common.Needles.html
+++ b/Bonfire.Common.Needles.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.PubSub.Event.html b/Bonfire.Common.PubSub.Event.html
index d6b164483f5..05b48c33460 100644
--- a/Bonfire.Common.PubSub.Event.html
+++ b/Bonfire.Common.PubSub.Event.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.PubSub.html b/Bonfire.Common.PubSub.html
index 5b8c697af17..cfafde41468 100644
--- a/Bonfire.Common.PubSub.html
+++ b/Bonfire.Common.PubSub.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.QueryModule.html b/Bonfire.Common.QueryModule.html
index 1097ba5a9e4..dc35d40bb3a 100644
--- a/Bonfire.Common.QueryModule.html
+++ b/Bonfire.Common.QueryModule.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Repo.Delete.html b/Bonfire.Common.Repo.Delete.html
index e6a4c772788..a7a29aa073e 100644
--- a/Bonfire.Common.Repo.Delete.html
+++ b/Bonfire.Common.Repo.Delete.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Repo.Preload.html b/Bonfire.Common.Repo.Preload.html
index bbdad01c279..6736789438f 100644
--- a/Bonfire.Common.Repo.Preload.html
+++ b/Bonfire.Common.Repo.Preload.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Repo.Utils.html b/Bonfire.Common.Repo.Utils.html
index 0b7975b7a92..d8496e9c600 100644
--- a/Bonfire.Common.Repo.Utils.html
+++ b/Bonfire.Common.Repo.Utils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Repo.html b/Bonfire.Common.Repo.html
index d78fd24b904..578d055346a 100644
--- a/Bonfire.Common.Repo.html
+++ b/Bonfire.Common.Repo.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.RepoTemplate.html b/Bonfire.Common.RepoTemplate.html
index af7b1b7ddc0..8795650a4cc 100644
--- a/Bonfire.Common.RepoTemplate.html
+++ b/Bonfire.Common.RepoTemplate.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.RuntimeConfig.html b/Bonfire.Common.RuntimeConfig.html
index 464a9913de3..9c48734062c 100644
--- a/Bonfire.Common.RuntimeConfig.html
+++ b/Bonfire.Common.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.SchemaModule.html b/Bonfire.Common.SchemaModule.html
index 73299a1423e..1d66de62919 100644
--- a/Bonfire.Common.SchemaModule.html
+++ b/Bonfire.Common.SchemaModule.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Settings.LiveHandler.html b/Bonfire.Common.Settings.LiveHandler.html
index 327ebd9fdf0..26b3fa0547a 100644
--- a/Bonfire.Common.Settings.LiveHandler.html
+++ b/Bonfire.Common.Settings.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Settings.LoadInstanceConfig.html b/Bonfire.Common.Settings.LoadInstanceConfig.html
index 702067deb21..d0fb816e1bf 100644
--- a/Bonfire.Common.Settings.LoadInstanceConfig.html
+++ b/Bonfire.Common.Settings.LoadInstanceConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Settings.html b/Bonfire.Common.Settings.html
index 2ed33302b74..3b01c539d9a 100644
--- a/Bonfire.Common.Settings.html
+++ b/Bonfire.Common.Settings.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Simulation.html b/Bonfire.Common.Simulation.html
index 7deaea7814c..8a263caca9e 100644
--- a/Bonfire.Common.Simulation.html
+++ b/Bonfire.Common.Simulation.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.StartupTimer.html b/Bonfire.Common.StartupTimer.html
index 63820e252a8..67fcee7bbb3 100644
--- a/Bonfire.Common.StartupTimer.html
+++ b/Bonfire.Common.StartupTimer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Test.Interactive.Helpers.html b/Bonfire.Common.Test.Interactive.Helpers.html
index a2ed4779231..88ffcfb1121 100644
--- a/Bonfire.Common.Test.Interactive.Helpers.html
+++ b/Bonfire.Common.Test.Interactive.Helpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Test.Interactive.Observer.html b/Bonfire.Common.Test.Interactive.Observer.html
index ccd9688a03b..9ff52be76a7 100644
--- a/Bonfire.Common.Test.Interactive.Observer.html
+++ b/Bonfire.Common.Test.Interactive.Observer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Test.Interactive.html b/Bonfire.Common.Test.Interactive.html
index ef847cafb13..3ae074e8e68 100644
--- a/Bonfire.Common.Test.Interactive.html
+++ b/Bonfire.Common.Test.Interactive.html
@@ -13,7 +13,7 @@
-
+
@@ -141,11 +141,11 @@
fcwatch | mix test --stale --listen-on-stdin
to watch for
code changes and run stale tests, but with more control and
without the starting time penalty.
Note that watching requires fswatch on your system.
-Eg on Mac run brew install fswatch
.
To use it, in your project's .iex
file add:
unless GenServer.whereis(Bonfire.Common.Test.Interactive) do
- {:ok, pid} = Bonfire.Common.Test.Interactive.start_link()
+Eg on Mac run brew install fswatch
.To use it, in your project's .iex
file add:
unless GenServer.whereis(Bonfire.Common.Test.Interactive) do
+ {:ok, pid} = Bonfire.Common.Test.Interactive.start_link()
# Process will not exit when the iex goes out
- Process.unlink(pid)
-end
+ Process.unlink(pid)
+end
import Bonfire.Common.Test.Interactive.Helpers
Then to call iex
and run tests just do:
MIX_ENV=test iex -S mix
The Bonfire.Common.Test.Interactive.Helpers
allows to call f
and s
and a
to run failed, stale and all tests respectively.
You can call w
to watch tests and uw
to unwatch.
diff --git a/Bonfire.Common.TestInstanceRepo.html b/Bonfire.Common.TestInstanceRepo.html
index f34eaeae822..e56b7b070f2 100644
--- a/Bonfire.Common.TestInstanceRepo.html
+++ b/Bonfire.Common.TestInstanceRepo.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Text.html b/Bonfire.Common.Text.html
index 54154688cca..0cb13dd623e 100644
--- a/Bonfire.Common.Text.html
+++ b/Bonfire.Common.Text.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.TextExtended.html b/Bonfire.Common.TextExtended.html
index dca5209dce9..09781b1cdaa 100644
--- a/Bonfire.Common.TextExtended.html
+++ b/Bonfire.Common.TextExtended.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Types.html b/Bonfire.Common.Types.html
index c2806bbb9ba..2dd34cccdb9 100644
--- a/Bonfire.Common.Types.html
+++ b/Bonfire.Common.Types.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.URIs.html b/Bonfire.Common.URIs.html
index 6676b219dfa..f3b6ccd2b61 100644
--- a/Bonfire.Common.URIs.html
+++ b/Bonfire.Common.URIs.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.Utils.html b/Bonfire.Common.Utils.html
index 76100cc7fb2..a07e6d0c507 100644
--- a/Bonfire.Common.Utils.html
+++ b/Bonfire.Common.Utils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Common.html b/Bonfire.Common.html
index a650ea49d23..25b30ffb152 100644
--- a/Bonfire.Common.html
+++ b/Bonfire.Common.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.Acl.html b/Bonfire.Data.AccessControl.Acl.html
index e9fbf713c24..a59b23561c8 100644
--- a/Bonfire.Data.AccessControl.Acl.html
+++ b/Bonfire.Data.AccessControl.Acl.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.Circle.html b/Bonfire.Data.AccessControl.Circle.html
index 4ec7639d7ec..6201d7c59aa 100644
--- a/Bonfire.Data.AccessControl.Circle.html
+++ b/Bonfire.Data.AccessControl.Circle.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.Controlled.html b/Bonfire.Data.AccessControl.Controlled.html
index c8ba063333d..2198ab1651e 100644
--- a/Bonfire.Data.AccessControl.Controlled.html
+++ b/Bonfire.Data.AccessControl.Controlled.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.Encircle.html b/Bonfire.Data.AccessControl.Encircle.html
index 5e4b5573d7f..cc20eaaa3e2 100644
--- a/Bonfire.Data.AccessControl.Encircle.html
+++ b/Bonfire.Data.AccessControl.Encircle.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.Grant.html b/Bonfire.Data.AccessControl.Grant.html
index 99963e5c0f8..edd35a298e2 100644
--- a/Bonfire.Data.AccessControl.Grant.html
+++ b/Bonfire.Data.AccessControl.Grant.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.InstanceAdmin.html b/Bonfire.Data.AccessControl.InstanceAdmin.html
index d9bf041f2a5..2a30589185b 100644
--- a/Bonfire.Data.AccessControl.InstanceAdmin.html
+++ b/Bonfire.Data.AccessControl.InstanceAdmin.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.Stereotyped.html b/Bonfire.Data.AccessControl.Stereotyped.html
index daa85ad7720..c80385b290c 100644
--- a/Bonfire.Data.AccessControl.Stereotyped.html
+++ b/Bonfire.Data.AccessControl.Stereotyped.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.AccessControl.Verb.html b/Bonfire.Data.AccessControl.Verb.html
index 4146a4787df..a93f1384f94 100644
--- a/Bonfire.Data.AccessControl.Verb.html
+++ b/Bonfire.Data.AccessControl.Verb.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.ActivityPub.Actor.Migration.html b/Bonfire.Data.ActivityPub.Actor.Migration.html
index 751a5c6a11f..a992fd09834 100644
--- a/Bonfire.Data.ActivityPub.Actor.Migration.html
+++ b/Bonfire.Data.ActivityPub.Actor.Migration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.ActivityPub.Actor.html b/Bonfire.Data.ActivityPub.Actor.html
index 7ce2120da21..b7baf98f732 100644
--- a/Bonfire.Data.ActivityPub.Actor.html
+++ b/Bonfire.Data.ActivityPub.Actor.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.ActivityPub.Peer.html b/Bonfire.Data.ActivityPub.Peer.html
index 492b3b8a499..712a2207d61 100644
--- a/Bonfire.Data.ActivityPub.Peer.html
+++ b/Bonfire.Data.ActivityPub.Peer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.ActivityPub.Peered.html b/Bonfire.Data.ActivityPub.Peered.html
index d1d6355cbad..24ca1d9e09f 100644
--- a/Bonfire.Data.ActivityPub.Peered.html
+++ b/Bonfire.Data.ActivityPub.Peered.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Assort.Ranked.Migration.html b/Bonfire.Data.Assort.Ranked.Migration.html
index 5a55a3cb788..9f0a67fc424 100644
--- a/Bonfire.Data.Assort.Ranked.Migration.html
+++ b/Bonfire.Data.Assort.Ranked.Migration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Assort.Ranked.html b/Bonfire.Data.Assort.Ranked.html
index 62955a968e0..35d524786da 100644
--- a/Bonfire.Data.Assort.Ranked.html
+++ b/Bonfire.Data.Assort.Ranked.html
@@ -13,7 +13,7 @@
-
+
@@ -137,15 +137,15 @@
-A reusable table to link child or related items and also rank sibling items.
Usage (for global ranking, otherwise you should specify scope):
{:ok, first} = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH48ZZD08ADBHQ260KYJHW"}) |> repo().insert
-second = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH0N3YPBS5MNNAEAEVV54J"}) |> repo().insert
+A reusable table to link child or related items and also rank sibling items.
Usage (for global ranking, otherwise you should specify scope):
{:ok, first} = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH48ZZD08ADBHQ260KYJHW"}) |> repo().insert
+second = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH0N3YPBS5MNNAEAEVV54J"}) |> repo().insert
import Ecto.Query
-Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
+Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
-first |> Bonfire.Data.Assort.Ranked.changeset(%{rank_set: :last}) |> repo().update
+first |> Bonfire.Data.Assort.Ranked.changeset(%{rank_set: :last}) |> repo().update
-Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
+Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
diff --git a/Bonfire.Data.Edges.Edge.html b/Bonfire.Data.Edges.Edge.html
index cf6ee7c27c7..15634faf455 100644
--- a/Bonfire.Data.Edges.Edge.html
+++ b/Bonfire.Data.Edges.Edge.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Edges.EdgeTotal.html b/Bonfire.Data.Edges.EdgeTotal.html
index 2d3e34dd855..5dc117e0079 100644
--- a/Bonfire.Data.Edges.EdgeTotal.html
+++ b/Bonfire.Data.Edges.EdgeTotal.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Account.html b/Bonfire.Data.Identity.Account.html
index b7d06884b80..77a9de7fead 100644
--- a/Bonfire.Data.Identity.Account.html
+++ b/Bonfire.Data.Identity.Account.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Accounted.html b/Bonfire.Data.Identity.Accounted.html
index a43a675799b..ad16a6c14e8 100644
--- a/Bonfire.Data.Identity.Accounted.html
+++ b/Bonfire.Data.Identity.Accounted.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Alias.html b/Bonfire.Data.Identity.Alias.html
index 2396de2a058..87565b59820 100644
--- a/Bonfire.Data.Identity.Alias.html
+++ b/Bonfire.Data.Identity.Alias.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.AuthSecondFactor.html b/Bonfire.Data.Identity.AuthSecondFactor.html
index 57f6daa04cb..93b23813a39 100644
--- a/Bonfire.Data.Identity.AuthSecondFactor.html
+++ b/Bonfire.Data.Identity.AuthSecondFactor.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.CareClosure.html b/Bonfire.Data.Identity.CareClosure.html
index 0c47cb1e4ab..61476c5abd1 100644
--- a/Bonfire.Data.Identity.CareClosure.html
+++ b/Bonfire.Data.Identity.CareClosure.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Caretaker.html b/Bonfire.Data.Identity.Caretaker.html
index 2ff4dab6423..a829d46f4cc 100644
--- a/Bonfire.Data.Identity.Caretaker.html
+++ b/Bonfire.Data.Identity.Caretaker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Character.html b/Bonfire.Data.Identity.Character.html
index ad9e4578797..b7e8410aa80 100644
--- a/Bonfire.Data.Identity.Character.html
+++ b/Bonfire.Data.Identity.Character.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Credential.Migration.html b/Bonfire.Data.Identity.Credential.Migration.html
index 482b8af5b5d..16d69999767 100644
--- a/Bonfire.Data.Identity.Credential.Migration.html
+++ b/Bonfire.Data.Identity.Credential.Migration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Credential.html b/Bonfire.Data.Identity.Credential.html
index 18c7202ea51..28900876b94 100644
--- a/Bonfire.Data.Identity.Credential.html
+++ b/Bonfire.Data.Identity.Credential.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Email.html b/Bonfire.Data.Identity.Email.html
index acc5bc7d258..e40335cfddb 100644
--- a/Bonfire.Data.Identity.Email.html
+++ b/Bonfire.Data.Identity.Email.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.ExtraInfo.html b/Bonfire.Data.Identity.ExtraInfo.html
index 3655fc83fe9..50762cac54a 100644
--- a/Bonfire.Data.Identity.ExtraInfo.html
+++ b/Bonfire.Data.Identity.ExtraInfo.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Named.html b/Bonfire.Data.Identity.Named.html
index ecb3036e468..c7ad590fe29 100644
--- a/Bonfire.Data.Identity.Named.html
+++ b/Bonfire.Data.Identity.Named.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Self.html b/Bonfire.Data.Identity.Self.html
index 2d18aa7e4d0..95ab8beea0c 100644
--- a/Bonfire.Data.Identity.Self.html
+++ b/Bonfire.Data.Identity.Self.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.Settings.html b/Bonfire.Data.Identity.Settings.html
index b4cbed9f221..7984c519cf2 100644
--- a/Bonfire.Data.Identity.Settings.html
+++ b/Bonfire.Data.Identity.Settings.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Identity.User.html b/Bonfire.Data.Identity.User.html
index f5b5413d6fd..bcf1ed68b2a 100644
--- a/Bonfire.Data.Identity.User.html
+++ b/Bonfire.Data.Identity.User.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.SharedUser.html b/Bonfire.Data.SharedUser.html
index ff0a14a34d6..ff08f232f8f 100644
--- a/Bonfire.Data.SharedUser.html
+++ b/Bonfire.Data.SharedUser.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.APActivity.html b/Bonfire.Data.Social.APActivity.html
index 2693d713f2e..b47ff6bf0e7 100644
--- a/Bonfire.Data.Social.APActivity.html
+++ b/Bonfire.Data.Social.APActivity.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Activity.html b/Bonfire.Data.Social.Activity.html
index e1dc2bba486..92fc7dbf875 100644
--- a/Bonfire.Data.Social.Activity.html
+++ b/Bonfire.Data.Social.Activity.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Bookmark.html b/Bonfire.Data.Social.Bookmark.html
index a7e3c6c1a70..8ea73e83052 100644
--- a/Bonfire.Data.Social.Bookmark.html
+++ b/Bonfire.Data.Social.Bookmark.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Boost.html b/Bonfire.Data.Social.Boost.html
index 04c20980d2f..5d70693cdf7 100644
--- a/Bonfire.Data.Social.Boost.html
+++ b/Bonfire.Data.Social.Boost.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Created.html b/Bonfire.Data.Social.Created.html
index 6781af60a7c..3358fe0f893 100644
--- a/Bonfire.Data.Social.Created.html
+++ b/Bonfire.Data.Social.Created.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Feed.html b/Bonfire.Data.Social.Feed.html
index e1c1e07f52e..83c23efd98d 100644
--- a/Bonfire.Data.Social.Feed.html
+++ b/Bonfire.Data.Social.Feed.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.FeedPublish.html b/Bonfire.Data.Social.FeedPublish.html
index 560da56f8af..b6a41131db1 100644
--- a/Bonfire.Data.Social.FeedPublish.html
+++ b/Bonfire.Data.Social.FeedPublish.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Flag.html b/Bonfire.Data.Social.Flag.html
index cbfbb7efe51..5ab25548b0f 100644
--- a/Bonfire.Data.Social.Flag.html
+++ b/Bonfire.Data.Social.Flag.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Follow.html b/Bonfire.Data.Social.Follow.html
index c9bb9c5b952..6a7426681dd 100644
--- a/Bonfire.Data.Social.Follow.html
+++ b/Bonfire.Data.Social.Follow.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Inbox.html b/Bonfire.Data.Social.Inbox.html
index 54363234566..85f03c135fa 100644
--- a/Bonfire.Data.Social.Inbox.html
+++ b/Bonfire.Data.Social.Inbox.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Like.html b/Bonfire.Data.Social.Like.html
index dca8505f5be..a916d7a5a61 100644
--- a/Bonfire.Data.Social.Like.html
+++ b/Bonfire.Data.Social.Like.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Message.html b/Bonfire.Data.Social.Message.html
index 27365b9838d..36f183f8fde 100644
--- a/Bonfire.Data.Social.Message.html
+++ b/Bonfire.Data.Social.Message.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Pin.html b/Bonfire.Data.Social.Pin.html
index 1b40c813fa5..dd4a1b0ff9c 100644
--- a/Bonfire.Data.Social.Pin.html
+++ b/Bonfire.Data.Social.Pin.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Post.html b/Bonfire.Data.Social.Post.html
index 323f3a60f3a..81c81330332 100644
--- a/Bonfire.Data.Social.Post.html
+++ b/Bonfire.Data.Social.Post.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.PostContent.html b/Bonfire.Data.Social.PostContent.html
index 5a6f9c38217..89af2a97b17 100644
--- a/Bonfire.Data.Social.PostContent.html
+++ b/Bonfire.Data.Social.PostContent.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Profile.html b/Bonfire.Data.Social.Profile.html
index 3cacb18df49..55a2fc09e5e 100644
--- a/Bonfire.Data.Social.Profile.html
+++ b/Bonfire.Data.Social.Profile.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Replied.html b/Bonfire.Data.Social.Replied.html
index edbcf0a773b..5909c20e454 100644
--- a/Bonfire.Data.Social.Replied.html
+++ b/Bonfire.Data.Social.Replied.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Request.html b/Bonfire.Data.Social.Request.html
index 868c744d497..a8adb845494 100644
--- a/Bonfire.Data.Social.Request.html
+++ b/Bonfire.Data.Social.Request.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Seen.html b/Bonfire.Data.Social.Seen.html
index a6f89bef109..83a8869cff4 100644
--- a/Bonfire.Data.Social.Seen.html
+++ b/Bonfire.Data.Social.Seen.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Data.Social.Sensitive.html b/Bonfire.Data.Social.Sensitive.html
index be2f9a9a49b..9f5fb412d7d 100644
--- a/Bonfire.Data.Social.Sensitive.html
+++ b/Bonfire.Data.Social.Sensitive.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Ecto.Acts.Begin.html b/Bonfire.Ecto.Acts.Begin.html
index 399691dd9d1..ba9428b7e70 100644
--- a/Bonfire.Ecto.Acts.Begin.html
+++ b/Bonfire.Ecto.Acts.Begin.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Ecto.Acts.Commit.html b/Bonfire.Ecto.Acts.Commit.html
index 655505bebe8..21d3e3268dc 100644
--- a/Bonfire.Ecto.Acts.Commit.html
+++ b/Bonfire.Ecto.Acts.Commit.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Ecto.Acts.Delete.html b/Bonfire.Ecto.Acts.Delete.html
index 30c050eb08a..d46384fac9a 100644
--- a/Bonfire.Ecto.Acts.Delete.html
+++ b/Bonfire.Ecto.Acts.Delete.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Ecto.Acts.Work.html b/Bonfire.Ecto.Acts.Work.html
index 35dce776669..c9593db70b9 100644
--- a/Bonfire.Ecto.Acts.Work.html
+++ b/Bonfire.Ecto.Acts.Work.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Ecto.html b/Bonfire.Ecto.html
index 8056306cfe0..4bd735a44fe 100644
--- a/Bonfire.Ecto.html
+++ b/Bonfire.Ecto.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Epics.Act.html b/Bonfire.Epics.Act.html
index 703aa80804a..d2d71ed8405 100644
--- a/Bonfire.Epics.Act.html
+++ b/Bonfire.Epics.Act.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Epics.Debug.html b/Bonfire.Epics.Debug.html
index 84ad03214db..13418093302 100644
--- a/Bonfire.Epics.Debug.html
+++ b/Bonfire.Epics.Debug.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Epics.Epic.html b/Bonfire.Epics.Epic.html
index 47fe802198b..bffcb424674 100644
--- a/Bonfire.Epics.Epic.html
+++ b/Bonfire.Epics.Epic.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Epics.Error.html b/Bonfire.Epics.Error.html
index 6541c26f4ff..818173f8c09 100644
--- a/Bonfire.Epics.Error.html
+++ b/Bonfire.Epics.Error.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Epics.Test.html b/Bonfire.Epics.Test.html
index 08d5df46765..ab75fe5fe26 100644
--- a/Bonfire.Epics.Test.html
+++ b/Bonfire.Epics.Test.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Epics.html b/Bonfire.Epics.html
index ce530b1b947..bcc799af30c 100644
--- a/Bonfire.Epics.html
+++ b/Bonfire.Epics.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.Adapter.html b/Bonfire.Federate.ActivityPub.Adapter.html
index cce2642b36a..144a9458d8b 100644
--- a/Bonfire.Federate.ActivityPub.Adapter.html
+++ b/Bonfire.Federate.ActivityPub.Adapter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.AdapterUtils.html b/Bonfire.Federate.ActivityPub.AdapterUtils.html
index 75c6f940682..5c81e003a22 100644
--- a/Bonfire.Federate.ActivityPub.AdapterUtils.html
+++ b/Bonfire.Federate.ActivityPub.AdapterUtils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.BoundariesMRF.html b/Bonfire.Federate.ActivityPub.BoundariesMRF.html
index efbc230e7a1..0ed5519bf0c 100644
--- a/Bonfire.Federate.ActivityPub.BoundariesMRF.html
+++ b/Bonfire.Federate.ActivityPub.BoundariesMRF.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.FederationModules.html b/Bonfire.Federate.ActivityPub.FederationModules.html
index 00d5c52c3a2..b9a5ebb3d60 100644
--- a/Bonfire.Federate.ActivityPub.FederationModules.html
+++ b/Bonfire.Federate.ActivityPub.FederationModules.html
@@ -13,7 +13,7 @@
-
+
@@ -139,12 +139,12 @@
A automatically-generated global list of federation modules which can queried by activity and/or object type.
To add a module to this list, you should declare @behaviour Bonfire.Federate.ActivityPub.FederationModules
in it and define a federation_module/0
function which returns a list of object and/or activity types which that module handles.
Example:
@behaviour Bonfire.Federate.ActivityPub.FederationModules
def federation_module,
- do: [
+ do: [
"Announce",
- {"Create", "Announce"},
- {"Undo", "Announce"},
- {"Delete", "Announce"}
- ]
You should also then implement these two functions:
- for outgoing federation:
ap_publish_activity(subject_struct, verb, object_struct)
- for incoming federation:
ap_receive_activity(subject_struct, activity_json, object_json)
+
{"Create", "Announce"},
+ {"Undo", "Announce"},
+ {"Delete", "Announce"}
+ ]
You should also then implement these two functions:
- for outgoing federation:
ap_publish_activity(subject_struct, verb, object_struct)
- for incoming federation:
ap_receive_activity(subject_struct, activity_json, object_json)
diff --git a/Bonfire.Federate.ActivityPub.Incoming.html b/Bonfire.Federate.ActivityPub.Incoming.html
index 1fa75f579e2..a4690cd545e 100644
--- a/Bonfire.Federate.ActivityPub.Incoming.html
+++ b/Bonfire.Federate.ActivityPub.Incoming.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.Instances.html b/Bonfire.Federate.ActivityPub.Instances.html
index 40e8b97ac87..3bad620d21b 100644
--- a/Bonfire.Federate.ActivityPub.Instances.html
+++ b/Bonfire.Federate.ActivityPub.Instances.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html b/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html
index 79b1ccb6187..f4e789ae2cf 100644
--- a/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html
+++ b/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.Outgoing.html b/Bonfire.Federate.ActivityPub.Outgoing.html
index b0e0d41a855..b69aa8ceea0 100644
--- a/Bonfire.Federate.ActivityPub.Outgoing.html
+++ b/Bonfire.Federate.ActivityPub.Outgoing.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.Peered.html b/Bonfire.Federate.ActivityPub.Peered.html
index 65b3a390750..2f46abe16fe 100644
--- a/Bonfire.Federate.ActivityPub.Peered.html
+++ b/Bonfire.Federate.ActivityPub.Peered.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.RuntimeConfig.html b/Bonfire.Federate.ActivityPub.RuntimeConfig.html
index 2b21a80df98..7b94dca46d8 100644
--- a/Bonfire.Federate.ActivityPub.RuntimeConfig.html
+++ b/Bonfire.Federate.ActivityPub.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.Simulate.html b/Bonfire.Federate.ActivityPub.Simulate.html
index c90cd118c63..3dc307bef8d 100644
--- a/Bonfire.Federate.ActivityPub.Simulate.html
+++ b/Bonfire.Federate.ActivityPub.Simulate.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Federate.ActivityPub.html b/Bonfire.Federate.ActivityPub.html
index 5b4597c7a34..1229179f0ee 100644
--- a/Bonfire.Federate.ActivityPub.html
+++ b/Bonfire.Federate.ActivityPub.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Acts.AttachMedia.html b/Bonfire.Files.Acts.AttachMedia.html
index 01ac4299398..18289932324 100644
--- a/Bonfire.Files.Acts.AttachMedia.html
+++ b/Bonfire.Files.Acts.AttachMedia.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Acts.URLPreviews.html b/Bonfire.Files.Acts.URLPreviews.html
index d83a002eff4..4d823f820c6 100644
--- a/Bonfire.Files.Acts.URLPreviews.html
+++ b/Bonfire.Files.Acts.URLPreviews.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.BannerUploader.html b/Bonfire.Files.BannerUploader.html
index 04021b37bc4..b3cfc28c1ab 100644
--- a/Bonfire.Files.BannerUploader.html
+++ b/Bonfire.Files.BannerUploader.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Blurred.html b/Bonfire.Files.Blurred.html
index f49eb938842..bd0f6e74af4 100644
--- a/Bonfire.Files.Blurred.html
+++ b/Bonfire.Files.Blurred.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.CapsuleIntegration.Attacher.html b/Bonfire.Files.CapsuleIntegration.Attacher.html
index 9b85406c17f..ea69e0c6b94 100644
--- a/Bonfire.Files.CapsuleIntegration.Attacher.html
+++ b/Bonfire.Files.CapsuleIntegration.Attacher.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Definition.html b/Bonfire.Files.Definition.html
index e87ee57964b..37cc8111cfb 100644
--- a/Bonfire.Files.Definition.html
+++ b/Bonfire.Files.Definition.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.DocumentUploader.html b/Bonfire.Files.DocumentUploader.html
index eda4203b1cf..d919d8d449f 100644
--- a/Bonfire.Files.DocumentUploader.html
+++ b/Bonfire.Files.DocumentUploader.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.FaviconStore.html b/Bonfire.Files.FaviconStore.html
index a0e4e3f9cd3..d8bc4fade30 100644
--- a/Bonfire.Files.FaviconStore.html
+++ b/Bonfire.Files.FaviconStore.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.FileDenied.html b/Bonfire.Files.FileDenied.html
index 81634a31262..a051930ec3b 100644
--- a/Bonfire.Files.FileDenied.html
+++ b/Bonfire.Files.FileDenied.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.IconUploader.html b/Bonfire.Files.IconUploader.html
index 3d1b7b9fe4f..62e9a9a6a21 100644
--- a/Bonfire.Files.IconUploader.html
+++ b/Bonfire.Files.IconUploader.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Image.Edit.html b/Bonfire.Files.Image.Edit.html
index 9ab29a307bd..c8d4a195a53 100644
--- a/Bonfire.Files.Image.Edit.html
+++ b/Bonfire.Files.Image.Edit.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.ImageUploader.html b/Bonfire.Files.ImageUploader.html
index 5b37b0c7d6e..f89fb809224 100644
--- a/Bonfire.Files.ImageUploader.html
+++ b/Bonfire.Files.ImageUploader.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.LiveHandler.html b/Bonfire.Files.LiveHandler.html
index 56b9fc76486..7270536bba5 100644
--- a/Bonfire.Files.LiveHandler.html
+++ b/Bonfire.Files.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Media.Queries.html b/Bonfire.Files.Media.Queries.html
index a094a8fbab5..3262a6b7dad 100644
--- a/Bonfire.Files.Media.Queries.html
+++ b/Bonfire.Files.Media.Queries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Media.html b/Bonfire.Files.Media.html
index 414e31d78b3..ff597836f68 100644
--- a/Bonfire.Files.Media.html
+++ b/Bonfire.Files.Media.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Prepare.html b/Bonfire.Files.Prepare.html
index 9e57266ed40..83f6bf30494 100644
--- a/Bonfire.Files.Prepare.html
+++ b/Bonfire.Files.Prepare.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.ResponsiveImage.html b/Bonfire.Files.ResponsiveImage.html
index b910e4142e4..83063972ea5 100644
--- a/Bonfire.Files.ResponsiveImage.html
+++ b/Bonfire.Files.ResponsiveImage.html
@@ -13,7 +13,7 @@
-
+
@@ -141,12 +141,12 @@
~H(<img src={compile_src("input.jpg", 300)} />)
or
-~H(<img srcset={compile_srcset("input.jpg", [300, 600, 900])} src={...} sizes="50vw" />)
+~H(<img srcset={compile_srcset("input.jpg", [300, 600, 900])} src={...} sizes="50vw" />)
or for paths only known at runtime:
~H(<img src={src(my_image, 300)} />)
or
-~H(<img srcset={srcset(my_image, [300, 600, 900])} src={...} sizes="50vw" />)
+~H(<img srcset={srcset(my_image, [300, 600, 900])} src={...} sizes="50vw" />)
diff --git a/Bonfire.Files.Routes.html b/Bonfire.Files.Routes.html
index 5991d9b4d01..2fc7975d599 100644
--- a/Bonfire.Files.Routes.html
+++ b/Bonfire.Files.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.RuntimeConfig.html b/Bonfire.Files.RuntimeConfig.html
index b663d9c810c..e1562152722 100644
--- a/Bonfire.Files.RuntimeConfig.html
+++ b/Bonfire.Files.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Simulation.html b/Bonfire.Files.Simulation.html
index c8fea2bbbdd..7b61dca86e2 100644
--- a/Bonfire.Files.Simulation.html
+++ b/Bonfire.Files.Simulation.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.Versions.html b/Bonfire.Files.Versions.html
index 12bfa1c7bb1..281dc9d7b61 100644
--- a/Bonfire.Files.Versions.html
+++ b/Bonfire.Files.Versions.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Files.html b/Bonfire.Files.html
index cd782a69795..9bb0eb276b6 100644
--- a/Bonfire.Files.html
+++ b/Bonfire.Files.html
@@ -13,7 +13,7 @@
-
+
@@ -141,10 +141,10 @@
your own - a Bonfire.Files.Definition
is an extension of Waffle.Definition
,
however the allowed_media_types/0
and max_file_size/0
callback are added,
with which you need to define what media types are accepted for these types of uploads.
-(You can also return :all
to accept all media types).
To use the uploader:
iex> {:ok, media} = Bonfire.Files.upload(MyUploader, context, %{path: "./150.png"})
+(You can also return :all
to accept all media types).To use the uploader:
iex> {:ok, media} = Bonfire.Files.upload(MyUploader, context, %{path: "./150.png"})
iex> media.media_type
"image/png"
-iex> Bonfire.Files.remote_url(MyUploader, media)
+iex> Bonfire.Files.remote_url(MyUploader, media)
"/uploads/my/01F3AY6JV30G06BY4DR9BTW5EH"
diff --git a/Bonfire.Invite.Links.Fake.html b/Bonfire.Invite.Links.Fake.html
index e997c70cfff..6d3553710ee 100644
--- a/Bonfire.Invite.Links.Fake.html
+++ b/Bonfire.Invite.Links.Fake.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Invite.Links.Integration.html b/Bonfire.Invite.Links.Integration.html
index 033d951085a..ff4c6c5a5cb 100644
--- a/Bonfire.Invite.Links.Integration.html
+++ b/Bonfire.Invite.Links.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Invite.Links.LiveHandler.html b/Bonfire.Invite.Links.LiveHandler.html
index 4fa15fae256..e843f1fcfad 100644
--- a/Bonfire.Invite.Links.LiveHandler.html
+++ b/Bonfire.Invite.Links.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Invite.Links.Web.Routes.html b/Bonfire.Invite.Links.Web.Routes.html
index 11ef5d26db5..e38de532d5c 100644
--- a/Bonfire.Invite.Links.Web.Routes.html
+++ b/Bonfire.Invite.Links.Web.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Invite.Links.html b/Bonfire.Invite.Links.html
index 9b9e967b31f..028037a31ee 100644
--- a/Bonfire.Invite.Links.html
+++ b/Bonfire.Invite.Links.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.InviteLink.html b/Bonfire.InviteLink.html
index a3ac3a015f1..aadd813c601 100644
--- a/Bonfire.InviteLink.html
+++ b/Bonfire.InviteLink.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Localise.html b/Bonfire.Localise.html
index da6d39fae00..07261d588f3 100644
--- a/Bonfire.Localise.html
+++ b/Bonfire.Localise.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Logging.html b/Bonfire.Logging.html
index ca2cae35dfe..d40595c9705 100644
--- a/Bonfire.Logging.html
+++ b/Bonfire.Logging.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Mailer.Checker.html b/Bonfire.Mailer.Checker.html
index 6a16dbab345..856402d99c7 100644
--- a/Bonfire.Mailer.Checker.html
+++ b/Bonfire.Mailer.Checker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Mailer.RuntimeConfig.html b/Bonfire.Mailer.RuntimeConfig.html
index d7f48b3ea26..77c0e323791 100644
--- a/Bonfire.Mailer.RuntimeConfig.html
+++ b/Bonfire.Mailer.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Mailer.html b/Bonfire.Mailer.html
index 655e89ad9e2..625392237b2 100644
--- a/Bonfire.Mailer.html
+++ b/Bonfire.Mailer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Accounts.ChangeEmailFields.html b/Bonfire.Me.Accounts.ChangeEmailFields.html
index ae11e81323c..ba7a8b22357 100644
--- a/Bonfire.Me.Accounts.ChangeEmailFields.html
+++ b/Bonfire.Me.Accounts.ChangeEmailFields.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Accounts.ChangePasswordFields.html b/Bonfire.Me.Accounts.ChangePasswordFields.html
index b7eccc3ebb9..b791a0719d9 100644
--- a/Bonfire.Me.Accounts.ChangePasswordFields.html
+++ b/Bonfire.Me.Accounts.ChangePasswordFields.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Accounts.ConfirmEmailFields.html b/Bonfire.Me.Accounts.ConfirmEmailFields.html
index c3104cbd6d3..dd58ddc767a 100644
--- a/Bonfire.Me.Accounts.ConfirmEmailFields.html
+++ b/Bonfire.Me.Accounts.ConfirmEmailFields.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Accounts.ForgotPasswordFields.html b/Bonfire.Me.Accounts.ForgotPasswordFields.html
index e3c35798be2..bb07fc06b0d 100644
--- a/Bonfire.Me.Accounts.ForgotPasswordFields.html
+++ b/Bonfire.Me.Accounts.ForgotPasswordFields.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Accounts.LoginFields.html b/Bonfire.Me.Accounts.LoginFields.html
index e993800e0d1..9d39ebf1d2d 100644
--- a/Bonfire.Me.Accounts.LoginFields.html
+++ b/Bonfire.Me.Accounts.LoginFields.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Accounts.Queries.html b/Bonfire.Me.Accounts.Queries.html
index 2336346fa50..a270fd7edb6 100644
--- a/Bonfire.Me.Accounts.Queries.html
+++ b/Bonfire.Me.Accounts.Queries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Accounts.SecondFactors.html b/Bonfire.Me.Accounts.SecondFactors.html
index 832077c9fcb..b08c088915f 100644
--- a/Bonfire.Me.Accounts.SecondFactors.html
+++ b/Bonfire.Me.Accounts.SecondFactors.html
@@ -13,7 +13,7 @@
-
+
@@ -301,8 +301,8 @@ changeset(totp \\ %AuthSecondFactor{}, attr
Examples
-iex> changeset(%AuthSecondFactor{secret: <<...>>}, code: "123456")
-%Ecto.Changeset{data: %AuthSecondFactor{}}
+iex> changeset(%AuthSecondFactor{secret: <<...>>}, code: "123456")
+%Ecto.Changeset{data: %AuthSecondFactor{}}
diff --git a/Bonfire.Me.Accounts.html b/Bonfire.Me.Accounts.html
index 292105aa017..4e26b6d60ae 100644
--- a/Bonfire.Me.Accounts.html
+++ b/Bonfire.Me.Accounts.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Acts.Caretaker.html b/Bonfire.Me.Acts.Caretaker.html
index d756c2236eb..3a23bcd2f03 100644
--- a/Bonfire.Me.Acts.Caretaker.html
+++ b/Bonfire.Me.Acts.Caretaker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Acts.Creator.html b/Bonfire.Me.Acts.Creator.html
index 43c037ec9b4..b94141198c2 100644
--- a/Bonfire.Me.Acts.Creator.html
+++ b/Bonfire.Me.Acts.Creator.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Characters.html b/Bonfire.Me.Characters.html
index 6d6d0a38181..8ce6b4d881a 100644
--- a/Bonfire.Me.Characters.html
+++ b/Bonfire.Me.Characters.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.DeleteWorker.html b/Bonfire.Me.DeleteWorker.html
index dbcb6cfc873..c3103fed0f9 100644
--- a/Bonfire.Me.DeleteWorker.html
+++ b/Bonfire.Me.DeleteWorker.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Fake.Helpers.html b/Bonfire.Me.Fake.Helpers.html
index 0e36e2611ee..efe67452616 100644
--- a/Bonfire.Me.Fake.Helpers.html
+++ b/Bonfire.Me.Fake.Helpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Fake.html b/Bonfire.Me.Fake.html
index 3ef9f49ad65..2fc492a1a39 100644
--- a/Bonfire.Me.Fake.html
+++ b/Bonfire.Me.Fake.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Integration.html b/Bonfire.Me.Integration.html
index 2fd8234b2f7..02856256a75 100644
--- a/Bonfire.Me.Integration.html
+++ b/Bonfire.Me.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Mails.EmailView.html b/Bonfire.Me.Mails.EmailView.html
index e15ae772a2f..2426747ab74 100644
--- a/Bonfire.Me.Mails.EmailView.html
+++ b/Bonfire.Me.Mails.EmailView.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Mails.html b/Bonfire.Me.Mails.html
index 0a6c4367a1f..9b745ac0eab 100644
--- a/Bonfire.Me.Mails.html
+++ b/Bonfire.Me.Mails.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Profiles.LiveHandler.html b/Bonfire.Me.Profiles.LiveHandler.html
index d62f9f6fdb7..c9d79a6daaa 100644
--- a/Bonfire.Me.Profiles.LiveHandler.html
+++ b/Bonfire.Me.Profiles.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Profiles.html b/Bonfire.Me.Profiles.html
index e1a8e884ff4..c0713438fee 100644
--- a/Bonfire.Me.Profiles.html
+++ b/Bonfire.Me.Profiles.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.RuntimeConfig.html b/Bonfire.Me.RuntimeConfig.html
index f2f06250e5d..b611239a1e2 100644
--- a/Bonfire.Me.RuntimeConfig.html
+++ b/Bonfire.Me.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.SharedUsers.html b/Bonfire.Me.SharedUsers.html
index ffe068d0ec2..65c4b6ce120 100644
--- a/Bonfire.Me.SharedUsers.html
+++ b/Bonfire.Me.SharedUsers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Users.LiveHandler.html b/Bonfire.Me.Users.LiveHandler.html
index 12ab8d16b6d..a9a4099b699 100644
--- a/Bonfire.Me.Users.LiveHandler.html
+++ b/Bonfire.Me.Users.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Users.Queries.html b/Bonfire.Me.Users.Queries.html
index 6dc4a102dea..762a88a2157 100644
--- a/Bonfire.Me.Users.Queries.html
+++ b/Bonfire.Me.Users.Queries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Me.Users.html b/Bonfire.Me.Users.html
index dc7e644a3f0..928a4815875 100644
--- a/Bonfire.Me.Users.html
+++ b/Bonfire.Me.Users.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Messages.Fake.html b/Bonfire.Messages.Fake.html
index 118dfe1add9..e1273957264 100644
--- a/Bonfire.Messages.Fake.html
+++ b/Bonfire.Messages.Fake.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Messages.Integration.html b/Bonfire.Messages.Integration.html
index 4abb20ee85c..a5531401e41 100644
--- a/Bonfire.Messages.Integration.html
+++ b/Bonfire.Messages.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Messages.LiveHandler.html b/Bonfire.Messages.LiveHandler.html
new file mode 100644
index 00000000000..113c39afaae
--- /dev/null
+++ b/Bonfire.Messages.LiveHandler.html
@@ -0,0 +1,509 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Messages.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Messages.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sigil_p(route, extra)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ list_threads(current_user, user \\ nil, opts \\ [])
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ thread_meta(thread_id, activity, object, opts)
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ thread_meta(key, thread_id, activity, object, opts)
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ thread_participants(thread_id, activity, object, opts)
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ threads_widget(current_user, user \\ nil, opts \\ [])
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Messages.html b/Bonfire.Messages.html
index 746adc81733..38b66c52d37 100644
--- a/Bonfire.Messages.html
+++ b/Bonfire.Messages.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Posts.Acts.Posts.Publish.html b/Bonfire.Posts.Acts.Posts.Publish.html
index 97d8bdf6960..808bc377223 100644
--- a/Bonfire.Posts.Acts.Posts.Publish.html
+++ b/Bonfire.Posts.Acts.Posts.Publish.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Posts.Fake.html b/Bonfire.Posts.Fake.html
index 4f9e7c34463..e11d4f60668 100644
--- a/Bonfire.Posts.Fake.html
+++ b/Bonfire.Posts.Fake.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Posts.Integration.html b/Bonfire.Posts.Integration.html
index 77597fb8319..17beab04a92 100644
--- a/Bonfire.Posts.Integration.html
+++ b/Bonfire.Posts.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Posts.LiveHandler.html b/Bonfire.Posts.LiveHandler.html
new file mode 100644
index 00000000000..20e22d13301
--- /dev/null
+++ b/Bonfire.Posts.LiveHandler.html
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Posts.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Posts.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Posts.html b/Bonfire.Posts.html
index 8ce7f05e2a2..82ed500cc0c 100644
--- a/Bonfire.Posts.html
+++ b/Bonfire.Posts.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.RuntimeConfig.html b/Bonfire.RuntimeConfig.html
index 6a738537d89..24bf93b1cb2 100644
--- a/Bonfire.RuntimeConfig.html
+++ b/Bonfire.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.Acts.Queue.html b/Bonfire.Search.Acts.Queue.html
index 45984929e65..bb71ef1f3ff 100644
--- a/Bonfire.Search.Acts.Queue.html
+++ b/Bonfire.Search.Acts.Queue.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.Fuzzy.html b/Bonfire.Search.Fuzzy.html
index 40a06213e36..7eb4f01563e 100644
--- a/Bonfire.Search.Fuzzy.html
+++ b/Bonfire.Search.Fuzzy.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.HTTP.html b/Bonfire.Search.HTTP.html
index 55b6f8e3508..c49d743be5a 100644
--- a/Bonfire.Search.HTTP.html
+++ b/Bonfire.Search.HTTP.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.Indexer.html b/Bonfire.Search.Indexer.html
index b907ce35d30..28c990e96a6 100644
--- a/Bonfire.Search.Indexer.html
+++ b/Bonfire.Search.Indexer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.LiveHandler.html b/Bonfire.Search.LiveHandler.html
index f7207fa776c..72ae44f6c26 100644
--- a/Bonfire.Search.LiveHandler.html
+++ b/Bonfire.Search.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.Meili.html b/Bonfire.Search.Meili.html
index e1281b8a902..53161a3367b 100644
--- a/Bonfire.Search.Meili.html
+++ b/Bonfire.Search.Meili.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.RuntimeConfig.html b/Bonfire.Search.RuntimeConfig.html
index b07afc2ef17..c20d620d98e 100644
--- a/Bonfire.Search.RuntimeConfig.html
+++ b/Bonfire.Search.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.Stopwords.html b/Bonfire.Search.Stopwords.html
index c6fa147c0a5..a218abbcd94 100644
--- a/Bonfire.Search.Stopwords.html
+++ b/Bonfire.Search.Stopwords.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.Web.Routes.html b/Bonfire.Search.Web.Routes.html
index 6b8407369d9..4cda61f9a2d 100644
--- a/Bonfire.Search.Web.Routes.html
+++ b/Bonfire.Search.Web.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Search.html b/Bonfire.Search.html
index c86cbf7d4d7..a8e1e5d36fa 100644
--- a/Bonfire.Search.html
+++ b/Bonfire.Search.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Seeder.html b/Bonfire.Seeder.html
index d0cb0980a0c..a879680a34a 100644
--- a/Bonfire.Seeder.html
+++ b/Bonfire.Seeder.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.APActivities.html b/Bonfire.Social.APActivities.html
index d127340e82b..484dc552c95 100644
--- a/Bonfire.Social.APActivities.html
+++ b/Bonfire.Social.APActivities.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Activities.html b/Bonfire.Social.Activities.html
index cd41207f67e..495d48a2cef 100644
--- a/Bonfire.Social.Activities.html
+++ b/Bonfire.Social.Activities.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.Activity.UnderObject.html b/Bonfire.Social.Acts.Activity.UnderObject.html
index 4e168ad77e5..4390da02fb6 100644
--- a/Bonfire.Social.Acts.Activity.UnderObject.html
+++ b/Bonfire.Social.Acts.Activity.UnderObject.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.Activity.html b/Bonfire.Social.Acts.Activity.html
index 1123fafb391..d448f55c69f 100644
--- a/Bonfire.Social.Acts.Activity.html
+++ b/Bonfire.Social.Acts.Activity.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.Federate.html b/Bonfire.Social.Acts.Federate.html
index 3c7cc048a3f..e4bd7a4ffcc 100644
--- a/Bonfire.Social.Acts.Federate.html
+++ b/Bonfire.Social.Acts.Federate.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.Feeds.html b/Bonfire.Social.Acts.Feeds.html
index 6d4adc4361c..1a9e391c2a8 100644
--- a/Bonfire.Social.Acts.Feeds.html
+++ b/Bonfire.Social.Acts.Feeds.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.LivePush.html b/Bonfire.Social.Acts.LivePush.html
index 2dc858f12fc..ab7845ac7d0 100644
--- a/Bonfire.Social.Acts.LivePush.html
+++ b/Bonfire.Social.Acts.LivePush.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.Objects.Delete.html b/Bonfire.Social.Acts.Objects.Delete.html
index 4ea5f9e9479..ac20db71291 100644
--- a/Bonfire.Social.Acts.Objects.Delete.html
+++ b/Bonfire.Social.Acts.Objects.Delete.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.PostContents.html b/Bonfire.Social.Acts.PostContents.html
index 9b3e0524c73..ae84ba4c6e2 100644
--- a/Bonfire.Social.Acts.PostContents.html
+++ b/Bonfire.Social.Acts.PostContents.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.Sensitivity.html b/Bonfire.Social.Acts.Sensitivity.html
index 91cef27fdc7..44a676ee7df 100644
--- a/Bonfire.Social.Acts.Sensitivity.html
+++ b/Bonfire.Social.Acts.Sensitivity.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Acts.Threaded.html b/Bonfire.Social.Acts.Threaded.html
index b4bec11cff9..2db92461d14 100644
--- a/Bonfire.Social.Acts.Threaded.html
+++ b/Bonfire.Social.Acts.Threaded.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Bookmarks.LiveHandler.html b/Bonfire.Social.Bookmarks.LiveHandler.html
new file mode 100644
index 00000000000..555f43135ca
--- /dev/null
+++ b/Bonfire.Social.Bookmarks.LiveHandler.html
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Social.Bookmarks.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Social.Bookmarks.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ bookmarker_count(arg1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sigil_p(route, extra)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ update_many(assigns_sockets, opts \\ [])
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Social.Bookmarks.html b/Bonfire.Social.Bookmarks.html
index 03fd79adc15..18a15776abb 100644
--- a/Bonfire.Social.Bookmarks.html
+++ b/Bonfire.Social.Bookmarks.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Boosts.LiveHandler.html b/Bonfire.Social.Boosts.LiveHandler.html
new file mode 100644
index 00000000000..df1f8389b53
--- /dev/null
+++ b/Bonfire.Social.Boosts.LiveHandler.html
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Social.Boosts.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Social.Boosts.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ update_many(assigns_sockets, opts \\ [])
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Social.Boosts.html b/Bonfire.Social.Boosts.html
index e3ad856410a..bbb9a07f218 100644
--- a/Bonfire.Social.Boosts.html
+++ b/Bonfire.Social.Boosts.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Edges.html b/Bonfire.Social.Edges.html
index c1ba876d8e9..fd682bf9220 100644
--- a/Bonfire.Social.Edges.html
+++ b/Bonfire.Social.Edges.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Fake.html b/Bonfire.Social.Fake.html
index 4171b46e066..23e6fcbf56b 100644
--- a/Bonfire.Social.Fake.html
+++ b/Bonfire.Social.Fake.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.FeedActivities.html b/Bonfire.Social.FeedActivities.html
index e5e8dab92b0..dc7d9b44a9d 100644
--- a/Bonfire.Social.FeedActivities.html
+++ b/Bonfire.Social.FeedActivities.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Feeds.LiveHandler.html b/Bonfire.Social.Feeds.LiveHandler.html
index fc49b71f2d0..1ecbb500d2b 100644
--- a/Bonfire.Social.Feeds.LiveHandler.html
+++ b/Bonfire.Social.Feeds.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Feeds.html b/Bonfire.Social.Feeds.html
index e84a45d4594..ef2282ec2e4 100644
--- a/Bonfire.Social.Feeds.html
+++ b/Bonfire.Social.Feeds.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Flags.LiveHandler.html b/Bonfire.Social.Flags.LiveHandler.html
new file mode 100644
index 00000000000..44745b90f1d
--- /dev/null
+++ b/Bonfire.Social.Flags.LiveHandler.html
@@ -0,0 +1,261 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Social.Flags.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Social.Flags.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Social.Flags.html b/Bonfire.Social.Flags.html
index 9f2a6201fb1..dfedd115c8d 100644
--- a/Bonfire.Social.Flags.html
+++ b/Bonfire.Social.Flags.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Graph.Aliases.LiveHandler.html b/Bonfire.Social.Graph.Aliases.LiveHandler.html
new file mode 100644
index 00000000000..d67915d6099
--- /dev/null
+++ b/Bonfire.Social.Graph.Aliases.LiveHandler.html
@@ -0,0 +1,261 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Social.Graph.Aliases.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Social.Graph.Aliases.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Social.Graph.Aliases.html b/Bonfire.Social.Graph.Aliases.html
index 0f111de8650..86822524b16 100644
--- a/Bonfire.Social.Graph.Aliases.html
+++ b/Bonfire.Social.Graph.Aliases.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Graph.Fake.html b/Bonfire.Social.Graph.Fake.html
index 2c951e1ad63..e37bef5774d 100644
--- a/Bonfire.Social.Graph.Fake.html
+++ b/Bonfire.Social.Graph.Fake.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Graph.Follows.LiveHandler.html b/Bonfire.Social.Graph.Follows.LiveHandler.html
new file mode 100644
index 00000000000..54d124b84b7
--- /dev/null
+++ b/Bonfire.Social.Graph.Follows.LiveHandler.html
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Social.Graph.Follows.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Social.Graph.Follows.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ update_many(assigns_sockets, opts \\ [])
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Social.Graph.Follows.html b/Bonfire.Social.Graph.Follows.html
index d8b71c81c55..f236007ab6e 100644
--- a/Bonfire.Social.Graph.Follows.html
+++ b/Bonfire.Social.Graph.Follows.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Graph.Import.html b/Bonfire.Social.Graph.Import.html
index 69257a43ddb..2f7e7763b14 100644
--- a/Bonfire.Social.Graph.Import.html
+++ b/Bonfire.Social.Graph.Import.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Graph.Integration.html b/Bonfire.Social.Graph.Integration.html
index ed7583cfbe1..9c39f0d5931 100644
--- a/Bonfire.Social.Graph.Integration.html
+++ b/Bonfire.Social.Graph.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Graph.Requests.html b/Bonfire.Social.Graph.Requests.html
index c40581ccf4c..1ac059e3a1a 100644
--- a/Bonfire.Social.Graph.Requests.html
+++ b/Bonfire.Social.Graph.Requests.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Graph.html b/Bonfire.Social.Graph.html
index 01cf268ce65..58b7964d57e 100644
--- a/Bonfire.Social.Graph.html
+++ b/Bonfire.Social.Graph.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Integration.html b/Bonfire.Social.Integration.html
index c9d3bb93f0e..3404cbb59be 100644
--- a/Bonfire.Social.Integration.html
+++ b/Bonfire.Social.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Likes.LiveHandler.html b/Bonfire.Social.Likes.LiveHandler.html
new file mode 100644
index 00000000000..3e0d1aabe01
--- /dev/null
+++ b/Bonfire.Social.Likes.LiveHandler.html
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Social.Likes.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Social.Likes.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ liker_count(arg1)
+
+
+
+
+
+
+
+ sigil_p(route, extra)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link to this function
+
+ update_many(assigns_sockets, opts \\ [])
+
+
+
+ View Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Social.Likes.html b/Bonfire.Social.Likes.html
index 527f074c8fc..98d1be16c72 100644
--- a/Bonfire.Social.Likes.html
+++ b/Bonfire.Social.Likes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.LivePush.html b/Bonfire.Social.LivePush.html
index 5df6660cef7..19771c99a11 100644
--- a/Bonfire.Social.LivePush.html
+++ b/Bonfire.Social.LivePush.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Objects.LiveHandler.html b/Bonfire.Social.Objects.LiveHandler.html
index 9dc51616dd6..11612f0854e 100644
--- a/Bonfire.Social.Objects.LiveHandler.html
+++ b/Bonfire.Social.Objects.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Objects.html b/Bonfire.Social.Objects.html
index 4b5bd874db8..e7950f9dd2e 100644
--- a/Bonfire.Social.Objects.html
+++ b/Bonfire.Social.Objects.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Pins.LiveHandler.html b/Bonfire.Social.Pins.LiveHandler.html
new file mode 100644
index 00000000000..0ddf92cf961
--- /dev/null
+++ b/Bonfire.Social.Pins.LiveHandler.html
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.Social.Pins.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.Social.Pins.LiveHandler
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.Social.Pins.html b/Bonfire.Social.Pins.html
index 48a6780f740..fb424b70177 100644
--- a/Bonfire.Social.Pins.html
+++ b/Bonfire.Social.Pins.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.PostContents.html b/Bonfire.Social.PostContents.html
index 959e62e6e25..8f2d27cc73b 100644
--- a/Bonfire.Social.PostContents.html
+++ b/Bonfire.Social.PostContents.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Seen.html b/Bonfire.Social.Seen.html
index 2ac3eb4a12b..b60f89b8a99 100644
--- a/Bonfire.Social.Seen.html
+++ b/Bonfire.Social.Seen.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Tags.html b/Bonfire.Social.Tags.html
index 1e8f72615c7..d396e88ca09 100644
--- a/Bonfire.Social.Tags.html
+++ b/Bonfire.Social.Tags.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Threads.LiveHandler.html b/Bonfire.Social.Threads.LiveHandler.html
index a82807f04cf..211e11b8d78 100644
--- a/Bonfire.Social.Threads.LiveHandler.html
+++ b/Bonfire.Social.Threads.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Social.Threads.html b/Bonfire.Social.Threads.html
index 71d0b01a627..9a3d0627273 100644
--- a/Bonfire.Social.Threads.html
+++ b/Bonfire.Social.Threads.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.System.OS.Monitor.html b/Bonfire.System.OS.Monitor.html
index 4006024447e..e3629b92168 100644
--- a/Bonfire.System.OS.Monitor.html
+++ b/Bonfire.System.OS.Monitor.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.Autocomplete.html b/Bonfire.Tag.Autocomplete.html
index f9fb7ea1aca..b1c438f3d21 100644
--- a/Bonfire.Tag.Autocomplete.html
+++ b/Bonfire.Tag.Autocomplete.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.Hashtag.html b/Bonfire.Tag.Hashtag.html
index d82d4151b6d..230427b1d70 100644
--- a/Bonfire.Tag.Hashtag.html
+++ b/Bonfire.Tag.Hashtag.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.Queries.html b/Bonfire.Tag.Queries.html
index 52aa9eb905b..f945d65291a 100644
--- a/Bonfire.Tag.Queries.html
+++ b/Bonfire.Tag.Queries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.Simulate.html b/Bonfire.Tag.Simulate.html
index 3d45dba858e..9e985aa91e0 100644
--- a/Bonfire.Tag.Simulate.html
+++ b/Bonfire.Tag.Simulate.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.Tagged.html b/Bonfire.Tag.Tagged.html
index 4c7257cfdcb..0e248e47bb7 100644
--- a/Bonfire.Tag.Tagged.html
+++ b/Bonfire.Tag.Tagged.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.Tags.html b/Bonfire.Tag.Tags.html
index 9af4babe8a7..83e3bed706a 100644
--- a/Bonfire.Tag.Tags.html
+++ b/Bonfire.Tag.Tags.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.TextContent.Formatter.html b/Bonfire.Tag.TextContent.Formatter.html
index 9cf57c8bfdb..2efee532f8d 100644
--- a/Bonfire.Tag.TextContent.Formatter.html
+++ b/Bonfire.Tag.TextContent.Formatter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.TextContent.Process.html b/Bonfire.Tag.TextContent.Process.html
index e9038d9de97..e4971a166bc 100644
--- a/Bonfire.Tag.TextContent.Process.html
+++ b/Bonfire.Tag.TextContent.Process.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.Web.Routes.html b/Bonfire.Tag.Web.Routes.html
index 8a25bfa9bf6..db456044636 100644
--- a/Bonfire.Tag.Web.Routes.html
+++ b/Bonfire.Tag.Web.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tag.html b/Bonfire.Tag.html
index 66e0d54f8ac..b09d1706978 100644
--- a/Bonfire.Tag.html
+++ b/Bonfire.Tag.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tags.Acts.AutoBoost.html b/Bonfire.Tags.Acts.AutoBoost.html
index bcf2811d931..78338ab225e 100644
--- a/Bonfire.Tags.Acts.AutoBoost.html
+++ b/Bonfire.Tags.Acts.AutoBoost.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Tags.Acts.Tag.html b/Bonfire.Tags.Acts.Tag.html
index 35891ece7d2..265f2a75569 100644
--- a/Bonfire.Tags.Acts.Tag.html
+++ b/Bonfire.Tags.Acts.Tag.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Telemetry.Storage.html b/Bonfire.Telemetry.Storage.html
index b5161cc847d..783d95c7836 100644
--- a/Bonfire.Telemetry.Storage.html
+++ b/Bonfire.Telemetry.Storage.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.ComponentID.html b/Bonfire.UI.Common.ComponentID.html
index 9c228a4a172..a421e756f4d 100644
--- a/Bonfire.UI.Common.ComponentID.html
+++ b/Bonfire.UI.Common.ComponentID.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.EndpointTemplate.html b/Bonfire.UI.Common.EndpointTemplate.html
index 900c77ba663..717e8330743 100644
--- a/Bonfire.UI.Common.EndpointTemplate.html
+++ b/Bonfire.UI.Common.EndpointTemplate.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.ErrorHelpers.html b/Bonfire.UI.Common.ErrorHelpers.html
index 0643bea2f82..54f635a8e60 100644
--- a/Bonfire.UI.Common.ErrorHelpers.html
+++ b/Bonfire.UI.Common.ErrorHelpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.ErrorReportingPlug.html b/Bonfire.UI.Common.ErrorReportingPlug.html
index 06cc067b1a4..22fc83b281f 100644
--- a/Bonfire.UI.Common.ErrorReportingPlug.html
+++ b/Bonfire.UI.Common.ErrorReportingPlug.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.LiveHandlers.html b/Bonfire.UI.Common.LiveHandlers.html
index b421cc846c6..8a8b6e7576f 100644
--- a/Bonfire.UI.Common.LiveHandlers.html
+++ b/Bonfire.UI.Common.LiveHandlers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html b/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html
index 8b2324cfe70..47226c92d80 100644
--- a/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html
+++ b/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.LivePlugs.Csrf.html b/Bonfire.UI.Common.LivePlugs.Csrf.html
index fb173e023f1..f3333f9e8f3 100644
--- a/Bonfire.UI.Common.LivePlugs.Csrf.html
+++ b/Bonfire.UI.Common.LivePlugs.Csrf.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.LivePlugs.Helpers.html b/Bonfire.UI.Common.LivePlugs.Helpers.html
index 79cc1ff2ea2..26c51a373c7 100644
--- a/Bonfire.UI.Common.LivePlugs.Helpers.html
+++ b/Bonfire.UI.Common.LivePlugs.Helpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.LivePlugs.Locale.html b/Bonfire.UI.Common.LivePlugs.Locale.html
index 43fa2fa0be7..adaa2d6fb0e 100644
--- a/Bonfire.UI.Common.LivePlugs.Locale.html
+++ b/Bonfire.UI.Common.LivePlugs.Locale.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.LivePlugs.StaticChanged.html b/Bonfire.UI.Common.LivePlugs.StaticChanged.html
index ebc31163aca..a1877ca9f3b 100644
--- a/Bonfire.UI.Common.LivePlugs.StaticChanged.html
+++ b/Bonfire.UI.Common.LivePlugs.StaticChanged.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.LivePlugs.html b/Bonfire.UI.Common.LivePlugs.html
index d26b1290492..b035aaa6bb9 100644
--- a/Bonfire.UI.Common.LivePlugs.html
+++ b/Bonfire.UI.Common.LivePlugs.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html b/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html
index 87788fce7a6..1d2c60b67b3 100644
--- a/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html
+++ b/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.MultiTenancyPlug.html b/Bonfire.UI.Common.MultiTenancyPlug.html
index edb1c266f09..550a72bf784 100644
--- a/Bonfire.UI.Common.MultiTenancyPlug.html
+++ b/Bonfire.UI.Common.MultiTenancyPlug.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.MultiselectLive.LiveHandler.html b/Bonfire.UI.Common.MultiselectLive.LiveHandler.html
index d9602dd2cc8..b5a3851f7ae 100644
--- a/Bonfire.UI.Common.MultiselectLive.LiveHandler.html
+++ b/Bonfire.UI.Common.MultiselectLive.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.NavModule.html b/Bonfire.UI.Common.NavModule.html
index 5d7e4f3f88b..f3f541603d2 100644
--- a/Bonfire.UI.Common.NavModule.html
+++ b/Bonfire.UI.Common.NavModule.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.Notifications.html b/Bonfire.UI.Common.Notifications.html
index 9a860567d90..6721c49ff5f 100644
--- a/Bonfire.UI.Common.Notifications.html
+++ b/Bonfire.UI.Common.Notifications.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.PlugProtect.html b/Bonfire.UI.Common.PlugProtect.html
index ca56e432cd6..0c753637143 100644
--- a/Bonfire.UI.Common.PlugProtect.html
+++ b/Bonfire.UI.Common.PlugProtect.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.Plugs.ActivityPub.html b/Bonfire.UI.Common.Plugs.ActivityPub.html
index 31d4a00c0d2..f4ffa50928a 100644
--- a/Bonfire.UI.Common.Plugs.ActivityPub.html
+++ b/Bonfire.UI.Common.Plugs.ActivityPub.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.Presence.html b/Bonfire.UI.Common.Presence.html
index 2d7cfc7d4c3..9cca3d65a5b 100644
--- a/Bonfire.UI.Common.Presence.html
+++ b/Bonfire.UI.Common.Presence.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.PreviewContentLive.html b/Bonfire.UI.Common.PreviewContentLive.html
index c55ac983f44..b35acaa8fce 100644
--- a/Bonfire.UI.Common.PreviewContentLive.html
+++ b/Bonfire.UI.Common.PreviewContentLive.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.ReusableModalLive.html b/Bonfire.UI.Common.ReusableModalLive.html
index f781d144b6f..ce4111350ee 100644
--- a/Bonfire.UI.Common.ReusableModalLive.html
+++ b/Bonfire.UI.Common.ReusableModalLive.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.Routes.html b/Bonfire.UI.Common.Routes.html
index ee0acd8d930..c8cdae7d99e 100644
--- a/Bonfire.UI.Common.Routes.html
+++ b/Bonfire.UI.Common.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.SEO.html b/Bonfire.UI.Common.SEO.html
index 8f8035763a5..c27ecc659a2 100644
--- a/Bonfire.UI.Common.SEO.html
+++ b/Bonfire.UI.Common.SEO.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.SettingsModule.html b/Bonfire.UI.Common.SettingsModule.html
index 7d397e79472..5ecb499ce8a 100644
--- a/Bonfire.UI.Common.SettingsModule.html
+++ b/Bonfire.UI.Common.SettingsModule.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.SmartInput.LiveHandler.html b/Bonfire.UI.Common.SmartInput.LiveHandler.html
index c0ad9b9bb09..15917595812 100644
--- a/Bonfire.UI.Common.SmartInput.LiveHandler.html
+++ b/Bonfire.UI.Common.SmartInput.LiveHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.SmartInputModule.html b/Bonfire.UI.Common.SmartInputModule.html
index 49fe60020e7..bebeae51e13 100644
--- a/Bonfire.UI.Common.SmartInputModule.html
+++ b/Bonfire.UI.Common.SmartInputModule.html
@@ -13,7 +13,7 @@
-
+
@@ -138,9 +138,9 @@
Find a smart input module via the object type(s) it can create, or vice versa. Backed by a global cache of known smart input modules.
To add a module to this list, you should declare @behaviour Bonfire.UI.Common.SmartInputModule
in it and define a smart_input_module/0
function which returns a list of object types that it can create.
Example:
@behaviour Bonfire.UI.Common.SmartInputModule
-def smart_input_module, do: [:page, Bonfire.Pages.Page]
You can then open the smart input composer / object creator using that declared type, for example:
<Bonfire.UI.Common.SmartInputButtonLive
- create_object_type={:page}
- prompt={l("New page")}
+def smart_input_module, do: [:page, Bonfire.Pages.Page]
You can then open the smart input composer / object creator using that declared type, for example:
<Bonfire.UI.Common.SmartInputButtonLive
+ create_object_type={:page}
+ prompt={l("New page")}
icon="mdi:pencil"
/>
diff --git a/Bonfire.UI.Common.StaticGenerator.html b/Bonfire.UI.Common.StaticGenerator.html
index db4d0187f73..4cb3f7c356e 100644
--- a/Bonfire.UI.Common.StaticGenerator.html
+++ b/Bonfire.UI.Common.StaticGenerator.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.StaticGeneratorPlug.html b/Bonfire.UI.Common.StaticGeneratorPlug.html
index a4dde621053..e93597cb7bd 100644
--- a/Bonfire.UI.Common.StaticGeneratorPlug.html
+++ b/Bonfire.UI.Common.StaticGeneratorPlug.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.Testing.Helpers.html b/Bonfire.UI.Common.Testing.Helpers.html
index 0e33e707ac7..08cfa263fb4 100644
--- a/Bonfire.UI.Common.Testing.Helpers.html
+++ b/Bonfire.UI.Common.Testing.Helpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.WidgetModule.html b/Bonfire.UI.Common.WidgetModule.html
index b09f2a6eceb..07c582c9aeb 100644
--- a/Bonfire.UI.Common.WidgetModule.html
+++ b/Bonfire.UI.Common.WidgetModule.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Common.html b/Bonfire.UI.Common.html
index 1a3ebc7f1cd..2e1ec595bfd 100644
--- a/Bonfire.UI.Common.html
+++ b/Bonfire.UI.Common.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Integration.html b/Bonfire.UI.Me.Integration.html
index 8dc61362856..ea15779ff7f 100644
--- a/Bonfire.UI.Me.Integration.html
+++ b/Bonfire.UI.Me.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.LivePlugs.AccountRequired.html b/Bonfire.UI.Me.LivePlugs.AccountRequired.html
index 54d89f0401c..f00d22cf34e 100644
--- a/Bonfire.UI.Me.LivePlugs.AccountRequired.html
+++ b/Bonfire.UI.Me.LivePlugs.AccountRequired.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.LivePlugs.AdminRequired.html b/Bonfire.UI.Me.LivePlugs.AdminRequired.html
index 1c8ea408bcb..76c9df61112 100644
--- a/Bonfire.UI.Me.LivePlugs.AdminRequired.html
+++ b/Bonfire.UI.Me.LivePlugs.AdminRequired.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html
index dbc6b5bb47e..2a983c045e2 100644
--- a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html
+++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html
index 406594d21dd..81145299c8c 100644
--- a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html
+++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html
index ff4657a69aa..7bc1f87e408 100644
--- a/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html
+++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html
index 523d878e601..09c7367a217 100644
--- a/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html
+++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.LivePlugs.UserRequired.html b/Bonfire.UI.Me.LivePlugs.UserRequired.html
index 524c330857a..62f707f446a 100644
--- a/Bonfire.UI.Me.LivePlugs.UserRequired.html
+++ b/Bonfire.UI.Me.LivePlugs.UserRequired.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Plugs.AccountRequired.html b/Bonfire.UI.Me.Plugs.AccountRequired.html
index 2b921e94b33..c8862e54cce 100644
--- a/Bonfire.UI.Me.Plugs.AccountRequired.html
+++ b/Bonfire.UI.Me.Plugs.AccountRequired.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Plugs.AdminRequired.html b/Bonfire.UI.Me.Plugs.AdminRequired.html
index 70b5eac887f..3770d2eef61 100644
--- a/Bonfire.UI.Me.Plugs.AdminRequired.html
+++ b/Bonfire.UI.Me.Plugs.AdminRequired.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Plugs.GuestOnly.html b/Bonfire.UI.Me.Plugs.GuestOnly.html
index 8e984f14665..1eb9dd509a0 100644
--- a/Bonfire.UI.Me.Plugs.GuestOnly.html
+++ b/Bonfire.UI.Me.Plugs.GuestOnly.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html b/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html
index 7e35758546c..1db02e239c8 100644
--- a/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html
+++ b/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html b/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html
index 9bd77758848..72037bba86e 100644
--- a/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html
+++ b/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Plugs.LoadCurrentUser.html b/Bonfire.UI.Me.Plugs.LoadCurrentUser.html
index dba320b47cf..99fe7c39001 100644
--- a/Bonfire.UI.Me.Plugs.LoadCurrentUser.html
+++ b/Bonfire.UI.Me.Plugs.LoadCurrentUser.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Plugs.UserRequired.html b/Bonfire.UI.Me.Plugs.UserRequired.html
index d3fa0133816..8d08640b9e1 100644
--- a/Bonfire.UI.Me.Plugs.UserRequired.html
+++ b/Bonfire.UI.Me.Plugs.UserRequired.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.Routes.html b/Bonfire.UI.Me.Routes.html
index 0921ef12777..0ec56714dfa 100644
--- a/Bonfire.UI.Me.Routes.html
+++ b/Bonfire.UI.Me.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Me.RuntimeConfig.html b/Bonfire.UI.Me.RuntimeConfig.html
index ae94f3b6241..c7892d632c1 100644
--- a/Bonfire.UI.Me.RuntimeConfig.html
+++ b/Bonfire.UI.Me.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Messages.Routes.html b/Bonfire.UI.Messages.Routes.html
new file mode 100644
index 00000000000..1af5f336410
--- /dev/null
+++ b/Bonfire.UI.Messages.Routes.html
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Messages.Routes — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Messages.Routes
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ declare_routes()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Messages.RuntimeConfig.html b/Bonfire.UI.Messages.RuntimeConfig.html
new file mode 100644
index 00000000000..6123003da31
--- /dev/null
+++ b/Bonfire.UI.Messages.RuntimeConfig.html
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Messages.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Messages.RuntimeConfig
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ config()
+
+
+
+ NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+ config_module()
+
+
+
+ Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+
+
+
+Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Moderation.RuntimeConfig.html b/Bonfire.UI.Moderation.RuntimeConfig.html
new file mode 100644
index 00000000000..77ebec20ec6
--- /dev/null
+++ b/Bonfire.UI.Moderation.RuntimeConfig.html
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Moderation.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Moderation.RuntimeConfig
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ config()
+
+
+
+ NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+ config_module()
+
+
+
+ Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+
+
+
+Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Posts.Routes.html b/Bonfire.UI.Posts.Routes.html
new file mode 100644
index 00000000000..64c81bff9f0
--- /dev/null
+++ b/Bonfire.UI.Posts.Routes.html
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Posts.Routes — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Posts.Routes
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ declare_routes()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Posts.RuntimeConfig.html b/Bonfire.UI.Posts.RuntimeConfig.html
new file mode 100644
index 00000000000..b186b121439
--- /dev/null
+++ b/Bonfire.UI.Posts.RuntimeConfig.html
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Posts.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Posts.RuntimeConfig
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ config()
+
+
+
+ NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+ config_module()
+
+
+
+ Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+
+
+
+Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Reactions.Routes.html b/Bonfire.UI.Reactions.Routes.html
new file mode 100644
index 00000000000..e5bd048c7c5
--- /dev/null
+++ b/Bonfire.UI.Reactions.Routes.html
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Reactions.Routes — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Reactions.Routes
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ declare_routes()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Reactions.RuntimeConfig.html b/Bonfire.UI.Reactions.RuntimeConfig.html
new file mode 100644
index 00000000000..7d629296c94
--- /dev/null
+++ b/Bonfire.UI.Reactions.RuntimeConfig.html
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Reactions.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Reactions.RuntimeConfig
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ config()
+
+
+
+ NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+ config_module()
+
+
+
+ Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+
+
+
+Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Social.Benchmark.html b/Bonfire.UI.Social.Benchmark.html
index f7c245f8b49..b4385c8775b 100644
--- a/Bonfire.UI.Social.Benchmark.html
+++ b/Bonfire.UI.Social.Benchmark.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Social.Graph.RuntimeConfig.html b/Bonfire.UI.Social.Graph.RuntimeConfig.html
new file mode 100644
index 00000000000..2cdf2df354f
--- /dev/null
+++ b/Bonfire.UI.Social.Graph.RuntimeConfig.html
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Social.Graph.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Source
+
+
+ Bonfire.UI.Social.Graph.RuntimeConfig
+ (bonfire_umbrella v0.9.8-cooperation-beta.24)
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+ Functions
+
+
+
+
+ config()
+
+
+
+ NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+ config_module()
+
+
+
+ Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Functions
+
+
+
+
+
+
+
+
+NOTE: you can override this default config in your app's runtime.exs
, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs()
line
+
+
+
+
+
+
+
+
+Callback implementation for Bonfire.Common.ConfigModule.config_module/0
.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Bonfire.UI.Social.Integration.html b/Bonfire.UI.Social.Integration.html
index 2daeba31d47..d7683df88bb 100644
--- a/Bonfire.UI.Social.Integration.html
+++ b/Bonfire.UI.Social.Integration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Social.Routes.html b/Bonfire.UI.Social.Routes.html
index 6fa20aff359..25b17f42365 100644
--- a/Bonfire.UI.Social.Routes.html
+++ b/Bonfire.UI.Social.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.UI.Social.RuntimeConfig.html b/Bonfire.UI.Social.RuntimeConfig.html
index 6f1cc3c7499..969a90cb6ab 100644
--- a/Bonfire.UI.Social.RuntimeConfig.html
+++ b/Bonfire.UI.Social.RuntimeConfig.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Web.Endpoint.html b/Bonfire.Web.Endpoint.html
index aeb4096321f..e791888285d 100644
--- a/Bonfire.Web.Endpoint.html
+++ b/Bonfire.Web.Endpoint.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Web.FakeRemoteEndpoint.html b/Bonfire.Web.FakeRemoteEndpoint.html
index f8b5ed7c3bc..3121c3e4f61 100644
--- a/Bonfire.Web.FakeRemoteEndpoint.html
+++ b/Bonfire.Web.FakeRemoteEndpoint.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Web.Router.Reverse.html b/Bonfire.Web.Router.Reverse.html
index 55cc7ea2582..cd895b297ad 100644
--- a/Bonfire.Web.Router.Reverse.html
+++ b/Bonfire.Web.Router.Reverse.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Web.Router.html b/Bonfire.Web.Router.html
index 63e8fa38282..bdb23f2bdc7 100644
--- a/Bonfire.Web.Router.html
+++ b/Bonfire.Web.Router.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Web.Routes.html b/Bonfire.Web.Routes.html
index 9681b8dcf40..ba7c3471f1c 100644
--- a/Bonfire.Web.Routes.html
+++ b/Bonfire.Web.Routes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Bonfire.Web.Telemetry.html b/Bonfire.Web.Telemetry.html
index a9f2aec5978..47fdcfa5e96 100644
--- a/Bonfire.Web.Telemetry.html
+++ b/Bonfire.Web.Telemetry.html
@@ -13,7 +13,7 @@
-
+
diff --git a/ConsoleHelpers.html b/ConsoleHelpers.html
index d9f66bc04e2..480839515d5 100644
--- a/ConsoleHelpers.html
+++ b/ConsoleHelpers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/DaisyTheme.html b/DaisyTheme.html
index 74e06c67b74..1e77410c83b 100644
--- a/DaisyTheme.html
+++ b/DaisyTheme.html
@@ -13,7 +13,7 @@
-
+
diff --git a/DummyAdapter.html b/DummyAdapter.html
index a10d2f1a665..e13f2488bb9 100644
--- a/DummyAdapter.html
+++ b/DummyAdapter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.AutoMigrator.html b/EctoSparkles.AutoMigrator.html
index f91556c9c78..ce1fb5aeffa 100644
--- a/EctoSparkles.AutoMigrator.html
+++ b/EctoSparkles.AutoMigrator.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.Changesets.Errors.html b/EctoSparkles.Changesets.Errors.html
index 02e451c6f13..39f4016ce98 100644
--- a/EctoSparkles.Changesets.Errors.html
+++ b/EctoSparkles.Changesets.Errors.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.Changesets.html b/EctoSparkles.Changesets.html
index 74f3d0e1eb1..e691806c7cc 100644
--- a/EctoSparkles.Changesets.html
+++ b/EctoSparkles.Changesets.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.DataMigration.Config.html b/EctoSparkles.DataMigration.Config.html
index 3be6c27bab9..e51c4a99f83 100644
--- a/EctoSparkles.DataMigration.Config.html
+++ b/EctoSparkles.DataMigration.Config.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.DataMigration.Runner.html b/EctoSparkles.DataMigration.Runner.html
index c9a1fed56b0..6595e7d38d6 100644
--- a/EctoSparkles.DataMigration.Runner.html
+++ b/EctoSparkles.DataMigration.Runner.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.DataMigration.html b/EctoSparkles.DataMigration.html
index 97fa639d636..f11631b01a4 100644
--- a/EctoSparkles.DataMigration.html
+++ b/EctoSparkles.DataMigration.html
@@ -13,7 +13,7 @@
-
+
@@ -137,36 +137,36 @@
-A behaviour implemented by our data migrations (generally backfills).
Based on A microframework for backfill migrations in Elixir's Ecto, in turn based on David Bernheisel's template for deterministic backfills.
A data migration using this behaviour may look like this (which you can put simply put in Ecto migrations, eg. priv/repo/migrations/priv/repo/migrations/20231019004944_data_onboarding_step.exs
):
defmodule MyApp.Repo.Migrations.BackfillOnboardingStep do
+A behaviour implemented by our data migrations (generally backfills).
Based on A microframework for backfill migrations in Elixir's Ecto, in turn based on David Bernheisel's template for deterministic backfills.
A data migration using this behaviour may look like this (which you can put simply put in Ecto migrations, eg. priv/repo/migrations/priv/repo/migrations/20231019004944_data_onboarding_step.exs
):
defmodule MyApp.Repo.Migrations.BackfillOnboardingStep do
alias EctoSparkles.DataMigration
use DataMigration
@impl DataMigration
- def base_query do
+ def base_query do
# NOTE: This works in cases where:
# 1. The data can be queried with a condition that not longer applies after the migration ran, so you can repeatedly query the data and update the data until the query result is empty. For example, if a column is currently null and will be updated to not be null, then you can query for the null records and pick up where you left off.
# 2. The migration is written in such a way that it can be ran several times on the same data without causing data loss or duplication (or crashing).
- from(u in "users", # Notice how we do not use Ecto schemas here.
- where: is_nil(u.onboarding_step),
- select: %{id: u.id}
- )
- end
+ from(u in "users", # Notice how we do not use Ecto schemas here.
+ where: is_nil(u.onboarding_step),
+ select: %{id: u.id}
+ )
+ end
@impl DataMigration
- def config do
- %DataMigration.Config{batch_size: 100, throttle_ms: 1_000, repo: MyApp.Repo}
- end
+ def config do
+ %DataMigration.Config{batch_size: 100, throttle_ms: 1_000, repo: MyApp.Repo}
+ end
@impl DataMigration
- def migrate(results) do
- Enum.each(results, fn %{id: user_id} ->
+ def migrate(results) do
+ Enum.each(results, fn %{id: user_id} ->
# hooks into a context module, which is more likely to be kept up to date as the app evolves, to avoid having to update old migrations
user_id
- |> MyApp.Users.set_onboarding_step!()
- end)
- end
-end
+ |> MyApp.Users.set_onboarding_step!()
+ end)
+ end
+end
diff --git a/EctoSparkles.ErlangTermBinary.html b/EctoSparkles.ErlangTermBinary.html
index c10190695f9..eaa4409161c 100644
--- a/EctoSparkles.ErlangTermBinary.html
+++ b/EctoSparkles.ErlangTermBinary.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.Log.html b/EctoSparkles.Log.html
index 309ad85a757..6f2aec998a5 100644
--- a/EctoSparkles.Log.html
+++ b/EctoSparkles.Log.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.Migrator.html b/EctoSparkles.Migrator.html
index 1cf606d520c..99f57bcd252 100644
--- a/EctoSparkles.Migrator.html
+++ b/EctoSparkles.Migrator.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.NPlus1Detector.html b/EctoSparkles.NPlus1Detector.html
index 76ef02d2aba..38450205a08 100644
--- a/EctoSparkles.NPlus1Detector.html
+++ b/EctoSparkles.NPlus1Detector.html
@@ -13,7 +13,7 @@
-
+
diff --git a/EctoSparkles.SanitiseStrings.html b/EctoSparkles.SanitiseStrings.html
index 8d9a590dc8e..3ad31eb4f62 100644
--- a/EctoSparkles.SanitiseStrings.html
+++ b/EctoSparkles.SanitiseStrings.html
@@ -13,7 +13,7 @@
-
+
@@ -269,26 +269,26 @@ strip_all_tags(changeset, opts \\ [])
Examples
-iex> attrs = %{string_field: "<script>Bad</script>"}
+iex> attrs = %{string_field: "<script>Bad</script>"}
iex> result_changeset =
...> attrs
-...> |> FakeEctoSchema.changeset()
-...> |> EctoSparkles.SanitiseStrings.strip_all_tags()
+...> |> FakeEctoSchema.changeset()
+...> |> EctoSparkles.SanitiseStrings.strip_all_tags()
iex> result_changeset.changes
-%{string_field: "Bad"}
Fields can be exempted from sanitization via the :except
option.
iex> attrs = %{string_field: "<script>Bad</script>"}
+%{string_field: "Bad"}
Fields can be exempted from sanitization via the :except
option.
iex> attrs = %{string_field: "<script>Bad</script>"}
iex> result_changeset =
...> attrs
-...> |> FakeEctoSchema.changeset()
-...> |> EctoSparkles.SanitiseStrings.strip_all_tags(except: [:string_field])
+...> |> FakeEctoSchema.changeset()
+...> |> EctoSparkles.SanitiseStrings.strip_all_tags(except: [:string_field])
iex> result_changeset.changes
-%{string_field: "<script>Bad</script>"}
+
%{string_field: "<script>Bad</script>"}
You can also specify a specific scrubber (by passing a function as reference):
-
ies> attrs
...> |> FakeEctoSchema.changeset()
-...> |> EctoSparkles.SanitiseStrings.sanitise_strings(scrubber: HtmlSanitizeEx.Scrubber.html5/1)
+ies> attrs
...> |> FakeEctoSchema.changeset()
+...> |> EctoSparkles.SanitiseStrings.sanitise_strings(scrubber: HtmlSanitizeEx.Scrubber.html5/1)
diff --git a/EctoSparkles.html b/EctoSparkles.html
index 4453c636085..9c3d059b572 100644
--- a/EctoSparkles.html
+++ b/EctoSparkles.html
@@ -13,7 +13,7 @@
-
+
@@ -137,14 +137,14 @@
-query_filter
brings convenience and shortens the boilterplate of ecto queries
Common filters available include:
preload
- Preloads fields onto the query resultsstart_date
- Query for items inserted after this dateend_date
- Query for items inserted before this datebefore
- Get items with IDs before this valueafter
- Get items with IDs after this valueids
- Get items with a list of idsfirst
- Gets the first n itemslast
- Gets the last n itemslimit
- Gets the first n itemsoffset
- Offsets limit by n itemssearch
- Warning: This requires schemas using this to have a &by_search(query, val)
function
You are also able to filter on any natural field of a model, as well as use
- gte/gt
- lte/lt
- like/ilike
- is_nil/not(is_nil)
query_filter(User, %{name: %{ilike: "steve"}})
-query_filter(User, %{name: %{ilike: "steve"}}, :last_name, :asc)
-query_filter(User, %{name: %{age: %{gte: 18, lte: 30}}})
-query_filter(User, %{name: %{is_banned: %{!=: nil}}})
-query_filter(User, %{name: %{is_banned: %{==: nil}}})
-
-my_query = query_filter(User, %{name: "Billy"})
-query_filter(my_query, %{last_name: "Joe"})
+query_filter
brings convenience and shortens the boilterplate of ecto queries
Common filters available include:
preload
- Preloads fields onto the query resultsstart_date
- Query for items inserted after this dateend_date
- Query for items inserted before this datebefore
- Get items with IDs before this valueafter
- Get items with IDs after this valueids
- Get items with a list of idsfirst
- Gets the first n itemslast
- Gets the last n itemslimit
- Gets the first n itemsoffset
- Offsets limit by n itemssearch
- Warning: This requires schemas using this to have a &by_search(query, val)
function
You are also able to filter on any natural field of a model, as well as use
- gte/gt
- lte/lt
- like/ilike
- is_nil/not(is_nil)
query_filter(User, %{name: %{ilike: "steve"}})
+query_filter(User, %{name: %{ilike: "steve"}}, :last_name, :asc)
+query_filter(User, %{name: %{age: %{gte: 18, lte: 30}}})
+query_filter(User, %{name: %{is_banned: %{!=: nil}}})
+query_filter(User, %{name: %{is_banned: %{==: nil}}})
+
+my_query = query_filter(User, %{name: "Billy"})
+query_filter(my_query, %{last_name: "Joe"})
@@ -241,11 +241,11 @@ join_preload(query, associations)
import Ecto.Query
Invoice
-|> join(:left, [i], assoc(i, :customer), as: :customer)
-|> join(:left, [i, c], assoc(c, :account), as: :account)
-|> join(:left, [i], assoc(i, :lines), as: :lines)
-|> preload([lines: v, customers: c, account: a], lines: v, customer: {c, [a: account]})
-|> Repo.all()
+
|> join(:left, [i], assoc(i, :customer), as: :customer)
+|> join(:left, [i, c], assoc(c, :account), as: :account)
+|> join(:left, [i], assoc(i, :lines), as: :lines)
+|> preload([lines: v, customers: c, account: a], lines: v, customer: {c, [a: account]})
+|> Repo.all()
@@ -253,9 +253,9 @@ join_preload(query, associations)
import EctoSparkles
Invoice
-|> join_preload([:customer, :account])
-|> join_preload([:lines])
-|> Repo.all()
+|> join_preload([:customer, :account])
+|> join_preload([:lines])
+|> Repo.all()
@@ -281,13 +281,13 @@ proload(query, qual \\ :left, associations)
-AKA join_preload++
. It's more powerful, but it does it with more (and different!) syntax.
e.g.
proload(query, activity: [
+AKA join_preload++
. It's more powerful, but it does it with more (and different!) syntax.
e.g.
proload(query, activity: [
:verb, :boost_count, :like_count, :replied,
# relations under object will have their aliases prefixed with object_, i.e.
# :object_message, :object_post, :object_post_content
# the original names will still be used for the associations.
- object: {"object_", [:message, :post, :post_content]}
-])
+ object: {"object_", [:message, :post, :post_content]}
+])
diff --git a/Exto.html b/Exto.html
index e6e8ce45c3d..f0550e086d1 100644
--- a/Exto.html
+++ b/Exto.html
@@ -13,7 +13,7 @@
-
+
@@ -199,35 +199,35 @@ flex_schema(otp_app)
Adds additional associations dynamically from app config.
Reads config for the given OTP application, under the name of the
current module. Each key maps to an Ecto.Schema function:
belongs_to
field
has_many
has_one
many_to_many
Each of these keys should map to a keyword list where the key is the
-name of the field or association and the value is one of:
- A type
- A tuple of type and options (keyword list)
Example Schema:
defmodule My.Schema do
+name of the field or association and the value is one of:- A type
- A tuple of type and options (keyword list)
Example Schema:
defmodule My.Schema do
use Ecto.Schema
- import Exto, only: [flex_schema: 1]
+ import Exto, only: [flex_schema: 1]
- schema "my_table" do
+ schema "my_table" do
field :name, :string # just normal schema things
- flex_schema(:my_app) # boom! give me the stuff
- end
-end
Example configuration:
config :my_app, My.Schema,
- belongs_to: [
+ flex_schema(:my_app) # boom! give me the stuff
+ end
+end
Example configuration:
config :my_app, My.Schema,
+ belongs_to: [
foo: Foo, # belongs_to :foo, Foo
- bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer
- ],
- field: [
+ bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer
+ ],
+ field: [
foo: :string, # field :foo, :string
- bar: {:integer, default: 4}, # field :foo, :integer, default: 4
- ],
- has_one: [
+ bar: {:integer, default: 4}, # field :foo, :integer, default: 4
+ ],
+ has_one: [
foo: Foo, # has_one :foo, Foo
- bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id
- ]
- has_many: [
+ bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id
+ ]
+ has_many: [
foo: Foo, # has_many :foo, Foo
- bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id
- ]
- many_to_many: [
+ bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id
+ ]
+ many_to_many: [
foo: Foo, # many_to_many :foo, Foo
- bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar
- ]
This one won't work very well because we define foo
and bar
5
+
bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar
+ ]
This one won't work very well because we define foo
and bar
5
times each, but I think you get the point.
Reading of configuration is done during compile time. The relations
will be baked in during compilation, thus:
- Do not expect this to work in runtime config.
- You will need to rebuild all dependencies which use this macro
when you change their configuration.
diff --git a/Import2Alias.CallerTracer.html b/Import2Alias.CallerTracer.html
index 2240faa37c9..1752f5f203f 100644
--- a/Import2Alias.CallerTracer.html
+++ b/Import2Alias.CallerTracer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Import2Alias.Server.html b/Import2Alias.Server.html
index 3702da45561..2886d102171 100644
--- a/Import2Alias.Server.html
+++ b/Import2Alias.Server.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Import2Alias.html b/Import2Alias.html
index fcae61902a6..26649cf2245 100644
--- a/Import2Alias.html
+++ b/Import2Alias.html
@@ -13,7 +13,7 @@
-
+
diff --git a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html
index 6460f5b93ea..b5f4d46fa78 100644
--- a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html
+++ b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html
@@ -13,7 +13,7 @@
-
+
diff --git a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html
index 4e04e140102..f4c90d2014a 100644
--- a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html
+++ b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Mix.Tasks.Bonfire.Account.New.html b/Mix.Tasks.Bonfire.Account.New.html
index 2b16c242a76..73209f4f32b 100644
--- a/Mix.Tasks.Bonfire.Account.New.html
+++ b/Mix.Tasks.Bonfire.Account.New.html
@@ -13,7 +13,7 @@
-
+
@@ -143,7 +143,7 @@
Usage
-mix bonfire.account.new [email@address]
You will be prompted for a password and an email if it was not provided.
+mix bonfire.account.new [email@address]
You will be prompted for a password and an email if it was not provided.
diff --git a/Mix.Tasks.Bonfire.Deps.Compile.html b/Mix.Tasks.Bonfire.Deps.Compile.html
index 677d4a8d898..853eb4898cb 100644
--- a/Mix.Tasks.Bonfire.Deps.Compile.html
+++ b/Mix.Tasks.Bonfire.Deps.Compile.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Mix.Tasks.Bonfire.Localise.Extract.html b/Mix.Tasks.Bonfire.Localise.Extract.html
index 1a1ccb61926..63de322b25b 100644
--- a/Mix.Tasks.Bonfire.Localise.Extract.html
+++ b/Mix.Tasks.Bonfire.Localise.Extract.html
@@ -13,7 +13,7 @@
-
+
@@ -137,7 +137,7 @@
-Extracts translations by recompiling the Elixir source code.
mix gettext.extract [OPTIONS]
Translations are extracted into POT (Portable Object Template) files (with a
+
Extracts translations by recompiling the Elixir source code.
mix gettext.extract [OPTIONS]
Translations are extracted into POT (Portable Object Template) files (with a
.pot
extension). The location of these files is determined by the :otp_app
and :priv
options given by Gettext modules when they call use Gettext
. One
POT file is generated for each translation domain.
It is possible to give the --merge
option to perform merging
diff --git a/Mix.Tasks.Bonfire.Release.html b/Mix.Tasks.Bonfire.Release.html
index 8ed8ad4747c..1ba0f48e3c8 100644
--- a/Mix.Tasks.Bonfire.Release.html
+++ b/Mix.Tasks.Bonfire.Release.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Mix.Tasks.Bonfire.Secrets.html b/Mix.Tasks.Bonfire.Secrets.html
index 55aa6a49a89..aad77cd0e60 100644
--- a/Mix.Tasks.Bonfire.Secrets.html
+++ b/Mix.Tasks.Bonfire.Secrets.html
@@ -13,7 +13,7 @@
-
+
@@ -137,7 +137,7 @@
-Generates secrets and prints to the terminal.
mix bonfire.secrets [length]
By default, it generates keys 64 characters long.
+
Generates secrets and prints to the terminal.
mix bonfire.secrets [length]
By default, it generates keys 64 characters long.
The minimum value for length
is 32.
diff --git a/Mix.Tasks.Bonfire.User.Admin.Promote.html b/Mix.Tasks.Bonfire.User.Admin.Promote.html
index 25371a20e50..f55e31cde0a 100644
--- a/Mix.Tasks.Bonfire.User.Admin.Promote.html
+++ b/Mix.Tasks.Bonfire.User.Admin.Promote.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Mix.Tasks.Docs.Deps.html b/Mix.Tasks.Docs.Deps.html
index e395c161bb0..3543b06d5b1 100644
--- a/Mix.Tasks.Docs.Deps.html
+++ b/Mix.Tasks.Docs.Deps.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Mix.Tasks.Import2alias.html b/Mix.Tasks.Import2alias.html
index 049feffa3de..e73381cb907 100644
--- a/Mix.Tasks.Import2alias.html
+++ b/Mix.Tasks.Import2alias.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Changesets.html b/Needle.Changesets.html
index b07354e908e..d2bc393d695 100644
--- a/Needle.Changesets.html
+++ b/Needle.Changesets.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Form.html b/Needle.Form.html
index 016063c867c..0c6d3eb094d 100644
--- a/Needle.Form.html
+++ b/Needle.Form.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Migration.html b/Needle.Migration.html
index da5b922509f..a1d9231000f 100644
--- a/Needle.Migration.html
+++ b/Needle.Migration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Mixin.html b/Needle.Mixin.html
index 792865bdcc6..7b207400b17 100644
--- a/Needle.Mixin.html
+++ b/Needle.Mixin.html
@@ -13,7 +13,7 @@
-
+
@@ -151,16 +151,16 @@
Declaring a mixin table type
-defmodule My.Mixin do
+defmodule My.Mixin do
use Needle.Mixin,
otp_app: :my_app,
source: "postgres_table_name"
- mixin_schema do
+ mixin_schema do
field :is_awesome, :boolean
- end
-end
+ end
+end
diff --git a/Needle.NotFound.html b/Needle.NotFound.html
index 8e0af48a5e6..5079aebab85 100644
--- a/Needle.NotFound.html
+++ b/Needle.NotFound.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Pointable.html b/Needle.Pointable.html
index 1b3165a97bc..f583bdc0c35 100644
--- a/Needle.Pointable.html
+++ b/Needle.Pointable.html
@@ -13,7 +13,7 @@
-
+
@@ -148,9 +148,9 @@
source: "my_table", # default name of table in database
table_id: "01EBTVSZJ6X02J01R1XWWPWGZW" # unique ULID to identify table
-pointable_schema do
+pointable_schema do
# ... fields go here, if any
-end
+
end
diff --git a/Needle.Pointer.html b/Needle.Pointer.html
index ded36a1145a..77b85343ecc 100644
--- a/Needle.Pointer.html
+++ b/Needle.Pointer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Pointers.html b/Needle.Pointers.html
index e4e77ce12a4..6f4c4257794 100644
--- a/Needle.Pointers.html
+++ b/Needle.Pointers.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Random.html b/Needle.Random.html
index ef3d662e3e3..4195b852116 100644
--- a/Needle.Random.html
+++ b/Needle.Random.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Table.html b/Needle.Table.html
index c7737f0b82f..a30e5f791a4 100644
--- a/Needle.Table.html
+++ b/Needle.Table.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Tables.html b/Needle.Tables.html
index 2f25e2098dd..fc43e874f3d 100644
--- a/Needle.Tables.html
+++ b/Needle.Tables.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.ULID.Migration.html b/Needle.ULID.Migration.html
index ae07ffeace5..4479a3dd055 100644
--- a/Needle.ULID.Migration.html
+++ b/Needle.ULID.Migration.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.ULID.html b/Needle.ULID.html
index 63e41573a28..61a7472fb9a 100644
--- a/Needle.ULID.html
+++ b/Needle.ULID.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Unpointable.html b/Needle.Unpointable.html
index cbc6b99b175..1350722fc84 100644
--- a/Needle.Unpointable.html
+++ b/Needle.Unpointable.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Needle.Virtual.html b/Needle.Virtual.html
index a5daf1d5ca4..db01f5da81d 100644
--- a/Needle.Virtual.html
+++ b/Needle.Virtual.html
@@ -13,7 +13,7 @@
-
+
@@ -151,9 +151,9 @@
source: "my_table", # default name of view in database
table_id: "01EBTVSZJ6X02J01R1XWWPWGZW" # valid ULID to identify virtual
-virtual_schema do
+virtual_schema do
# ... `has_one`, `has_many`, or *virtual* fields ONLY go here.
-end
defmodule MyApp.Repo do
+defmodule MyApp.Repo do
use Ecto.Repo, otp_app: :my_app
use Paginator
-end
+
end
defmodule MyApp.Repo do
+defmodule MyApp.Repo do
use Ecto.Repo, otp_app: :my_app
use Paginator,
limit: 10, # sets the default limit to 10
maximum_limit: 100, # sets the maximum limit to 100
include_total_count: true, # include total count by default
total_count_primary_key_field: :uuid # sets the total_count_primary_key_field to uuid for calculate total_count
-end
Note that these values can be still be overriden when paginate/3
is called.
+
end
Note that these values can be still be overriden when paginate/3
is called.
If you wish to avoid use of macros or you wish to use a different name for -the pagination function you can define your own function like so:
defmodule MyApp.Repo do
+the pagination function you can define your own function like so:defmodule MyApp.Repo do
use Ecto.Repo, otp_app: :my_app
- def my_paginate_function(queryable, opts \ [], repo_opts \ []) do
- defaults = [limit: 10] # Default options of your choice here
- opts = Keyword.merge(defaults, opts)
- Paginator.paginate(queryable, opts, __MODULE__, repo_opts)
- end
-end
+ def my_paginate_function(queryable, opts \ [], repo_opts \ []) do
+ defaults = [limit: 10] # Default options of your choice here
+ opts = Keyword.merge(defaults, opts)
+ Paginator.paginate(queryable, opts, __MODULE__, repo_opts)
+ end
+end
@@ -317,36 +317,36 @@ query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id], select: p)
+query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id], select: p)
-Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)
+
Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)
query = from(p in Post, order_by: [asc: p.inserted_at, desc: p.id], select: p)
+query = from(p in Post, order_by: [asc: p.inserted_at, desc: p.id], select: p)
-Repo.paginate(query, cursor_fields: [inserted_at: :asc, id: :desc], limit: 50)
+
Repo.paginate(query, cursor_fields: [inserted_at: :asc, id: :desc], limit: 50)
from(
+from(
p in Post,
as: :posts,
- join: a in assoc(p, :author),
+ join: a in assoc(p, :author),
as: :author,
- preload: [author: a],
+ preload: [author: a],
select: p,
- order_by: [
- {:asc, a.name},
- {:asc, p.id}
- ]
-)
+ order_by: [
+ {:asc, a.name},
+ {:asc, p.id}
+ ]
+)
-Repo.paginate(query, cursor_fields: [{{:author, :name}, :asc}, id: :asc], limit: 50)
When sorting on columns in joined tables it is necessary to use named bindings. In
+
Repo.paginate(query, cursor_fields: [{{:author, :name}, :asc}, id: :asc], limit: 50)
When sorting on columns in joined tables it is necessary to use named bindings. In
this case we name it author
. In the cursor_fields
we refer to this named binding
and its column name.
To build the cursor Paginator uses the returned Ecto.Schema. When using a joined column the returned Ecto.Schema won't have the value of the joined column @@ -361,32 +361,32 @@
from(
+from(
p in Post,
as: :posts,
- join: a in assoc(p, :author),
+ join: a in assoc(p, :author),
as: :author,
- join: c in assoc(a, :company),
+ join: c in assoc(a, :company),
as: :company,
- preload: [author: a],
+ preload: [author: a],
select: p,
- order_by: [
- {:asc, a.name},
- {:asc, p.id}
- ]
-)
-
-Repo.paginate(query,
- cursor_fields: [{{:company, :name}, :asc}, id: :asc],
- fetch_cursor_value_fun: fn
- post, {{:company, name}, _} ->
+ order_by: [
+ {:asc, a.name},
+ {:asc, p.id}
+ ]
+)
+
+Repo.paginate(query,
+ cursor_fields: [{{:company, :name}, :asc}, id: :asc],
+ fetch_cursor_value_fun: fn
+ post, {{:company, name}, _} ->
post.author.company.name
post, field ->
- Paginator.default_fetch_cursor_value(post, field)
- end,
+ Paginator.default_fetch_cursor_value(post, field)
+ end,
limit: 50
-)
+)
@@ -441,10 +441,10 @@ iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1}, [:id])
+iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1}, [:id])
"g3QAAAABZAACaWRhAQ=="
-iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1, name: "Alice"}, [id: :asc, name: :desc])
+iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1, name: "Alice"}, [id: :asc, name: :desc])
"g3QAAAACZAACaWRhAWQABG5hbWVtAAAABUFsaWNl"
@@ -483,10 +483,10 @@ default_fetch_cursor_value(schema, field)
Example
-iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1}, :id)
+iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1}, :id)
1
-iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1, address: %Paginator.Address{city: "London"}}, {:address, :city})
+iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1, address: %Paginator.Address{city: "London"}}, {:address, :city})
"London"
diff --git a/Releaser.Git.html b/Releaser.Git.html
index f32ea5ff6b7..fdf0e2c9f17 100644
--- a/Releaser.Git.html
+++ b/Releaser.Git.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Releaser.Publish.html b/Releaser.Publish.html
index 54129e21653..f8c13b43b04 100644
--- a/Releaser.Publish.html
+++ b/Releaser.Publish.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Releaser.Tests.html b/Releaser.Tests.html
index e506334bc8c..b75b9517158 100644
--- a/Releaser.Tests.html
+++ b/Releaser.Tests.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Releaser.VersionUtils.html b/Releaser.VersionUtils.html
index fc63b4fe014..bf7d2ba5e36 100644
--- a/Releaser.VersionUtils.html
+++ b/Releaser.VersionUtils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/UserAuthLiveMount.html b/UserAuthLiveMount.html
index ddc67161433..29b022026be 100644
--- a/UserAuthLiveMount.html
+++ b/UserAuthLiveMount.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Voodoo.html b/Voodoo.html
index 2d86537384c..5e6fb1a1ba9 100644
--- a/Voodoo.html
+++ b/Voodoo.html
@@ -13,7 +13,7 @@
-
+
@@ -206,14 +206,14 @@ def_reverse_router(name, opts)
Generates a reverse router function with the given name based upon a
compiled(!) phoenix router module.
Must be used outside of the router module, or else the router won't
-be compiled yet and we won't be able to look up the routes.
Generated function wraps the existing phoenix helpers.
defmodule MyAppWeb.Router do
+be compiled yet and we won't be able to look up the routes.Generated function wraps the existing phoenix helpers.
defmodule MyAppWeb.Router do
use MyAppWeb, :router
# ...
-end
-defmodule MyAppWeb.Router.Reverse do
- import Voodoo, only: [def_reverse_router: 2]
+end
+defmodule MyAppWeb.Router.Reverse do
+ import Voodoo, only: [def_reverse_router: 2]
def_reverse_router :path, for: MyAppWeb.Router
-end
+end
diff --git a/Zest.Faking.html b/Zest.Faking.html
index ac36b3817a2..07d96153942 100644
--- a/Zest.Faking.html
+++ b/Zest.Faking.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Zest.html b/Zest.html
index 29683b8d879..195d3586627 100644
--- a/Zest.html
+++ b/Zest.html
@@ -13,7 +13,7 @@
-
+
diff --git a/api-reference.html b/api-reference.html
index 68652ab0295..8bc09dac57c 100644
--- a/api-reference.html
+++ b/api-reference.html
@@ -13,7 +13,7 @@
-
+
@@ -2510,6 +2510,13 @@
+
+
+
+
@@ -2540,6 +2547,13 @@
+
+
+
+
@@ -2721,6 +2735,13 @@
+
+
+
+
@@ -2728,6 +2749,13 @@
+
+
+
+
@@ -2770,6 +2798,13 @@
+
+
+
+
@@ -2784,6 +2819,13 @@
+
+
+
+
@@ -2798,6 +2840,13 @@
+
+
+
+
@@ -2833,6 +2882,13 @@
+
+
+
+
@@ -2861,6 +2917,13 @@
+
+
+
+
@@ -3360,6 +3423,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bonfire.UI.Posts.Routes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3367,6 +3479,13 @@
+
+
+
+
diff --git a/architecture.html b/architecture.html
index 3ac17af0d39..970a1b46f34 100644
--- a/architecture.html
+++ b/architecture.html
@@ -13,7 +13,7 @@
-
+
@@ -164,9 +164,9 @@
Code Structure
-The code is broadly composed namespaces such as these, many of which are packaged as "extensions" which live in separate git repositories, which are included in the app by way of mix dependencies:
Bonfire.*
- Core application logic (very little code).Bonfire.*.*
- Bonfire extensions (eg Bonfire.Posts
) containing mostly context modules, APIs, and routesBonfire.Data.*
- Extensions containing database schemas and migrations Bonfire.UI.*
- UI component extensionsBonfire.*.*.LiveHandler
- Backend logic to handle events in the frontendBonfire.Editor.*
(pluggable text editors, eg. CKEditor for WYSIWYG markdown input)Bonfire.GraphQL.*
- Optional GraphQL APIBonfire.Federate.*
- Optional Federation hooksActivityPub
- ActivityPub S2S models, logic and various helper modules ActivityPub.Web
- ActivityPub S2S REST endpoints, activity ingestion and push federation facilities ValueFlows.*
- economic extensions implementing the ValueFlows vocabulary
Contexts are were we put any core logic. A context often is circumscribed to providing logic for a particular object type (e. g. Bonfire.Posts
implements Bonfire.Data.Social.Post
).
All Bonfire objects use an ULID as their primary key. We use the Needle
library (with extra logic in Bonfire.Common.Needles
) to reference any object by its primary key without knowing what type it is beforehand. This is very useful as it allows for example following or liking many different types of objects (as opposed to say only a user or a post) and this approach allows us to store the context of the like/follow by only storing its primary key (see Bonfire.Data.Social.Follow
) for an example.
Context modules usually have one/2
, many/2
, and many_paginated/1
functions for fetching objects, which in turn call a query/2
function. These take a keyword list as filters (and an optional opts
argument) allowing objects to be fetched by arbitrary criteria.
Examples:
Users.one(username: "bob") # Fetching by username
-Posts.many_paginated(by: "01E9TQP93S8XFSV2ZATX1FQ528") # List a page of posts by its author
-EconomicResources.many(deleted: true) # List any deleted resources
Context modules also have functions for creating, updating and deleting objects, as well as hooks for federating or indexing in the search engine.
Here is an incomplete sample of some of current extensions and modules:
Bonfire.Me.Accounts
(for managing and querying local user accounts)Bonfire.Me.Users
(for managing and querying both local and remote user identities and profiles)Bonfire.Boundaries
(for managing and querying circles, ACLs, permissions...)Bonfire.Social.FeedActivities
, Bonfire.Social.Feeds
and Bonfire.Social.Activities
(for managing and querying activities and feeds)Bonfire.Posts
and Bonfire.Social.PostContents
(for managing and querying posts)Bonfire.Social.Threads
(for managing and querying threads and comments)Bonfire.Social.Flags
(for managing and querying flags)Bonfire.Social.Graph.Follows
(for managing and querying follows)Bonfire.Classify
(for managing and querying categories, topics, and the like)Bonfire.Tag
(for managing and querying tags and mentions)Bonfire.Geolocate
(for managing and querying locations and geographical coordinates)Bonfire.Quantify
(for managing and querying units and measures)
Additional extensions, libraries, and modules
Bonfire.Common
and Bonfire.Common.Utils
(stuff that gets used everywhere)Bonfire.Application
(OTP application)Bonfire.Me.Characters
(a shared abstraction over users, organisations, categories, and other objects that need to have feeds and behave as an actor in ActivityPub land)Bonfire.Federate.ActivityPub
and ActivityPub
(ActivityPub integration)Bonfire.Search
(local search indexing and search API, powered by Meili)Bonfire.Mailer
, Bonfire.Me.Mails
, and Bamboo
(for rendering and sending emails)Bonfire.Files
, Waffle
, TreeMagic
and TwinkleStar
(for managing uploaded content)Bonfire.GraphQL
(GraphQL API abstractions)Queery
and Bonfire.Repo.Query
(Helpers for making queries on the database)Bonfire.Repo
(Ecto repository)Exto
(to extend DB schemas in config, especially useful for adding associations)AbsintheClient
(for querying the API from within the server)
+
The code is broadly composed namespaces such as these, many of which are packaged as "extensions" which live in separate git repositories, which are included in the app by way of mix dependencies:
Bonfire.*
- Core application logic (very little code).Bonfire.*.*
- Bonfire extensions (eg Bonfire.Posts
) containing mostly context modules, APIs, and routesBonfire.Data.*
- Extensions containing database schemas and migrations Bonfire.UI.*
- UI component extensionsBonfire.*.*.LiveHandler
- Backend logic to handle events in the frontendBonfire.Editor.*
(pluggable text editors, eg. CKEditor for WYSIWYG markdown input)Bonfire.GraphQL.*
- Optional GraphQL APIBonfire.Federate.*
- Optional Federation hooksActivityPub
- ActivityPub S2S models, logic and various helper modules ActivityPub.Web
- ActivityPub S2S REST endpoints, activity ingestion and push federation facilities ValueFlows.*
- economic extensions implementing the ValueFlows vocabulary
Contexts are were we put any core logic. A context often is circumscribed to providing logic for a particular object type (e. g. Bonfire.Posts
implements Bonfire.Data.Social.Post
).
All Bonfire objects use an ULID as their primary key. We use the Needle
library (with extra logic in Bonfire.Common.Needles
) to reference any object by its primary key without knowing what type it is beforehand. This is very useful as it allows for example following or liking many different types of objects (as opposed to say only a user or a post) and this approach allows us to store the context of the like/follow by only storing its primary key (see Bonfire.Data.Social.Follow
) for an example.
Context modules usually have one/2
, many/2
, and many_paginated/1
functions for fetching objects, which in turn call a query/2
function. These take a keyword list as filters (and an optional opts
argument) allowing objects to be fetched by arbitrary criteria.
Examples:
Users.one(username: "bob") # Fetching by username
+Posts.many_paginated(by: "01E9TQP93S8XFSV2ZATX1FQ528") # List a page of posts by its author
+EconomicResources.many(deleted: true) # List any deleted resources
Context modules also have functions for creating, updating and deleting objects, as well as hooks for federating or indexing in the search engine.
Here is an incomplete sample of some of current extensions and modules:
Bonfire.Me.Accounts
(for managing and querying local user accounts)Bonfire.Me.Users
(for managing and querying both local and remote user identities and profiles)Bonfire.Boundaries
(for managing and querying circles, ACLs, permissions...)Bonfire.Social.FeedActivities
, Bonfire.Social.Feeds
and Bonfire.Social.Activities
(for managing and querying activities and feeds)Bonfire.Posts
and Bonfire.Social.PostContents
(for managing and querying posts)Bonfire.Social.Threads
(for managing and querying threads and comments)Bonfire.Social.Flags
(for managing and querying flags)Bonfire.Social.Graph.Follows
(for managing and querying follows)Bonfire.Classify
(for managing and querying categories, topics, and the like)Bonfire.Tag
(for managing and querying tags and mentions)Bonfire.Geolocate
(for managing and querying locations and geographical coordinates)Bonfire.Quantify
(for managing and querying units and measures)
Additional extensions, libraries, and modules
Bonfire.Common
and Bonfire.Common.Utils
(stuff that gets used everywhere)Bonfire.Application
(OTP application)Bonfire.Me.Characters
(a shared abstraction over users, organisations, categories, and other objects that need to have feeds and behave as an actor in ActivityPub land)Bonfire.Federate.ActivityPub
and ActivityPub
(ActivityPub integration)Bonfire.Search
(local search indexing and search API, powered by Meili)Bonfire.Mailer
, Bonfire.Me.Mails
, and Bamboo
(for rendering and sending emails)Bonfire.Files
, Waffle
, TreeMagic
and TwinkleStar
(for managing uploaded content)Bonfire.GraphQL
(GraphQL API abstractions)Queery
and Bonfire.Repo.Query
(Helpers for making queries on the database)Bonfire.Repo
(Ecto repository)Exto
(to extend DB schemas in config, especially useful for adding associations)AbsintheClient
(for querying the API from within the server)
@@ -184,7 +184,7 @@
Naming guidelines
-- Module names mostly begin with
Bonfire.
unless they belong to a more generic library (eg Needle
or ValueFlows
) - Everything within an extension begins with the context name and a
.
(eg Bonfire.Social.Migrations
) - Database schemas should be named in the singular (eg
Bonfire.Data.Social.Post
) - Context modules are named in plural where possible (eg
Bonfire.Posts
) - Other modules within a context begins with the context name and a
.
(eg Bonfire.Posts.LiveHandler
) - Modules use UpperCamelCase while functions use snake_case
- Acronyms in module names should be all uppercase (eg
Bonfire.Social.APActivities
)
+- Module names mostly begin with
Bonfire.
unless they belong to a more generic library (eg Needle
or ValueFlows
) - Everything within an extension begins with the context name and a
.
(eg Bonfire.Social.Migrations
) - Database schemas should be named in the singular (eg
Bonfire.Data.Social.Post
) - Context modules are named in plural where possible (eg
Bonfire.Posts
) - Other modules within a context begins with the context name and a
.
(eg Bonfire.Posts.LiveHandler
) - Modules use UpperCamelCase while functions use snake_case
- Acronyms in module names should be all uppercase (eg
Bonfire.Social.APActivities
)
diff --git a/bonfire-flavoured-elixir.html b/bonfire-flavoured-elixir.html
index 0d4db208186..d4171b6b442 100644
--- a/bonfire-flavoured-elixir.html
+++ b/bonfire-flavoured-elixir.html
@@ -13,7 +13,7 @@
-
+
@@ -141,33 +141,33 @@
Arrows
The Elixir |> ("pipe") operator is one of the things that seems to get people excited about elixir. Probably in part because you then don't have to keep coming up with function names. Unfortunately it's kind of limiting.
-The moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.
Not any more! By simply inserting ...
where you would like the value to be inserted, Arrows
will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. Arrows
was inspired by an existing library. Here is part of the test suite in lieu of examples:
defmodule ArrowsTest do
+The moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.Not any more! By simply inserting ...
where you would like the value to be inserted, Arrows
will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. Arrows
was inspired by an existing library. Here is part of the test suite in lieu of examples:
defmodule ArrowsTest do
use ExUnit.Case
use Arrows
- def double(x), do: x * 2
- def double_fst(x, _), do: x * 2
- def double_snd(_, x), do: x * 2
- def add_snd_thd(_, x, y), do: x + y
-
- test "|>" do
- assert 4 == (2 |> double)
- assert 4 == (2 |> double())
- assert 4 == (2 |> double(...))
- assert 8 == (2 |> double(double(...)))
- assert 4 == (2 |> double_fst(1))
- assert 4 == (2 |> double_fst(..., 1))
- assert 8 == (2 |> double_fst(double(...), 1))
- assert 4 == (2 |> double_snd(1, ...))
- assert 8 == (2 |> double_snd(1, double(...)))
- assert 3 == (2 |> add_snd_thd(1, ..., 1))
- assert 4 == (2 |> add_snd_thd(1, ..., ...))
- assert 6 == (2 |> add_snd_thd(1, ..., double(...)))
- for x <- [:yes, 2, nil, false] do
- assert {:ok, x} == (x |> {:ok, ...})
- end
- end
-end
A few little extra features you might notice here:
- You can move the parameter into a subexpression, as in
2 |> double_fst(double(...), 1)
where double will be called before the parameter is passed to double_fst
. - You can use
...
multiple times, substituting it in multiple places. - The right hand side need not even be a function call, you can use any expression with
...
.
+
def double(x), do: x * 2
+ def double_fst(x, _), do: x * 2
+ def double_snd(_, x), do: x * 2
+ def add_snd_thd(_, x, y), do: x + y
+
+ test "|>" do
+ assert 4 == (2 |> double)
+ assert 4 == (2 |> double())
+ assert 4 == (2 |> double(...))
+ assert 8 == (2 |> double(double(...)))
+ assert 4 == (2 |> double_fst(1))
+ assert 4 == (2 |> double_fst(..., 1))
+ assert 8 == (2 |> double_fst(double(...), 1))
+ assert 4 == (2 |> double_snd(1, ...))
+ assert 8 == (2 |> double_snd(1, double(...)))
+ assert 3 == (2 |> add_snd_thd(1, ..., 1))
+ assert 4 == (2 |> add_snd_thd(1, ..., ...))
+ assert 6 == (2 |> add_snd_thd(1, ..., double(...)))
+ for x <- [:yes, 2, nil, false] do
+ assert {:ok, x} == (x |> {:ok, ...})
+ end
+ end
+end
A few little extra features you might notice here:
- You can move the parameter into a subexpression, as in
2 |> double_fst(double(...), 1)
where double will be called before the parameter is passed to double_fst
. - You can use
...
multiple times, substituting it in multiple places. - The right hand side need not even be a function call, you can use any expression with
...
.
@@ -181,14 +181,14 @@
Untangle
provides replacements for the macros in Elixir's Logger
module and the IO.inspect
function to output code location information. The first argument will be inspect
ed and the second (where provided) will be used as a label:
iex(1)> import Untangle
Untangle
-iex(2)> debug(:no, "the answer is") # log at debug
-11:19:09.915 [debug] [iex:2] the answer is: :no
+iex(2)> debug(:no, "the answer is") # log at debug
+11:19:09.915 [debug] [iex:2] the answer is: :no
:no
-iex(3)> dump(%{a: :map}, "it") # inspect something on stdout
-[iex:3] it: %{a: :map}
-%{a: :map}
When used in a code file, the location information becomes slightly more useful, e.g.:
[lib/test_untangle.ex:15@Test.Untangle.example/2] Here's an empty list: []
You may also notice from the iex output that it returns its first argument. This makes it ideal for
-inserting into a pipeline for debugging purposes:
do_something()
-|> debug("output of do_something/0")
When you are done debugging something, the location of the debug statement is already in the output so you know where to remove it or comment it out! Bliss!
You will find the codebase uses this a lot, though the debugs are frequently commented out. Just uncomment the ones that would help you with a particular debugging task and you're off.
+iex(3)> dump(%{a: :map}, "it") # inspect something on stdout
+[iex:3] it: %{a: :map}
+%{a: :map}
When used in a code file, the location information becomes slightly more useful, e.g.:
[lib/test_untangle.ex:15@Test.Untangle.example/2] Here's an empty list: []
You may also notice from the iex output that it returns its first argument. This makes it ideal for
+inserting into a pipeline for debugging purposes:
do_something()
+|> debug("output of do_something/0")
When you are done debugging something, the location of the debug statement is already in the output so you know where to remove it or comment it out! Bliss!
You will find the codebase uses this a lot, though the debugs are frequently commented out. Just uncomment the ones that would help you with a particular debugging task and you're off.
diff --git a/bonfire_umbrella.epub b/bonfire_umbrella.epub
index 019685ca7f71e2bfffc62215bc0049c1a19ba0da..238edc3d32b3c37eb63aa899cc0d9b9ed53559a4 100644
GIT binary patch
delta 346955
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