From 132caee4af4b3fe9e00d747043fe5a068ac43877 Mon Sep 17 00:00:00 2001 From: javierg Date: Mon, 8 Aug 2022 08:50:40 -0700 Subject: [PATCH 01/25] allow module name on query --- lib/couchx/adapter.ex | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/lib/couchx/adapter.ex b/lib/couchx/adapter.ex index 60f4c3a..c87e567 100644 --- a/lib/couchx/adapter.ex +++ b/lib/couchx/adapter.ex @@ -202,19 +202,21 @@ defmodule Couchx.Adapter do end def execute(:view, meta, design, view, key, query_opts) do - opts = query_opts - |> Enum.into(%{}) - |> Map.merge(%{key: key}) + query_opts = query_opts ++ [key: Jason.encode!(key)] + execute(:view, meta, design, view, query_opts) + end + def execute(:view, meta, design, view, query_opts) do + opts = prepare_view_options(query_opts) Couchx.DbConnection.get(meta[:pid], "_design/#{design}/_view/#{view}", opts) - |> parse_view_response(opts[:include_docs]) + |> parse_view_response(opts[:include_docs], query_opts[:module]) end def execute(:find, meta, selector, fields, opts) do query = %{selector: selector, fields: fields} Couchx.DbConnection.find(meta[:pid], query, opts) - |> parse_view_response(opts[:include_docs]) + |> parse_view_response(opts[:include_docs], opts[:module]) end def execute(meta, query_meta, query_cache, params, _opts) do @@ -420,25 +422,32 @@ defmodule Couchx.Adapter do Map.put(data, :_id, id) end - defp parse_view_response({:ok, %{"rows" => rows}}, true) do + + defp parse_view_response({:ok, %{"rows" => rows}}, true, module_name) do rows |> Enum.map(&Map.get(&1, "doc")) - |> Enum.map(&build_structs/1) + |> Enum.map(&build_structs(&1, module_name)) + end + + defp parse_view_response({:ok, %{"rows" => rows}}, _, _), do: rows + defp parse_view_response({:ok, %{"bookmark" => _, "docs" => docs}}, _, _), do: docs + + defp build_structs(map, module_name) do + doc = Enum.reduce(map, %{}, &keys_to_atoms/2) + module_name = fetch_module_name(map, module_name) + struct(module_name, doc) end - defp parse_view_response({:ok, %{"rows" => rows}}, _), do: rows - defp parse_view_response({:ok, %{"bookmark" => _, "docs" => docs}}, _), do: docs - defp build_structs(map) do + defp fetch_module_name(map, nil) do doc_type = Map.get(map, "_id") |> String.replace(~r{(/.+)}, "") |> Macro.camelize - module = :"Elixir.SDB.#{doc_type}" # TODO: pass module name in view execute - - doc = Enum.reduce(map, %{}, &keys_to_atoms/2) - struct(module, doc) + :"Elixir.SDB.#{doc_type}" end + defp fetch_module_name(_map, name), do: name + defp keys_to_atoms({key, value}, acc) do Map.put(acc, String.to_atom(key), value) end @@ -615,4 +624,10 @@ defmodule Couchx.Adapter do |> namespace_id(id) |> URI.decode_www_form end + + defp prepare_view_options(options) do + options + |> Keyword.replace(:keys, Jason.encode!(options[:keys])) + |> Enum.into(%{}) + end end From 0b27934fa7610790f0d1d70d8d75bfc8041c21ee Mon Sep 17 00:00:00 2001 From: javierg Date: Fri, 19 Aug 2022 07:27:18 -0700 Subject: [PATCH 02/25] adapter raw request --- lib/couchx/adapter.ex | 17 ++++++++++++++--- lib/couchx/db_connection.ex | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/lib/couchx/adapter.ex b/lib/couchx/adapter.ex index c87e567..a9b9617 100644 --- a/lib/couchx/adapter.ex +++ b/lib/couchx/adapter.ex @@ -136,6 +136,8 @@ defmodule Couchx.Adapter do @behaviour Ecto.Adapter.Schema @behaviour Ecto.Adapter.Queryable + @encodable_keys ~w[key keys startkey endkey start_key end_key]a + defmacro __before_compile__(_env), do: :ok def init(config) do @@ -219,6 +221,11 @@ defmodule Couchx.Adapter do |> parse_view_response(opts[:include_docs], opts[:module]) end + def execute(:request, meta, method, path, opts) do + Couchx.DbConnection.raw_request(meta[:pid], method, path, opts) + |> parse_view_response(opts[:include_docs], opts[:module]) + end + def execute(meta, query_meta, query_cache, params, _opts) do {_, {_, query}} = query_cache %{select: select} = query_meta @@ -422,7 +429,6 @@ defmodule Couchx.Adapter do Map.put(data, :_id, id) end - defp parse_view_response({:ok, %{"rows" => rows}}, true, module_name) do rows |> Enum.map(&Map.get(&1, "doc")) @@ -431,6 +437,9 @@ defmodule Couchx.Adapter do defp parse_view_response({:ok, %{"rows" => rows}}, _, _), do: rows defp parse_view_response({:ok, %{"bookmark" => _, "docs" => docs}}, _, _), do: docs + defp parse_view_response({:ok, raw_response}, _, _), do: raw_response + + defp parse_view_response({:error, _} = error, _, _), do: error defp build_structs(map, module_name) do doc = Enum.reduce(map, %{}, &keys_to_atoms/2) @@ -626,8 +635,10 @@ defmodule Couchx.Adapter do end defp prepare_view_options(options) do - options - |> Keyword.replace(:keys, Jason.encode!(options[:keys])) + @encodable_keys + |> Enum.reduce(options, fn key, acc -> + Keyword.replace(acc, key, Jason.encode!(options[key])) + end) |> Enum.into(%{}) end end diff --git a/lib/couchx/db_connection.ex b/lib/couchx/db_connection.ex index 2959c4c..e564edc 100644 --- a/lib/couchx/db_connection.ex +++ b/lib/couchx/db_connection.ex @@ -63,6 +63,10 @@ defmodule Couchx.DbConnection do GenServer.call(server, {:index, doc}) end + def raw_request(server, method, path, options \\ []) do + GenServer.call(server, {:raw_request, method, path, options}) + end + def handle_call({:index, doc}, _from, state) do headers = state[:base_headers] url = "#{state[:base_url]}/_index" @@ -156,6 +160,23 @@ defmodule Couchx.DbConnection do |> call_response(state) end + def handle_call({:raw_request, method, path, options}, _from, state) do + query_str = build_query_str(options[:query_str]) + url = "#{state[:base_url]}/#{path}#{query_str}" + + case method do + :get -> + request(method, url, [headers: state[:base_headers], options: state[:options]]) + :delete -> + request(:delete, url, [headers: state[:base_headers], options: []]) + _ -> + body = Jason.encode!(options[:body]) + request(method, url, body, [headers: state[:base_headers], options: state[:options]]) + end + |> call_response(state) + + end + def handle_call({:find, query, options}, _from, state) do headers = state[:base_headers] query_str = build_query_str(options[:query_str]) From 627dfe8e288c636bf41955204e800f4075fbb3bf Mon Sep 17 00:00:00 2001 From: javierg Date: Mon, 29 Aug 2022 08:21:13 -0700 Subject: [PATCH 03/25] handle repo dynamic supervisor state --- lib/couchx/dynamic_repo.ex | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/couchx/dynamic_repo.ex b/lib/couchx/dynamic_repo.ex index fc9d7af..f2c26dc 100644 --- a/lib/couchx/dynamic_repo.ex +++ b/lib/couchx/dynamic_repo.ex @@ -17,20 +17,24 @@ defmodule Couchx.DynamicRepo do name = if (is_atom(name)), do: name, else: String.to_atom(name) default_dynamic_repo = get_dynamic_repo() start_opts = [name: name] ++ credentials - {:ok, repo} = __MODULE__.start_link(start_opts) + repo = __MODULE__.start_link(start_opts) + |> maybe_fetch_repo() try do __MODULE__.put_dynamic_repo(repo) callback.() after __MODULE__.put_dynamic_repo(default_dynamic_repo) - DynamicSupervisor.stop(repo) + if Process.alive?(repo), do: DynamicSupervisor.stop(repo) end end defp fetch_config do Application.get_env(@otp_app, __MODULE__) end + + defp maybe_fetch_repo({:ok, repo}), do: repo + defp maybe_fetch_repo({:error, {:already_started, repo}}), do: repo end end end From 98688141cd11874a0395428aa09cad400f35f478 Mon Sep 17 00:00:00 2001 From: javierg Date: Fri, 9 Sep 2022 07:12:48 -0700 Subject: [PATCH 04/25] push version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 16a753a..d60595f 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Couchx.MixProject do def project do [ app: :couchx, - version: "0.2.2", + version: "0.3.0", elixir: "~> 1.12", name: "Couchx", description: "Limited CouchDb Adapter for Ecto", From 9deb9317d4cb539014decd9bef45b3154823a2e8 Mon Sep 17 00:00:00 2001 From: javierg Date: Mon, 30 Oct 2023 08:33:04 -0700 Subject: [PATCH 05/25] handle update/create --- lib/couchx/constraint.ex | 3 ++- lib/couchx/query_handler.ex | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/couchx/constraint.ex b/lib/couchx/constraint.ex index b19e61b..7ceaabd 100644 --- a/lib/couchx/constraint.ex +++ b/lib/couchx/constraint.ex @@ -9,7 +9,8 @@ defmodule Couchx.Constraint do ) do if with_schema?(schema) do params = Enum.into(fields, %{}) - changeset = schema.changeset(schema.__struct__, params) + schema_struct = struct(schema.__struct__, prev_fields) + changeset = schema.changeset(schema_struct, params) fields = Keyword.merge(prev_fields, fields) changeset diff --git a/lib/couchx/query_handler.ex b/lib/couchx/query_handler.ex index 3c42a80..266bac1 100644 --- a/lib/couchx/query_handler.ex +++ b/lib/couchx/query_handler.ex @@ -8,6 +8,11 @@ defmodule Couchx.QueryHandler do def query_results([], _, _), do: {0, []} def query_results({:error, reason}, _, _), do: raise Couchx.DbError, message: "#{reason}" + def query_results([%{"_id" => _}|_] = docs, fields, metadata) do + Enum.map(docs, &process_docs(&1, fields, metadata)) + |> execute_response + end + def query_results({:ok, response}, _, _) when response in @empty_response do {0, []} end From 97ef8c85f672b9ddb2bf80ca0ba7cbb4a8d3c8c6 Mon Sep 17 00:00:00 2001 From: javierg Date: Mon, 30 Oct 2023 08:35:15 -0700 Subject: [PATCH 06/25] push patch version --- doc/404.html | 138 ++++ doc/Couchx.Adapter.html | 841 ++++++++++++++++++++++ doc/Couchx.Constraint.html | 197 +++++ doc/Couchx.CouchId.html | 219 ++++++ doc/Couchx.DbConnection.html | 597 +++++++++++++++ doc/Couchx.DbError.html | 140 ++++ doc/Couchx.DocumentState.html | 219 ++++++ doc/Couchx.DynamicRepo.html | 140 ++++ doc/Couchx.Finders.html | 140 ++++ doc/Couchx.MangoIndex.html | 140 ++++ doc/Couchx.Migrator.html | 243 +++++++ doc/Couchx.PrepareQuery.html | 195 +++++ doc/Couchx.QueryHandler.html | 195 +++++ doc/Couchx.Support.ApplicationHelper.html | 195 +++++ doc/Couchx.epub | Bin 0 -> 24454 bytes doc/Couchx.html | 144 ++++ doc/Mix.Tasks.Couchx.Gen.MangoIndex.html | 140 ++++ doc/Mix.Tasks.Couchx.MangoIndex.Down.html | 210 ++++++ doc/Mix.Tasks.Couchx.MangoIndex.html | 171 +++++ doc/api-reference.html | 293 ++++++++ doc/dist/app-f97730d45ef67f3e6188.js | 2 + doc/dist/elixir-37545fd2f35b96531434.css | 2 + doc/dist/html/fonts/icomoon.eot | Bin 0 -> 3380 bytes doc/dist/html/fonts/icomoon.svg | 19 + doc/dist/html/fonts/icomoon.ttf | Bin 0 -> 3216 bytes doc/dist/html/fonts/icomoon.woff | Bin 0 -> 3292 bytes doc/dist/search_items-12aedcfc50.js | 1 + doc/dist/sidebar_items-5461d0ecee.js | 1 + doc/index.html | 10 + doc/search.html | 135 ++++ mix.exs | 2 +- 31 files changed, 4728 insertions(+), 1 deletion(-) create mode 100644 doc/404.html create mode 100644 doc/Couchx.Adapter.html create mode 100644 doc/Couchx.Constraint.html create mode 100644 doc/Couchx.CouchId.html create mode 100644 doc/Couchx.DbConnection.html create mode 100644 doc/Couchx.DbError.html create mode 100644 doc/Couchx.DocumentState.html create mode 100644 doc/Couchx.DynamicRepo.html create mode 100644 doc/Couchx.Finders.html create mode 100644 doc/Couchx.MangoIndex.html create mode 100644 doc/Couchx.Migrator.html create mode 100644 doc/Couchx.PrepareQuery.html create mode 100644 doc/Couchx.QueryHandler.html create mode 100644 doc/Couchx.Support.ApplicationHelper.html create mode 100644 doc/Couchx.epub create mode 100644 doc/Couchx.html create mode 100644 doc/Mix.Tasks.Couchx.Gen.MangoIndex.html create mode 100644 doc/Mix.Tasks.Couchx.MangoIndex.Down.html create mode 100644 doc/Mix.Tasks.Couchx.MangoIndex.html create mode 100644 doc/api-reference.html create mode 100644 doc/dist/app-f97730d45ef67f3e6188.js create mode 100644 doc/dist/elixir-37545fd2f35b96531434.css create mode 100644 doc/dist/html/fonts/icomoon.eot create mode 100644 doc/dist/html/fonts/icomoon.svg create mode 100644 doc/dist/html/fonts/icomoon.ttf create mode 100644 doc/dist/html/fonts/icomoon.woff create mode 100644 doc/dist/search_items-12aedcfc50.js create mode 100644 doc/dist/sidebar_items-5461d0ecee.js create mode 100644 doc/index.html create mode 100644 doc/search.html diff --git a/doc/404.html b/doc/404.html new file mode 100644 index 0000000..888058d --- /dev/null +++ b/doc/404.html @@ -0,0 +1,138 @@ + + + + + + + + + + 404 — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

Page not found

+ +

Sorry, but the page you were trying to get to, does not exist. You +may want to try searching this site using the sidebar + + or using our API Reference page + +to find what you were looking for.

+ +
+
+
+
+ + + + diff --git a/doc/Couchx.Adapter.html b/doc/Couchx.Adapter.html new file mode 100644 index 0000000..bc209e3 --- /dev/null +++ b/doc/Couchx.Adapter.html @@ -0,0 +1,841 @@ + + + + + + + + + + Couchx.Adapter — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.Adapter (Couchx v0.3.0) + +

+ + +
+

Adapter to get basic query functionality into Ecto with CouchDB.

+ + Configuration +

+

It uses the same as Ecto pattern to config the Dbs with this format:

config :my_app, MyRepo,
+  username: "username",
+  password: "password",
+  database: "db_name",
+  hostname: "localhost",
+  protocol: "http",
+  port: 5984

+ + Usage +

+

Couchx supports 1 main repo and many dynamic supervised repos. +A dynamic repo will allow you to have multiple db connections in your application. +To achieve this, you will need to setup a DynamicSupervisor and a Registry in the application like:

  def start(_type, _args) do
+    children = [
+      {DynamicSupervisor, strategy: :one_for_one, name: CouchxSupervisor}
+      {Registry, keys: :unique, name: CouchxRegistry},
+      ...
+    ]
+    ...
+  end

The Restry name is tied up to the code so it must be called CouchxRegistry.

The main Repo is configured as any other Ecto Repo, so you can start it in the application just adding it to the children list.

  def start(_type, _args) do
+    children = [
+      MyDb.Repo
+    ]
+    ...
+  end

+ + Dynamic Repo queries +

+

The dynamic repos are implemente with a Macro that you can get into your repo as:

  use CouchxDyncamicTepo, otp_app: :my_app, name: :my_repo

This is used to setup a run function, with a callback as argument. +To execute actions in a dynamic repo we follow this pattern:

  MyDynamicRepo.run( ->
+    MyDynamicRepo.get(MyStruct, doc_id)
+  end)

Any Repo call inside the callback function will be run in a dynamically supervised connection.

+ + Migrations +

+

Couchx comes with a Mango index generator.

+ + Example +

+
$ mix couchx.gen.mango_index -r MyApp.Repo -n my-mango-index -f username,email
+

This will create a file under priv/my_app/repo/index/my-mango-index.exs with contents as:

defmodule MyApp.Repo.Index.MyMangoIndex do
+  use Couchx.MangoIndex, repo_name: MyApp.Repo
+
+  def up do
+    create_index "my-mango-index" do
+      %{
+         fields: ["username", "email"],
+       }
+    end
+  end
+
+  def down do
+    drop_index "my-mango-index"
+  end
+end
+

The Map inside the create_index block will be added to the index json object, so any structure that can go there can be added here. +Currently only supported methods are

+ + create_index(String.t(), (-> Map.t())) +

+
  • name: ID and Name for the index to be created in CouchDB, this will be used as id for the document persisted.
  • fun: A block that returns a formated Map for the index to be created, it will be parsed as JSON to the body of the index document.

+ + drop_index(String.t()) +

+
  • name: Id and Name for the index document to be deleted

+ + Examples +

+
$ mix couchx.mango_index
+
+Will add all indexes store under `priv/my_app/repo/index/` paths
+
+$ mix couchx.mango_index.down -r MyApp.Repo -n my-mango-index,my-other-index
+
+It will call down function on the Migration files
+
+```
+  priv/my_app/repo/index/my-mango-index.exs
+  priv/my_app/repo/index/my-other-index.exs
+```
+
+Removing the documents from the database.
+
+
+ + +
+

+ + + Link to this section + + Summary +

+ +
+

+ Functions +

+
+ + +

Callback implementation for Ecto.Adapter.Schema.autogenerate/1.

+ +
+
+ + +

Callback implementation for Ecto.Adapter.checked_out?/1.

+ +
+
+ + +

Callback implementation for Ecto.Adapter.checkout/3.

+ +
+ + +
+ + +

Callback implementation for Ecto.Adapter.Schema.delete/4.

+ +
+ + + +
+ + +

Callback implementation for Ecto.Adapter.dumpers/2.

+ +
+
+ + +

Callback implementation for Ecto.Adapter.ensure_all_started/2.

+ +
+ + +
+
+ init(config) + +
+ +

Callback implementation for Ecto.Adapter.init/1.

+ +
+ + + +
+ + +

Callback implementation for Ecto.Adapter.loaders/2.

+ +
+ +
+ + +

Callback implementation for Ecto.Adapter.Queryable.prepare/2.

+ +
+
+ + +

Callback implementation for Ecto.Adapter.Queryable.stream/5.

+ +
+ + + +
+ +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

autogenerate(atom)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Schema.autogenerate/1.

+
+
+
+ +
+ + + Link to this function + +

checked_out?(arg)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.checked_out?/1.

+
+
+
+ +
+ + + Link to this function + +

checkout(adapter, config, result)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.checkout/3.

+
+
+
+ +
+ + + Link to this function + +

create_admin(server, name, password)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

create_db(server, name)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

delete(meta, meta_schema, params, opts)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Schema.delete/4.

+
+
+
+ +
+ + + Link to this function + +

delete_admin(server, name)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

delete_db(server, name)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

do_insert(errors, repo, constraints, fields, returning, meta)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

dumpers(arg1, type)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.dumpers/2.

+
+
+
+ +
+ + + Link to this function + +

ensure_all_started(repo, type)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.ensure_all_started/2.

+
+
+
+ +
+ + + Link to this function + +

execute(meta, meta, design, view, query_opts)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Queryable.execute/5.

+
+
+
+ +
+ + + Link to this function + +

execute(atom, meta, design, view, key, query_opts)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

init(config)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.init/1.

+
+
+
+ +
+ + + Link to this function + +

insert(meta, repo, fields, on_conflict, returning, options)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Schema.insert/6.

+
+
+
+ +
+ + + Link to this function + +

insert_all(a, b, c, d, e, f, g)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

insert_all(meta, repo, fields, data, on_conflict, schema, returning, opts)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Schema.insert_all/8.

+
+
+
+ +
+ + + Link to this function + +

loaders(arg1, type)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.loaders/2.

+
+
+
+ +
+ + + Link to this function + +

parse_bulk_response(map, data, schema)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

prepare(atom, query)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Queryable.prepare/2.

+
+
+
+ +
+ + + Link to this function + +

stream(a, b, c, d, e)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Queryable.stream/5.

+
+
+
+ +
+ + + Link to this function + +

update(meta, repo, fields, identity, returning, opts)

+ + +
+ +
+ +

Callback implementation for Ecto.Adapter.Schema.update/6.

+
+
+
+ +
+ + + Link to this function + +

update!(meta, repo, fields, identity, returning, a)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.Constraint.html b/doc/Couchx.Constraint.html new file mode 100644 index 0000000..a93ae24 --- /dev/null +++ b/doc/Couchx.Constraint.html @@ -0,0 +1,197 @@ + + + + + + + + + + Couchx.Constraint — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.Constraint (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ + + +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ + + +
+ + + Link to this function + +

call(server, repo, fields, prev_fields \\ [])

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.CouchId.html b/doc/Couchx.CouchId.html new file mode 100644 index 0000000..af09e21 --- /dev/null +++ b/doc/Couchx.CouchId.html @@ -0,0 +1,219 @@ + + + + + + + + + + Couchx.CouchId — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.CouchId (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ +
+

+ Functions +

+
+
+ base_id(id) + +
+ +
+ + +
+ +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

base_id(id)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

underscore_school_id(school_id)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.DbConnection.html b/doc/Couchx.DbConnection.html new file mode 100644 index 0000000..27ead65 --- /dev/null +++ b/doc/Couchx.DbConnection.html @@ -0,0 +1,597 @@ + + + + + + + + + + Couchx.DbConnection — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.DbConnection (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ +
+

+ Functions +

+ + +
+ + +

Returns a specification to start this module under a supervisor.

+ +
+ + + + + + + + +
+ + +
+
+
+ info(server) + +
+ +
+
+
+ init(args) + +
+ +

Callback implementation for GenServer.init/1.

+ +
+ + +
+ + +
+ +
+ +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ + + +
+ + + Link to this function + +

all_docs(server, keys, options \\ [])

+ + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

bulk_docs(server, docs, options \\ [])

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

child_spec(init_arg)

+ + +
+ +
+ +

Returns a specification to start this module under a supervisor.

See Supervisor.

+
+
+
+ +
+ + + Link to this function + +

create_admin(server, name, password)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

create_db(server, name)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

delete(server, resource, rev)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

delete(server, atom, name, id)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

delete_admin(server, name)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

delete_db(server, name)

+ + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

find(server, query, options \\ [])

+ + +
+ +
+ + +
+
+
+ + + + + +
+ + + Link to this function + +

get(server, resource, query \\ nil, options \\ [])

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

index(server, doc)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

info(server)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

init(args)

+ + +
+ +
+ +

Callback implementation for GenServer.init/1.

+
+
+
+ + + +
+ + + Link to this function + +

insert(server, resource, body, options \\ [])

+ + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

raw_request(server, method, path, options \\ [])

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

start_link(args)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.DbError.html b/doc/Couchx.DbError.html new file mode 100644 index 0000000..96a56e8 --- /dev/null +++ b/doc/Couchx.DbError.html @@ -0,0 +1,140 @@ + + + + + + + + + + Couchx.DbError — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.DbError exception (Couchx v0.3.0) + +

+ + + + + +
+
+
+
+ + + + diff --git a/doc/Couchx.DocumentState.html b/doc/Couchx.DocumentState.html new file mode 100644 index 0000000..a6b26ab --- /dev/null +++ b/doc/Couchx.DocumentState.html @@ -0,0 +1,219 @@ + + + + + + + + + + Couchx.DocumentState — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.DocumentState (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ + + +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

merge_constraints(constraints)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

process_constraints(constraints, server)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.DynamicRepo.html b/doc/Couchx.DynamicRepo.html new file mode 100644 index 0000000..92c9960 --- /dev/null +++ b/doc/Couchx.DynamicRepo.html @@ -0,0 +1,140 @@ + + + + + + + + + + Couchx.DynamicRepo — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.DynamicRepo (Couchx v0.3.0) + +

+ + + + + +
+
+
+
+ + + + diff --git a/doc/Couchx.Finders.html b/doc/Couchx.Finders.html new file mode 100644 index 0000000..671aa2d --- /dev/null +++ b/doc/Couchx.Finders.html @@ -0,0 +1,140 @@ + + + + + + + + + + Couchx.Finders — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.Finders (Couchx v0.3.0) + +

+ + + + + +
+
+
+
+ + + + diff --git a/doc/Couchx.MangoIndex.html b/doc/Couchx.MangoIndex.html new file mode 100644 index 0000000..7abe1a9 --- /dev/null +++ b/doc/Couchx.MangoIndex.html @@ -0,0 +1,140 @@ + + + + + + + + + + Couchx.MangoIndex — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.MangoIndex (Couchx v0.3.0) + +

+ + + + + +
+
+
+
+ + + + diff --git a/doc/Couchx.Migrator.html b/doc/Couchx.Migrator.html new file mode 100644 index 0000000..59588e1 --- /dev/null +++ b/doc/Couchx.Migrator.html @@ -0,0 +1,243 @@ + + + + + + + + + + Couchx.Migrator — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.Migrator (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ + + +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

run(repo, atom)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

run(repo, atom, migrations)

+ + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

run_direction(migrations, direction)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.PrepareQuery.html b/doc/Couchx.PrepareQuery.html new file mode 100644 index 0000000..de6575c --- /dev/null +++ b/doc/Couchx.PrepareQuery.html @@ -0,0 +1,195 @@ + + + + + + + + + + Couchx.PrepareQuery — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.PrepareQuery (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ +
+

+ Functions +

+
+
+ call(query) + +
+ +
+ +
+ +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

call(query)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.QueryHandler.html b/doc/Couchx.QueryHandler.html new file mode 100644 index 0000000..79c3d31 --- /dev/null +++ b/doc/Couchx.QueryHandler.html @@ -0,0 +1,195 @@ + + + + + + + + + + Couchx.QueryHandler — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.QueryHandler (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ + + +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

query_results(doc, fields, metadata)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.Support.ApplicationHelper.html b/doc/Couchx.Support.ApplicationHelper.html new file mode 100644 index 0000000..cfe91d7 --- /dev/null +++ b/doc/Couchx.Support.ApplicationHelper.html @@ -0,0 +1,195 @@ + + + + + + + + + + Couchx.Support.ApplicationHelper — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx.Support.ApplicationHelper (Couchx v0.3.0) + +

+ + + +
+

+ + + Link to this section + + Summary +

+ +
+

+ Functions +

+ + +
+ +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

base_repo_path(repo, directory)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Couchx.epub b/doc/Couchx.epub new file mode 100644 index 0000000000000000000000000000000000000000..03b4391a2097e02f052938adf9efdd925cb08f58 GIT binary patch literal 24454 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 + + + + + + + + + Couchx — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+Couchx (Couchx v0.3.0) + +

+ + +
+

Couchx context module

+
+ + + + +
+
+
+
+ + + + diff --git a/doc/Mix.Tasks.Couchx.Gen.MangoIndex.html b/doc/Mix.Tasks.Couchx.Gen.MangoIndex.html new file mode 100644 index 0000000..0856af0 --- /dev/null +++ b/doc/Mix.Tasks.Couchx.Gen.MangoIndex.html @@ -0,0 +1,140 @@ + + + + + + + + + + mix couchx.gen.mango_index — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+mix couchx.gen.mango_index (Couchx v0.3.0) + +

+ + + + + +
+
+
+
+ + + + diff --git a/doc/Mix.Tasks.Couchx.MangoIndex.Down.html b/doc/Mix.Tasks.Couchx.MangoIndex.Down.html new file mode 100644 index 0000000..e37c97f --- /dev/null +++ b/doc/Mix.Tasks.Couchx.MangoIndex.Down.html @@ -0,0 +1,210 @@ + + + + + + + + + + mix couchx.mango_index.down — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+mix couchx.mango_index.down (Couchx v0.3.0) + +

+ + +
+

Deletes an index or list of indexes provided from the Repo DB.

The Repo passed as -r or --r will define the DB to lookup for the index document. +There is also a parameter set as -n or --names which will need to match the ddoc and the index name.

+ + Examples +

+
$ mix couchx.mango_index.down -r MyApp.Repo -n my-index-ddoc
+

The Repo have to match one in the config.exs file. Also couchx will need knowledge of the main OTP app supervising the repos.

+ + Examples +

+
  confix :couchx, otp_app: :my_app
+  config :my_app, ecto_repos: [MyApp.Repo, Custom.Repo]
+
+ + +
+

+ + + Link to this section + + Summary +

+ +
+

+ Functions +

+ + +
+ +
+ + +
+

+ + + Link to this section + +Functions +

+
+
+ +
+ + + Link to this function + +

prepend(string, suffix)

+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/Mix.Tasks.Couchx.MangoIndex.html b/doc/Mix.Tasks.Couchx.MangoIndex.html new file mode 100644 index 0000000..9916943 --- /dev/null +++ b/doc/Mix.Tasks.Couchx.MangoIndex.html @@ -0,0 +1,171 @@ + + + + + + + + + + mix couchx.mango_index — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+mix couchx.mango_index (Couchx v0.3.0) + +

+ + +
+

Creates the index documents defined in the priv/repo/index/ path.

The migration files should be exs files and can have a up and down functions.

+ + Examples +

+
defmodule MyApp.Repo.Index.MyIndex do
+  use Couchx.MangoIndex, repo_name: BS.Repo
+
+  def up do
+    create_index("my-index") do
+      %{fields: ["name", "email"]}
+    end
+  end
+
+  def down do
+    drop_index("my-index")
+  end
+end

Current convention is that the file name uses - to separate words, and this is used to create de module name.

+ + Example +

+
$ priv/my_repo/index/my-index.exs
+$ mix couchx.mango_index
+

Couchx will need knowledge of the main OTP app supervising the repos, also we need to configure ecto repos.

+ + Example +

+
  confix :couchx, otp_app: :my_app
+  config :my_app, ecto_repos: [MyApp.Repo, Custom.Repo]

The task will look for paths for all the repos and process the indexes it finds.

+
+ + + + +
+
+
+
+ + + + diff --git a/doc/api-reference.html b/doc/api-reference.html new file mode 100644 index 0000000..e5e404e --- /dev/null +++ b/doc/api-reference.html @@ -0,0 +1,293 @@ + + + + + + + + + + API Reference — Couchx v0.3.0 + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +

+ API Reference Couchx v0.3.0 +

+ +
+

+ + Modules +

+ +
+
+
+ Couchx + +
+ +

Couchx context module

+ +
+
+ + +

Adapter to get basic query functionality into Ecto with CouchDB.

+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+ + +
+

+ + Mix Tasks +

+ +
+ +
+ + +

Creates the index documents defined in the priv/repo/index/ path.

+ +
+
+ + +

Deletes an index or list of indexes provided from the Repo DB.

+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/doc/dist/app-f97730d45ef67f3e6188.js b/doc/dist/app-f97730d45ef67f3e6188.js new file mode 100644 index 0000000..50d9c48 --- /dev/null +++ b/doc/dist/app-f97730d45ef67f3e6188.js @@ -0,0 +1,2 @@ +/*! For license information please see app-f97730d45ef67f3e6188.js.LICENSE.txt */ +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=49)}([function(e,t,n){"use strict";function r(e){if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))){var t=0,n=function(){};return{s:n,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,i,a=!0,l=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(l)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n/g,">").replace(/"/g,""")}function u(){return document.body.dataset.type}function c(e,t){if(e){var n,o=r(e);try{for(o.s();!(n=o.n()).done;){var i=n.value,a=i.nodeGroups&&i.nodeGroups.find((function(e){return e.nodes.some((function(e){return e.anchor===t}))}));if(a)return a.key}}catch(e){o.e(e)}finally{o.f()}return null}}function d(){return window.location.hash.replace(/^#/,"")}function f(e){return new URLSearchParams(window.location.search).get(e)}function p(e){return fetch(e).then((function(e){return e.ok})).catch((function(){return!1}))}function h(e){"loading"!==document.readyState?e():document.addEventListener("DOMContentLoaded",e)}function m(e){return!e||""===e.trim()}function y(e,t){var n;return function(){for(var r=arguments.length,o=new Array(r),i=0;i":">",'"':""","'":"'","`":"`","=":"="},o=/[&<>"'`=]/g,i=/[&<>"'`=]/;function a(e){return r[e]}function l(e){for(var t=1;t0){var s=I.utils.clone(t)||{};s.position=[a,l],s.index=o.length,o.push(new I.Token(n.slice(a,i),s))}a=i+1}}return o},I.tokenizer.separator=/[\s\-]+/,I.Pipeline=function(){this._stack=[]},I.Pipeline.registeredFunctions=Object.create(null),I.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&I.utils.warn("Overwriting existing registered function: "+t),e.label=t,I.Pipeline.registeredFunctions[e.label]=e},I.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||I.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},I.Pipeline.load=function(e){var t=new I.Pipeline;return e.forEach((function(e){var n=I.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},I.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach((function(e){I.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},I.Pipeline.prototype.after=function(e,t){I.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},I.Pipeline.prototype.before=function(e,t){I.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},I.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},I.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(ie&&(n=o),i!=e);)r=n-t,o=t+Math.floor(r/2),i=this.elements[2*o];return i==e||i>e?2*o:il?u+=2:a==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},I.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},I.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var i,a=o.str.charAt(0);a in o.node.edges?i=o.node.edges[a]:(i=new I.TokenSet,o.node.edges[a]=i),1==o.str.length&&(i.final=!0),r.push({node:i,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new I.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new I.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new I.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},I.TokenSet.fromString=function(e){for(var t=new I.TokenSet,n=t,r=0,o=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},I.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},I.Index.prototype.search=function(e){return this.query((function(t){new I.QueryParser(e,t).parse()}))},I.Index.prototype.query=function(e){for(var t=new I.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),i=Object.create(null),a=Object.create(null),l=0;l1?1:e},I.Builder.prototype.k1=function(e){this._k1=e},I.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o=this.length)return I.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},I.QueryLexer.prototype.width=function(){return this.pos-this.start},I.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},I.QueryLexer.prototype.backup=function(){this.pos-=1},I.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=I.QueryLexer.EOS&&this.backup()},I.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(I.QueryLexer.TERM)),e.ignore(),e.more())return I.QueryLexer.lexText},I.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(I.QueryLexer.EDIT_DISTANCE),I.QueryLexer.lexText},I.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(I.QueryLexer.BOOST),I.QueryLexer.lexText},I.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(I.QueryLexer.TERM)},I.QueryLexer.termSeparator=I.tokenizer.separator,I.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==I.QueryLexer.EOS)return I.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return I.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(I.QueryLexer.TERM),I.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(I.QueryLexer.TERM),I.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(I.QueryLexer.PRESENCE),I.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(I.QueryLexer.PRESENCE),I.QueryLexer.lexText;if(t.match(I.QueryLexer.termSeparator))return I.QueryLexer.lexTerm}else e.escapeCharacter()}},I.QueryParser=function(e,t){this.lexer=new I.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},I.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=I.QueryParser.parseClause;e;)e=e(this);return this.query},I.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},I.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},I.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},I.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case I.QueryLexer.PRESENCE:return I.QueryParser.parsePresence;case I.QueryLexer.FIELD:return I.QueryParser.parseField;case I.QueryLexer.TERM:return I.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new I.QueryParseError(n,t.start,t.end)}},I.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=I.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=I.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new I.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new I.QueryParseError(n,t.start,t.end)}switch(r.type){case I.QueryLexer.FIELD:return I.QueryParser.parseField;case I.QueryLexer.TERM:return I.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new I.QueryParseError(n,r.start,r.end)}}},I.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new I.QueryParseError(r,t.start,t.end)}switch(o.type){case I.QueryLexer.TERM:return I.QueryParser.parseTerm;default:r="expecting term, found '"+o.type+"'";throw new I.QueryParseError(r,o.start,o.end)}}},I.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new I.QueryParseError(r,n.start,n.end)}else e.nextClause()}},I.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new I.QueryParseError(r,o.start,o.end)}else e.nextClause()}},I.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new I.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return I})?r.call(t,n,t,e):r)||(e.exports=o)}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(0);function o(){Object(r.m)("[data-group-id]").forEach((function(e){var t=e.getAttribute("data-group-id");e.addEventListener("mouseenter",(function(e){i(t,!0)})),e.addEventListener("mouseleave",(function(e){i(t,!1)}))}))}function i(e,t){Object(r.m)('[data-group-id="'.concat(e,'"]')).forEach((function(e){e.classList.toggle("hll",t)}))}},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.HandlebarsEnvironment=c;var o=n(2),i=r(n(3)),a=n(8),l=n(35),s=r(n(9)),u=n(10);t.VERSION="4.7.6";t.COMPILER_REVISION=8;t.LAST_COMPATIBLE_COMPILER_REVISION=7;t.REVISION_CHANGES={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};function c(e,t,n){this.helpers=e||{},this.partials=t||{},this.decorators=n||{},a.registerDefaultHelpers(this),l.registerDefaultDecorators(this)}c.prototype={constructor:c,logger:s.default,log:s.default.log,registerHelper:function(e,t){if("[object Object]"===o.toString.call(e)){if(t)throw new i.default("Arg not supported with multiple helpers");o.extend(this.helpers,e)}else this.helpers[e]=t},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,t){if("[object Object]"===o.toString.call(e))o.extend(this.partials,e);else{if(void 0===t)throw new i.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=t}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,t){if("[object Object]"===o.toString.call(e)){if(t)throw new i.default("Arg not supported with multiple decorators");o.extend(this.decorators,e)}else this.decorators[e]=t},unregisterDecorator:function(e){delete this.decorators[e]},resetLoggedPropertyAccesses:function(){u.resetLoggedProperties()}};var d=s.default.log;t.log=d,t.createFrame=o.createFrame,t.logger=s.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.registerDefaultHelpers=function(e){o.default(e),i.default(e),a.default(e),l.default(e),s.default(e),u.default(e),c.default(e)},t.moveHelperToHooks=function(e,t,n){e.helpers[t]&&(e.hooks[t]=e.helpers[t],n||delete e.helpers[t])};var o=r(n(28)),i=r(n(29)),a=r(n(30)),l=r(n(31)),s=r(n(32)),u=r(n(33)),c=r(n(34))},function(e,t,n){"use strict";t.__esModule=!0;var r=n(2),o={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(e){if("string"==typeof e){var t=r.indexOf(o.methodMap,e.toLowerCase());e=t>=0?t:parseInt(e,10)}return e},log:function(e){if(e=o.lookupLevel(e),"undefined"!=typeof console&&o.lookupLevel(o.level)<=e){var t=o.methodMap[e];console[t]||(t="log");for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;i=t||n<0||h&&e-u>=i}function w(){var e=p();if(x(e))return O(e);l=setTimeout(w,function(e){var n=t-(e-s);return h?f(n,i-(e-u)):n}(e))}function O(e){return l=void 0,v&&r?g(e):(r=o=void 0,a)}function k(){var e=p(),n=x(e);if(r=arguments,o=this,s=e,n){if(void 0===l)return b(s);if(h)return l=setTimeout(w,t),g(s)}return void 0===l&&(l=setTimeout(w,t)),a}return t=y(t)||0,m(n)&&(c=!!n.leading,i=(h="maxWait"in n)?d(y(n.maxWait)||0,t):i,v="trailing"in n?!!n.trailing:v),k.cancel=function(){void 0!==l&&clearTimeout(l),u=0,r=s=o=l=void 0},k.flush=function(){return void 0===l?a:O(p())},k}function m(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function y(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==c.call(e)}(e))return NaN;if(m(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=m(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(n,"");var l=o.test(e);return l||i.test(e)?a(e.slice(2),l?2:8):r.test(e)?NaN:+e}e.exports=function(e,t,n){var r=!0,o=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return m(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),h(e,t,{leading:r,maxWait:t,trailing:o})}}).call(this,n(6))},function(e,t,n){var r=n(1);function o(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,i,a,l,s){var u,c=null!=t?t:e.nullContext||{},d=e.lambda,f=e.escapeExpression,p=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(u=o(n(42)).call(c,s[1],null!=(u=l[0][0])?p(u,"group"):u,{name:"groupChanged",hash:{},fn:e.program(2,a,0,l,s),inverse:e.noop,data:a,blockParams:l,loc:{start:{line:2,column:2},end:{line:4,column:19}}}))?u:"")+"\n"+(null!=(u=o(n(43)).call(c,s[1],l[0][0],{name:"nestingChanged",hash:{},fn:e.program(4,a,0,l,s),inverse:e.noop,data:a,blockParams:l,loc:{start:{line:6,column:2},end:{line:8,column:21}}}))?u:"")+'\n
  • \n \n'+(null!=(u=p(r,"if").call(c,null!=(u=l[0][0])?p(u,"nested_title"):u,{name:"if",hash:{},fn:e.program(10,a,0,l,s),inverse:e.program(12,a,0,l,s),data:a,blockParams:l,loc:{start:{line:15,column:6},end:{line:19,column:13}}}))?u:"")+'\n \n \n\n
      \n
    • \n Top\n
    • \n\n'+(null!=(u=o(n(12)).call(c,null!=(u=l[0][0])?p(u,"headers"):u,{name:"isArray",hash:{},fn:e.program(14,a,0,l,s),inverse:e.program(17,a,0,l,s),data:a,blockParams:l,loc:{start:{line:29,column:6},end:{line:71,column:18}}}))?u:"")+"
    \n
  • \n"},2:function(e,t,n,r,o,i){var a,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
  • '+e.escapeExpression(e.lambda(null!=(a=i[1][0])?l(a,"group"):a,t))+"
  • \n"},4:function(e,t,n,r,o,i){var a,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return' \n"},6:function(e,t,n,r,o){return"current-page open"},8:function(e,t,n,r,o){return"nested"},10:function(e,t,n,r,o,i){var a,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return" "+e.escapeExpression(e.lambda(null!=(a=i[1][0])?l(a,"nested_title"):a,t))+"\n"},12:function(e,t,n,r,o,i){var a,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return" "+e.escapeExpression(e.lambda(null!=(a=i[1][0])?l(a,"title"):a,t))+"\n"},14:function(e,t,n,r,o,i){var a,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=l(n,"each").call(null!=t?t:e.nullContext||{},null!=(a=i[1][0])?l(a,"headers"):a,{name:"each",hash:{},fn:e.program(15,o,0,i),inverse:e.noop,data:o,blockParams:i,loc:{start:{line:30,column:8},end:{line:34,column:17}}}))?a:""},15:function(e,t,n,r,o,i){var a,l=e.lambda,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
  • \n '+(null!=(a=l(null!=t?s(t,"id"):t,t))?a:"")+"\n
  • \n"},17:function(e,t,r,i,a,l){var s,u=null!=t?t:e.nullContext||{},c=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(s=o(n(44)).call(u,l[1][0],{name:"showSections",hash:{},fn:e.program(18,a,0,l),inverse:e.noop,data:a,blockParams:l,loc:{start:{line:36,column:8},end:{line:50,column:25}}}))?s:"")+(null!=(s=o(n(45)).call(u,l[1][0],{name:"showSummary",hash:{},fn:e.program(23,a,0,l),inverse:e.noop,data:a,blockParams:l,loc:{start:{line:51,column:8},end:{line:55,column:24}}}))?s:"")+(null!=(s=c(r,"each").call(u,null!=(s=l[1][0])?c(s,"nodeGroups"):s,{name:"each",hash:{},fn:e.program(25,a,1,l),inverse:e.noop,data:a,blockParams:l,loc:{start:{line:56,column:8},end:{line:70,column:17}}}))?s:"")},18:function(e,t,r,i,a,l){var s,u=null!=t?t:e.nullContext||{},c=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
  • \n \n Sections\n \n \n
      \n'+(null!=(s=c(r,"each").call(u,null!=t?c(t,"sections"):t,{name:"each",hash:{},fn:e.program(21,a,0,l),inverse:e.noop,data:a,blockParams:l,loc:{start:{line:43,column:14},end:{line:47,column:23}}}))?s:"")+"
    \n
  • \n"},19:function(e,t,n,r,o){return"open"},21:function(e,t,n,r,o,i){var a,l=e.lambda,s=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
  • \n '+(null!=(a=l(null!=t?u(t,"id"):t,t))?a:"")+"\n
  • \n"},23:function(e,t,n,r,o,i){var a,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
  • \n Summary\n
  • \n'},25:function(e,t,n,r,o,i){var a,l=e.lambda,s=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
  • \n \n '+s(l(null!=(a=i[0][0])?u(a,"name"):a,t))+'\n \n \n
      \n'+(null!=(a=u(n,"each").call(null!=t?t:e.nullContext||{},null!=(a=i[0][0])?u(a,"nodes"):a,{name:"each",hash:{},fn:e.program(26,o,0,i),inverse:e.noop,data:o,blockParams:i,loc:{start:{line:63,column:14},end:{line:67,column:23}}}))?a:"")+"
    \n
  • \n"},26:function(e,t,n,r,o,i){var a,l=e.lambda,s=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
  • \n '+s(l(null!=t?u(t,"id"):t,t))+"\n
  • \n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o,i,a){var l,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(l=s(n,"each").call(null!=t?t:e.nullContext||{},null!=t?s(t,"nodes"):t,{name:"each",hash:{},fn:e.program(1,o,2,i,a),inverse:e.noop,data:o,blockParams:i,loc:{start:{line:1,column:0},end:{line:74,column:9}}}))?l:""},useData:!0,useDepths:!0,useBlockParams:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({1:function(e,t,n,r,o){var i,a,l=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,u=e.escapeExpression,c=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return' \n
    \n '+(null!=(i="function"==typeof(a=null!=(a=c(n,"title")||(null!=t?c(t,"title"):t))?a:s)?a.call(l,{name:"title",hash:{},data:o,loc:{start:{line:9,column:8},end:{line:9,column:19}}}):a)?i:"")+"\n"+(null!=(i=c(n,"if").call(l,null!=t?c(t,"label"):t,{name:"if",hash:{},fn:e.program(2,o,0),inverse:e.noop,data:o,loc:{start:{line:10,column:8},end:{line:12,column:15}}}))?i:"")+"
    \n\n"+(null!=(i=c(n,"if").call(l,null!=t?c(t,"description"):t,{name:"if",hash:{},fn:e.program(4,o,0),inverse:e.noop,data:o,loc:{start:{line:15,column:6},end:{line:19,column:13}}}))?i:"")+"
    \n"},2:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return' ('+e.escapeExpression("function"==typeof(i=null!=(i=a(n,"label")||(null!=t?a(t,"label"):t))?i:e.hooks.helperMissing)?i.call(null!=t?t:e.nullContext||{},{name:"label",hash:{},data:o,loc:{start:{line:11,column:31},end:{line:11,column:40}}}):i)+")\n"},4:function(e,t,n,r,o){var i,a,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n '+(null!=(i="function"==typeof(a=null!=(a=l(n,"description")||(null!=t?l(t,"description"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"description",hash:{},data:o,loc:{start:{line:17,column:10},end:{line:17,column:27}}}):a)?i:"")+"\n
    \n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){var i,a,l=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,u=e.escapeExpression,c=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n \n
    "'+u("function"==typeof(a=null!=(a=c(n,"term")||(null!=t?c(t,"term"):t))?a:s)?a.call(l,{name:"term",hash:{},data:o,loc:{start:{line:3,column:28},end:{line:3,column:36}}}):a)+'"
    \n
    Search the documentation
    \n
    \n'+(null!=(i=c(n,"each").call(l,null!=t?c(t,"suggestions"):t,{name:"each",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,loc:{start:{line:6,column:2},end:{line:21,column:11}}}))?i:"")+"
    \n"},useData:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({1:function(e,t,n,r,o){var i,a,l=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,u=e.escapeExpression,c=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return' \n"},2:function(e,t,n,r,o){return" selected disabled"},compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n \n
    \n"},useData:!0})},function(e,t,n){var r=n(1);function o(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,o){var i=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return"

    Search results for "+e.escapeExpression(e.lambda(null!=t?i(t,"value"):t,t))+"

    \n"},3:function(e,t,n,r,o){return"

    Invalid Search

    \n"},5:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(i=a(n,"each").call(null!=t?t:e.nullContext||{},null!=t?a(t,"results"):t,{name:"each",hash:{},fn:e.program(6,o,0),inverse:e.noop,data:o,loc:{start:{line:8,column:2},end:{line:17,column:11}}}))?i:""},6:function(e,t,n,r,o){var i,a=e.lambda,l=e.escapeExpression,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n

    \n '+l(a(null!=t?s(t,"title"):t,t))+" ("+l(a(null!=t?s(t,"type"):t,t))+")\n

    \n"+(null!=(i=s(n,"each").call(null!=t?t:e.nullContext||{},null!=t?s(t,"excerpts"):t,{name:"each",hash:{},fn:e.program(7,o,0),inverse:e.noop,data:o,loc:{start:{line:13,column:8},end:{line:15,column:17}}}))?i:"")+"
    \n"},7:function(e,t,n,r,o){var i;return'

    '+(null!=(i=e.lambda(t,t))?i:"")+"

    \n"},9:function(e,t,r,i,a){var l,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(l=o(n(12)).call(null!=t?t:e.nullContext||{},null!=t?s(t,"results"):t,{name:"isArray",hash:{},fn:e.program(10,a,0),inverse:e.program(12,a,0),data:a,loc:{start:{line:19,column:2},end:{line:25,column:14}}}))?l:"")+"\n

    The search functionality is full-text based. Here are some tips:

    \n\n
      \n
    • Multiple words (such as foo bar) are searched as OR
    • \n
    • Use * anywhere (such as fo*) as wildcard
    • \n
    • Use + before a word (such as +foo) to make its presence required
    • \n
    • Use - before a word (such as -foo) to make its absence required
    • \n
    • Use WORD^NUMBER (such as foo^2) to boost the given word
    • \n
    • Use WORD~NUMBER (such as foo~2) to do a search with edit distance on word
    • \n
    \n\n

    To quickly go to a module, type, or function, use the autocompletion feature in the sidebar search.

    \n"},10:function(e,t,n,r,o){var i=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return"

    Sorry, we couldn't find anything for "+e.escapeExpression(e.lambda(null!=t?i(t,"value"):t,t))+".

    \n"},12:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(i=a(n,"if").call(null!=t?t:e.nullContext||{},null!=t?a(t,"value"):t,{name:"if",hash:{},fn:e.program(13,o,0),inverse:e.program(15,o,0),data:o,loc:{start:{line:21,column:2},end:{line:25,column:2}}}))?i:""},13:function(e,t,n,r,o){var i=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return"

    Invalid search: "+e.escapeExpression(e.lambda(null!=t?i(t,"errorMessage"):t,t))+".

    \n"},15:function(e,t,n,r,o){return"

    Please type something into the search bar to perform a search.

    \n "},compiler:[8,">= 4.3.0"],main:function(e,t,r,i,a){var l,s=null!=t?t:e.nullContext||{},u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(l=u(r,"if").call(s,null!=t?u(t,"value"):t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.program(3,a,0),data:a,loc:{start:{line:1,column:0},end:{line:5,column:7}}}))?l:"")+"\n"+(null!=(l=o(n(46)).call(s,null!=t?u(t,"results"):t,{name:"isNonEmptyArray",hash:{},fn:e.program(5,a,0),inverse:e.program(9,a,0),data:a,loc:{start:{line:7,column:0},end:{line:39,column:20}}}))?l:"")},useData:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){return'\n'},useData:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({1:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(i=a(n,"if").call(null!=t?t:e.nullContext||{},null!=t?a(t,"description"):t,{name:"if",hash:{},fn:e.program(2,o,0),inverse:e.noop,data:o,loc:{start:{line:3,column:4},end:{line:16,column:11}}}))?i:""},2:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n
    \n'+(null!=(i=a(n,"if").call(null!=t?t:e.nullContext||{},null!=t?a(t,"displayAs"):t,{name:"if",hash:{},fn:e.program(3,o,0),inverse:e.program(5,o,0),data:o,loc:{start:{line:6,column:10},end:{line:10,column:17}}}))?i:"")+'
    \n
    \n '+e.escapeExpression(e.lambda(null!=t?a(t,"description"):t,t))+"\n
    \n
    \n"},3:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return" "+(null!=(i=e.lambda(null!=t?a(t,"displayAs"):t,t))?i:"")+"\n"},5:function(e,t,n,r,o){var i=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return" "+e.escapeExpression(e.lambda(null!=t?i(t,"key"):t,t))+"\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n'+(null!=(i=a(n,"each").call(null!=t?t:e.nullContext||{},null!=t?a(t,"shortcuts"):t,{name:"each",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,loc:{start:{line:2,column:2},end:{line:17,column:11}}}))?i:"")+"
    \n"},useData:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){return'
    \n \n \n
    \n
    \n'},useData:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({1:function(e,t,n,r,o){var i,a=null!=t?t:e.nullContext||{},l=e.hooks.helperMissing,s=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n '+s("function"==typeof(i=null!=(i=u(n,"name")||(null!=t?u(t,"name"):t))?i:l)?i.call(a,{name:"name",hash:{},data:o,loc:{start:{line:3,column:4},end:{line:3,column:12}}}):i)+"\n
    \n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(i=a(n,"each").call(null!=t?t:e.nullContext||{},null!=t?a(t,"results"):t,{name:"each",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,loc:{start:{line:1,column:0},end:{line:5,column:9}}}))?i:""},useData:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({1:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n '+e.escapeExpression(e.lambda(null!=(i=null!=t?a(t,"hint"):t)?a(i,"description"):i,t))+"\n
    \n"},3:function(e,t,n,r,o){var i,a=e.lambda,l=e.escapeExpression,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n

    \n '+l(a(null!=(i=null!=t?s(t,"hint"):t)?s(i,"title"):i,t))+'\n
    '+l(a(null!=(i=null!=t?s(t,"hint"):t)?s(i,"version"):i,t))+"
    \n

    \n
    \n"+(null!=(i=s(n,"if").call(null!=t?t:e.nullContext||{},null!=(i=null!=t?s(t,"hint"):t)?s(i,"description"):i,{name:"if",hash:{},fn:e.program(4,o,0),inverse:e.noop,data:o,loc:{start:{line:12,column:2},end:{line:16,column:9}}}))?i:"")},4:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'
    \n '+e.escapeExpression(e.lambda(null!=(i=null!=t?a(t,"hint"):t)?a(i,"description"):i,t))+"\n
    \n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){var i,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(i=a(n,"if").call(null!=t?t:e.nullContext||{},null!=t?a(t,"isPlain"):t,{name:"if",hash:{},fn:e.program(1,o,0),inverse:e.program(3,o,0),data:o,loc:{start:{line:1,column:0},end:{line:17,column:7}}}))?i:""},useData:!0})},function(e,t,n){var r=n(1);e.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,r,o){return'
    \n
    \n
    \n'},useData:!0})},,,,function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}t.__esModule=!0;var i=o(n(7)),a=r(n(38)),l=r(n(3)),s=o(n(2)),u=o(n(39)),c=r(n(41));function d(){var e=new i.HandlebarsEnvironment;return s.extend(e,i),e.SafeString=a.default,e.Exception=l.default,e.Utils=s,e.escapeExpression=s.escapeExpression,e.VM=u,e.template=function(t){return u.template(t,e)},e}var f=d();f.create=d,c.default(f),f.default=f,t.default=f,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var r=n(2);t.default=function(e){e.registerHelper("blockHelperMissing",(function(t,n){var o=n.inverse,i=n.fn;if(!0===t)return i(this);if(!1===t||null==t)return o(this);if(r.isArray(t))return t.length>0?(n.ids&&(n.ids=[n.name]),e.helpers.each(t,n)):o(this);if(n.data&&n.ids){var a=r.createFrame(n.data);a.contextPath=r.appendContextPath(n.data.contextPath,n.name),n={data:a}}return i(t,n)}))},e.exports=t.default},function(e,t,n){"use strict";(function(r){t.__esModule=!0;var o,i=n(2),a=n(3),l=(o=a)&&o.__esModule?o:{default:o};t.default=function(e){e.registerHelper("each",(function(e,t){if(!t)throw new l.default("Must pass iterator to #each");var n,o=t.fn,a=t.inverse,s=0,u="",c=void 0,d=void 0;function f(t,n,r){c&&(c.key=t,c.index=n,c.first=0===n,c.last=!!r,d&&(c.contextPath=d+t)),u+=o(e[t],{data:c,blockParams:i.blockParams([e[t],t],[d+t,null])})}if(t.data&&t.ids&&(d=i.appendContextPath(t.data.contextPath,t.ids[0])+"."),i.isFunction(e)&&(e=e.call(this)),t.data&&(c=i.createFrame(t.data)),e&&"object"==typeof e)if(i.isArray(e))for(var p=e.length;s=l.LAST_COMPATIBLE_COMPILER_REVISION&&t<=l.COMPILER_REVISION)return;if(t0)return t.fn(this)}},function(e,t,n){"use strict";n.r(t),t.default=function(e,t){if(e.nodeGroups)return t.fn(this)}},function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return Array.isArray(e)&&e.length>0?t.fn(this):t.inverse(this)}},,,function(e,t,n){"use strict";n.r(t);var r=n(0);function o(){Object(r.l)(".content").querySelectorAll("a").forEach((function(e){e.querySelector("code, img")&&e.classList.add("no-underline")})),Object(r.l)(".content-inner").setAttribute("tabindex",-1),Object(r.l)(".content-inner").focus()}var i=n(13),a=n.n(i);function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n"+Object(r.c)(d)+""+e(f,n)}return e(t,a)}(e,G(t).sort((function(e,t){return t.length-e.length})))}var K={autocompleteSuggestions:[],selectedIdx:-1};function Y(){Object(r.l)(".autocomplete").classList.remove("shown")}function Z(e){var t,n,o,i;K.autocompleteSuggestions=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;if(Object(r.j)(e))return[];var n=k(),o=[].concat(A(V(n.modules,e,N)),A(B(n.modules,e,F)),A(V(n.tasks,e,H)));return q(o).slice(0,t)}(e),K.selectedIdx=-1,Object(r.j)(e)?Y():(t={term:e,suggestions:K.autocompleteSuggestions},n=t.term,o=t.suggestions,i=T()({suggestions:o,term:n}),Object(r.l)(".autocomplete").innerHTML=i,X(0),Object(r.l)(".autocomplete").classList.add("shown"))}function X(e){K.selectedIdx=function(e){var t=K.autocompleteSuggestions.length+1;return(K.selectedIdx+e+1+t)%t-1}(e);var t=Object(r.l)("".concat(".autocomplete-suggestion",".selected")),n=Object(r.l)("".concat(".autocomplete-suggestion",'[data-index="').concat(K.selectedIdx,'"]'));t&&t.classList.remove("selected"),n&&n.classList.add("selected")}function ee(){var e;(e=Object(r.l)("form.sidebar-search input")).addEventListener("keydown",(function(t){"Escape"===t.key?(te(),e.blur()):"Enter"===t.key?function(e){var t=Object(r.l)("form.sidebar-search input"),n=e.shiftKey||e.ctrlKey,o=-1===K.selectedIdx?null:K.autocompleteSuggestions[K.selectedIdx];e.preventDefault();var i=n?"_blank":"_self",a=document.createElement("a");a.setAttribute("target",i),o?a.setAttribute("href",o.link):a.setAttribute("href","search.html?q=".concat(encodeURIComponent(t.value))),a.click(),n||(te(),ne())}(t):"ArrowUp"===t.key?(X(-1),t.preventDefault()):"ArrowDown"===t.key&&(X(1),t.preventDefault())})),e.addEventListener("input",(function(e){Z(e.target.value)})),e.addEventListener("focus",(function(e){document.body.classList.add("search-focused"),Z(e.target.value)})),e.addEventListener("blur",(function(t){var n=t.relatedTarget;if(n){if(n.matches(".autocomplete-suggestion"))return setTimeout((function(){Object(r.l)(".autocomplete").classList.contains("shown")&&e.focus()}),1e3),null;n.matches("form.sidebar-search .search-close-button")&&te()}ne()})),Object(r.l)(".autocomplete").addEventListener("click",(function(t){t.shiftKey||t.ctrlKey?e.focus():(te(),ne())}))}function te(){Object(r.l)("form.sidebar-search input").value=""}function ne(){document.body.classList.remove("search-focused"),Y()}var re=n(16),oe=n.n(re);function ie(e){return function(e){if(Array.isArray(e))return ae(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ae(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ae(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ae(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&function(e){var t=e.nodes,n=Object(r.l)(".sidebar-projectVersion"),o=oe()({nodes:t});n.innerHTML=o,Object(r.l)(".sidebar-projectVersionsDropdown").addEventListener("change",ce)}({nodes:function(e,t){return function(e,t){return e.some((function(e){return e.version===t}))?e:[{version:t,url:"#"}].concat(ie(e))}(e,t).map((function(e){return function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?[].concat(ge(t),[e]):t}fe.a.Pipeline.registerFunction(t,"snakeCaseSplitter"),e.pipeline.before(fe.a.stemmer,t)}function Ee(e){return searchNodes.find((function(t){return t.ref===e}))||null}function Se(e,t){var n=e.doc,o=Object.keys(t).filter((function(e){return"doc"in t[e]})).map((function(e){return t[e].doc.position.map((function(e){var t=me(e,2),o=t[0],i=t[1];return function(e,t,n){var o=Math.max(t-80,0),i=Math.min(t+n+80,e.length);return[o>0?"...":"",e.slice(o,t),""+Object(r.c)(e.slice(t,t+n))+"",e.slice(t+n,i),i=3&&(n={results:We.autocompleteResults},o=n.results,i=Object(r.l)("#quick-switch-results"),a=Be()({results:o}),i.innerHTML=a,Object(r.m)(".quick-switch-result").forEach((function(e){e.addEventListener("click",(function(t){var n=e.getAttribute("data-index");Je(We.autocompleteResults[n].name)}))}))))}))}),300);function Ye(e){We.selectedIdx=function(e){var t=We.autocompleteResults.length;if(null===We.selectedIdx){if(e>=0)return 0;if(e<0)return t-1}return(We.selectedIdx+e+t)%t}(e);var t=Object(r.l)(".quick-switch-result.selected"),n=Object(r.l)('.quick-switch-result[data-index="'.concat(We.selectedIdx,'"]'));t&&t.classList.remove("selected"),n&&n.classList.add("selected")}var Ze=[{key:"c",description:"Toggle sidebar",action:y},{key:"n",description:"Toggle night mode",action:_e},{key:"s",description:"Focus search bar",displayAs:"/ or s",action:rt},{key:"/",action:rt},{key:"g",description:"Go to a HexDocs package",displayAs:"g",action:Ge},{key:"?",displayAs:"?",description:"Bring up this help dialog",action:function(){Object(r.l)("#modal").classList.contains("shown")&&Object(r.l)("#keyboard-shortcuts-modal-body")?Re():ot()}}],Xe={shortcutBeingPressed:null};function et(){Object(r.l)(".display-shortcuts-help").addEventListener("click",(function(e){ot()})),document.addEventListener("keydown",tt),document.addEventListener("keyup",nt)}function tt(e){if(!Xe.shortcutBeingPressed&&!e.target.matches("input, textarea")&&!(e.ctrlKey||e.metaKey||e.altKey)){var t=Ze.find((function(t){return t.key===e.key}));t&&(Xe.shortcutBeingPressed=t,e.preventDefault(),t.action(e))}}function nt(e){Xe.shortcutBeingPressed=null}function rt(e){Re(),g().then((function(){Object(r.l)("form.sidebar-search input").focus()}))}function ot(){Me({title:"Keyboard Shortcuts",body:Ne()({shortcuts:Ze})})}var it=n(22),at=n.n(it),lt=n(23),st=n.n(lt),ut="plain",ct="function",dt="module",ft=[{href:"typespecs.html#basic-types",hint:{kind:ut,description:"Basic type"}},{href:"typespecs.html#literals",hint:{kind:ut,description:"Literal"}},{href:"typespecs.html#built-in-types",hint:{kind:ut,description:"Built-in type"}}],pt={cancelHintFetching:null};function ht(e){var t=mt(e);return t?Promise.resolve(t):function(e){var t=e.replace(".html",".html?hint=true");return new Promise((function(e,n){var r=document.createElement("iframe");function o(n){var r=n.data,o=r.href,a=r.hint;t===o&&(i(),e(a))}function i(){r.remove(),window.removeEventListener("message",o),pt.cancelHintFetching=null}r.setAttribute("sandbox","allow-scripts allow-same-origin"),r.setAttribute("src",t),r.style.display="none",pt.cancelHintFetching=function(){i(),n(new Error("cancelled"))},window.addEventListener("message",o),document.body.appendChild(r)}))}(e)}function mt(e){var t=ft.find((function(t){return e.includes(t.href)}));return t?t.hint:null}var yt=450,vt=768,gt={currentLinkElement:null,hoverDelayTimeout:null};function bt(){var e;e=st()(),Object(r.l)("body .content-inner").insertAdjacentHTML("beforeend",e),Object(r.l)("footer .tooltips-toggle").addEventListener("click",(function(e){(function(e){try{e?localStorage.setItem("tooltipsDisabled","true"):localStorage.removeItem("tooltipsDisabled")}catch(e){}})(!xt()),wt()})),Object(r.m)(".content a").forEach((function(e){var t,n,o;!(t=e).classList.contains("detail-link")&&(n=t.href,o=n.replace("#content",""),window.location.href.split("#")[0]!==o&&function(e){return!!mt(e)||!(e.includes("#")&&!/#.*\//.test(e))&&e.includes(".html")}(t.href))&&(e.addEventListener("mouseenter",(function(t){!function(e){var t,n;(t=!xt(),n=window.innerWidth p"),a=i?i.textContent:"",{kind:ct,title:o.trim(),description:a.trim()}));if(["modules","tasks"].includes(Object(r.f)()))return jt(function(e){for(var t=e.querySelector("h1");t.firstElementChild;)t.removeChild(t.firstElementChild);var n=t.textContent,r=e.querySelector("#moduledoc p"),o=r?r.textContent:"";return{kind:dt,title:n.trim(),description:o.trim()}}(t));var n,o,i,a;return null}();e&&function(e){var t=window.location.href,n={hint:e,href:t};window.parent.postMessage(n,"*")}(e)}}function jt(e){return function(e){for(var t=1;tul{display:block}.sidebar #full-list li.nesting-context{opacity:.6}.sidebar #full-list li.nested{margin-left:2ex}.sidebar #full-list li.group{text-transform:uppercase;font-weight:700;font-size:.8em;margin:2em 0 0;line-height:1.8em;color:#ddd}.sidebar #full-list li .sections-list>li,.sidebar #full-list li a.expand{text-overflow:ellipsis}.sidebar #full-list li a.expand span{color:#d5dae6;opacity:0;padding:0 8px 0 2px;font-size:.8em}.sidebar #full-list li a.expand:hover span{opacity:1}.sidebar #full-list>li.current-page>a,.sidebar #full-list li a.expand span:hover{color:#fff}.sidebar #full-list>li:last-child{margin-bottom:30px}.sidebar #full-list ul{display:none;margin:9px 15px;padding:0}.sidebar #full-list ul li{font-weight:300;line-height:18px;padding:2px 10px}.sidebar #full-list ul li ul{display:none;margin:9px 4px}.sidebar #full-list ul li ul li{border-left:1px solid #767676;padding:0 10px}.sidebar #full-list ul li ul li.current-hash:before{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\F105";margin-left:-10px;font-size:16px;margin-right:5px}.sidebar #full-list ul li ul li.current-hash{border-left:none}.sidebar #full-list ul li ul li.current-hash>a{color:#fff}.sidebar-button{color:#e1e1e1;cursor:pointer;background-color:transparent;border:none;padding:10px 11px;font-size:16px}.sidebar-button:hover{color:#fff}.sidebar-button:active,.sidebar-button:focus,.sidebar-button:hover{outline:none}@media screen and (max-height:500px){.sidebar{overflow-y:auto}.sidebar #full-list{overflow:visible}}.content-inner{font-family:Merriweather,Book Antiqua,Georgia,Century Schoolbook,serif;font-size:1em;line-height:1.6875em;position:relative}.content-inner h1,.content-inner h2,.content-inner h3,.content-inner h4,.content-inner h5,.content-inner h6{font-family:Lato,sans-serif;font-weight:700;line-height:1.5em;word-wrap:break-word}.content-inner h1{font-size:2em;margin:1em 0 .5em}.content-inner h1.signature{margin:0}.content-inner h1.section-heading{margin:1.5em 0 .5em}.content-inner h1 small{font-weight:300}.content-inner h1 a.view-source{font-size:1.2rem}.content-inner h2{font-size:1.6em;margin:1em 0 .5em;font-weight:700}.content-inner h3{font-size:1.375em;margin:1em 0 .5em;font-weight:700}.content-inner a{color:#000;text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.content-inner a:visited{color:#000}.content-inner a.no-underline{text-decoration:none}.content-inner a.view-source{float:right;color:#727272;text-decoration:none;border:none;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;margin-top:1px}.content-inner a.view-source:hover{color:#373f52}.content-inner .note{color:#727272;margin-right:5px;font-size:14px;font-weight:400}.content-inner blockquote{font-style:italic;margin:.5em 0;padding:.25em 1.5em;border-left:3px solid #e1e1e1;display:inline-block}.content-inner blockquote :first-child{padding-top:0;margin-top:0}.content-inner blockquote :last-child{padding-bottom:0;margin-bottom:0}.content-inner table{margin:2em 0}.content-inner th{text-align:left;font-family:Lato,sans-serif;text-transform:uppercase;font-weight:700;padding-bottom:.5em}.content-inner tr{border-bottom:1px solid #d5dae6;vertical-align:bottom;height:2.5em}.content-inner td,.content-inner th{padding-left:1em;line-height:2em;vertical-align:top}.content-inner .section-heading:hover a.hover-link{opacity:1;text-decoration:none}.content-inner .section-heading a.hover-link{-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;display:inline-block;opacity:0;padding:.3em .6em .6em;line-height:1em;margin-left:-2.7em;text-decoration:none;border:none;font-size:16px;vertical-align:middle}.content-inner .detail h2.section-heading{margin-left:.3em}.content-inner .app-vsn{display:none!important;font-size:.6em;line-height:1.5em}@media screen and (max-width:768px){.content-inner .app-vsn{display:block!important}}.content-inner img{max-width:100%}.content-inner code{font-family:Inconsolata,Menlo,Courier,monospace;font-style:normal;line-height:24px;font-weight:400}.content-inner .summary h2{font-weight:700}.content-inner .summary h2 a{text-decoration:none;border:none}.content-inner .summary span.deprecated{color:#dcc100;font-weight:400;font-style:italic}.content-inner .summary .summary-row .summary-signature{font-family:Inconsolata,Menlo,Courier,monospace;font-weight:700}.content-inner .summary .summary-row .summary-signature a{text-decoration:none;border:none}.content-inner .summary .summary-row .summary-synopsis{font-family:Merriweather,Book Antiqua,Georgia,Century Schoolbook,serif;font-style:italic;padding:0 1.2em;margin:0 0 .5em}.content-inner .summary .summary-row .summary-synopsis p{margin:0;padding:0}@-webkit-keyframes blink-background{0%{background-color:#f7f7f7}to{background-color:#ff9}}@keyframes blink-background{0%{background-color:#f7f7f7}to{background-color:#ff9}}.content-inner .detail:target .detail-header{-webkit-animation-duration:.55s;animation-duration:.55s;-webkit-animation-name:blink-background;animation-name:blink-background;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.content-inner .detail-header{margin:2em 0 1em;padding:.5em 1em;background:#f7f7f7;border-left:3px solid #8e58cb;font-size:1em;font-family:Inconsolata,Menlo,Courier,monospace;position:relative}.content-inner .detail-header .note{float:right}.content-inner .detail-header .signature{display:inline-block;font-family:Inconsolata,Menlo,Courier,monospace;font-size:1rem;font-weight:700}.content-inner .detail-header:hover a.detail-link{opacity:1;text-decoration:none}.content-inner .detail-header a.detail-link{-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;top:0;left:0;display:block;opacity:0;padding:.6em;line-height:1.5em;margin-left:-2.5em;text-decoration:none;border:none}.content-inner .specs{padding:1em}.content-inner .specs pre{font-family:Inconsolata,Menlo,Courier,monospace;font-size:.9em;font-style:normal;line-height:24px;white-space:pre-wrap;margin:0;padding:0}.content-inner .docstring{margin:1.2em 0 3em 1.2em}.content-inner .docstring h2,.content-inner .docstring h3,.content-inner .docstring h4,.content-inner .docstring h5{font-weight:700}.content-inner .docstring h2{font-size:1.1em}.content-inner .docstring h3{font-size:1em}.content-inner .docstring h4{font-size:.95em}.content-inner .docstring h5{font-size:.9em}.content-inner div.deprecated{display:block;padding:9px 15px;background-color:#fffeed}.content-inner a.no-underline,.content-inner pre a{color:#8e58cb;text-shadow:none;text-decoration:none;background-image:none}.content-inner a.no-underline:active,.content-inner a.no-underline:focus,.content-inner a.no-underline:hover,.content-inner a.no-underline:visited,.content-inner pre a:active,.content-inner pre a:focus,.content-inner pre a:hover,.content-inner pre a:visited{color:#8e58cb;text-decoration:none}.content-inner code{background-color:#f7f9fc;vertical-align:baseline;border-radius:2px;padding:.1em .2em;border:1px solid #d2ddee;text-transform:none}.content-inner pre{margin:1.5em 0}.content-inner pre code{display:block;overflow-x:auto;white-space:inherit;padding:.5em 1em;background-color:#f7f9fc}.content-inner .footer{margin:4em auto 1em;text-align:center;font-style:italic;font-size:14px;color:#767676}.content-inner .footer .line{display:inline-block}.content-inner .footer .footer-button{background-color:transparent;border:0;cursor:pointer;font-style:italic;outline:none;padding:0 4px;color:#767676;text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.content-inner .footer .footer-button:visited{color:#767676}.content-inner .footer .footer-hex-package{margin-right:4px}.content-inner .footer a{color:#767676;text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.content-inner .footer a:visited{color:#767676}.content-inner .bottom-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:4em}.content-inner .bottom-actions .bottom-actions-button{display:-webkit-box;display:-ms-flexbox;display:flex;text-decoration:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:4px;border:1px solid rgba(0,0,0,.1);padding:8px 16px;min-width:150px}.content-inner .bottom-actions .bottom-actions-button .subheader{font-size:.8em;color:#8e58cb;white-space:nowrap}.content-inner .bottom-actions .bottom-actions-button[rel=prev] .subheader{text-align:right}@media screen and (max-width:768px){.content-inner .bottom-actions{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.content-inner .bottom-actions .bottom-actions-item:not(:first-child){margin-bottom:16px}}#search{min-height:200px;position:relative}#search .loading{height:64px;width:64px;vertical-align:middle;position:absolute;top:50%;left:calc(50% - 32px)}#search .loading div{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;width:51px;height:51px;margin:6px;border-radius:50%;-webkit-animation:loading 1.2s cubic-bezier(.5,0,.5,1) infinite;animation:loading 1.2s cubic-bezier(.5,0,.5,1) infinite;border:6px solid transparent;border-top-color:#767676}#search .loading div:first-child{-webkit-animation-delay:-.45s;animation-delay:-.45s}#search .loading div:nth-child(2){-webkit-animation-delay:-.3s;animation-delay:-.3s}#search .loading div:nth-child(3){-webkit-animation-delay:-.15s;animation-delay:-.15s}@-webkit-keyframes loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}#search .result{margin:2em 0 2.5em}#search .result p{margin:0}#search .result-id{font-size:1.4em;margin:0}#search .result-id a{text-decoration:none;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out}#search .result-id a:active,#search .result-id a:focus,#search .result-id a:visited{color:#000}#search .result-id a:hover{color:#8e58cb}#search .result-elem em,#search .result-id em{font-style:normal;color:#8e58cb}#search .result-id small{font-weight:400}@-webkit-keyframes keyboard-shortcuts-show{0%{opacity:0}to{opacity:1}}@keyframes keyboard-shortcuts-show{0%{opacity:0}to{opacity:1}}.modal{-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-name:keyboard-shortcuts-show;animation-name:keyboard-shortcuts-show;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;display:none;background-color:rgba(0,0,0,.7);position:fixed;top:0;left:0;right:0;bottom:0;z-index:300}.modal.shown{display:block}.modal .modal-contents{margin:75px auto 0;max-width:450px;background-color:#fff;border-radius:3px;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,.2);box-shadow:2px 2px 8px rgba(0,0,0,.2);padding:25px 35px}.modal .modal-title{display:inline-block;font-size:1.3rem;font-weight:700;padding-bottom:20px}.modal .modal-close{cursor:pointer;display:block;float:right;font-size:1.5rem;margin:-8px -8px 0 0;padding:8px;opacity:.3}.modal .modal-close:hover{opacity:.7}#keyboard-shortcuts-modal-body dl.shortcut-row{margin:0;border-bottom:1px solid #d5dae6;padding:12px 0}#keyboard-shortcuts-modal-body dl.shortcut-row:last-of-type{border-bottom-style:none}#keyboard-shortcuts-modal-body .shortcut-description,#keyboard-shortcuts-modal-body .shortcut-keys{display:inline-block}#keyboard-shortcuts-modal-body kbd>kbd{background-color:#d5dae6;border-radius:3px;color:#373f52;font-family:inherit;font-weight:700;display:inline-block;line-height:1;padding:4px 7px 6px;min-width:26px;text-align:center;margin-left:3px}#keyboard-shortcuts-modal-body .shortcut-description,#keyboard-shortcuts-modal-body .shortcut-keys{margin:0}#keyboard-shortcuts-modal-body .shortcut-keys{float:right;text-align:right;min-width:100px;vertical-align:top}#keyboard-shortcuts-modal-body .shortcut-description{position:relative;top:2px;width:250px}#quick-switch-modal-body{width:100%;position:relative}#quick-switch-modal-body .icon-search{position:absolute;left:0;top:0;padding:8px 2px;color:#767676}#quick-switch-modal-body #quick-switch-input{width:100%;padding:8px 6px 6px 26px;border:none;border-bottom:1px solid #767676;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all .12s ease-out;transition:all .12s ease-out}#quick-switch-modal-body #quick-switch-input:focus{border-bottom:1px solid #373f52;outline:none}#quick-switch-modal-body #quick-switch-results{margin:0}#quick-switch-modal-body #quick-switch-results .quick-switch-result{padding:2px 5px;border-bottom:1px dotted #767676;-webkit-transition:all .12s ease-out;transition:all .12s ease-out}#quick-switch-modal-body #quick-switch-results .quick-switch-result:last-child{border-bottom:none}#quick-switch-modal-body #quick-switch-results .quick-switch-result:hover{cursor:pointer}#quick-switch-modal-body #quick-switch-results .quick-switch-result.selected,#quick-switch-modal-body #quick-switch-results .quick-switch-result:hover{border-left:4px solid #8e58cb;background:#f7f9fc}.autocomplete{display:none;height:0;margin:0 5px 0 12px;overflow:visible;position:relative;width:100%}.autocomplete.shown{display:block}.autocomplete-suggestions{-webkit-box-shadow:2px 2px 10px rgba(0,0,0,.25);box-shadow:2px 2px 10px rgba(0,0,0,.25);background-color:#202530;border-top:1px solid #373f52;left:0;position:absolute;top:-2px;width:276px;z-index:200}.autocomplete-suggestion{color:inherit;display:block;padding:10px;text-decoration:none}.autocomplete-suggestion.selected,.autocomplete-suggestion:hover{background-color:#292f3d;border-left:3px solid #8e58cb}.autocomplete-suggestion em{font-style:normal;font-weight:700}.autocomplete-suggestion .description{opacity:.6;padding-top:3px}.autocomplete-suggestion .label{padding-left:2px;opacity:.75}.autocomplete-suggestion .description,.autocomplete-suggestion .title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}#tooltip{-webkit-box-shadow:0 0 10px rgba(0,0,0,.1);box-shadow:0 0 10px rgba(0,0,0,.1);max-height:300px;max-width:500px;padding:0;position:absolute;pointer-events:none;margin:0;z-index:99;top:0;left:0;visibility:hidden;-webkit-transform:translateY(20px);transform:translateY(20px);opacity:0;-webkit-transition:visibility .2s ease-out,opacity .2s ease-out,-webkit-transform .2s ease-out;transition:visibility .2s ease-out,opacity .2s ease-out,-webkit-transform .2s ease-out;transition:visibility .2s ease-out,transform .2s ease-out,opacity .2s ease-out;transition:visibility .2s ease-out,transform .2s ease-out,opacity .2s ease-out,-webkit-transform .2s ease-out}#tooltip.tooltip-shown{visibility:visible;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}#tooltip .tooltip-body{border:1px solid hsla(0,0%,46.3%,.3)}#tooltip .tooltip-body .signature{min-width:320px;width:100%}#tooltip .tooltip-body .detail-header{border-left:0;margin-bottom:0;margin-top:0}#tooltip .tooltip-body .docstring{background-color:#fff;padding:1.2em;margin:0;width:498px}#tooltip .tooltip-body .docstring-plain{max-width:498px;width:auto}#tooltip .tooltip-body .version-info{float:right;line-height:1.6rem;font-family:Inconsolata,Menlo,Courier,monospace;font-size:.9rem;font-weight:400;margin-bottom:-6px;opacity:.3;padding-left:.3em}.tooltips-toggle .tooltips-option-enable{display:none}.tooltips-toggle[data-is-disabled=true] .tooltips-option-enable{display:inline}.tooltips-toggle[data-is-disabled=true] .tooltips-option-disable{display:none}body.night-mode,body.night-mode .content-outer{background:#212127}body.night-mode .night-mode-toggle .icon-theme:before{content:"\E901"}body.night-mode #search .result-id a:active,body.night-mode #search .result-id a:focus,body.night-mode #search .result-id a:visited{color:#d2d2d2}body.night-mode #search .result-id a:hover{color:#8e58cb}body.night-mode .content-inner{color:#b4b4b4}body.night-mode .content-inner h1,body.night-mode .content-inner h2,body.night-mode .content-inner h3,body.night-mode .content-inner h4,body.night-mode .content-inner h5,body.night-mode .content-inner h6{color:#d2d2d2}body.night-mode .content-inner a{text-decoration:none;color:#d2d2d2;text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}body.night-mode .content-inner a:visited{color:#d2d2d2}body.night-mode .content-inner a.no-underline{text-decoration:none}body.night-mode .content-inner a.view-source{color:#939393;text-decoration:none}body.night-mode .content-inner a.view-source:hover{color:#fff}body.night-mode .content-inner .note{color:#939393}body.night-mode .content-inner .summary h2 a{text-decoration:none}@-webkit-keyframes night-blink-background{0%{background-color:#2c2c31}to{background-color:#660}}@keyframes night-blink-background{0%{background-color:#2c2c31}to{background-color:#660}}body.night-mode .content-inner .detail:target .detail-header{-webkit-animation-name:night-blink-background;animation-name:night-blink-background}body.night-mode .content-inner .detail-header{background:#2c2c31;color:#b4b4b4}body.night-mode .content-inner div.deprecated{background-color:#3c381e}body.night-mode .content-inner code{background-color:#2c2c31;border-color:#44444c}body.night-mode .content-inner pre code{background-color:#2c2c31}body.night-mode .content-inner pre a,body.night-mode .content-inner pre a:visited{color:#fff;text-decoration:none}body.night-mode .content-inner pre a:hover{color:#8e58cb}body.night-mode .content-inner .footer{color:#888}body.night-mode .content-inner .footer .footer-button{color:#888;text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}body.night-mode .content-inner .footer .footer-button:visited{color:#888}body.night-mode .content-inner .footer a{color:#888;text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}body.night-mode .content-inner .footer a:visited{color:#888}body.night-mode .content-inner .bottom-actions .bottom-actions-button{border:1px solid hsla(0,0%,100%,.1)}body.night-mode #search .loading div{border-top-color:#767676}body.night-mode .sidebar-button,body.night-mode .sidebar-closed .sidebar-button{color:#d5dae6}body.night-mode #quick-switch-modal-body .icon-search{color:#888}body.night-mode #quick-switch-modal-body #quick-switch-input{border-bottom-color:#888}body.night-mode #quick-switch-modal-body #quick-switch-results{margin:0}body.night-mode #quick-switch-modal-body #quick-switch-results .quick-switch-result{border-bottom-color:#888}body.night-mode #keyboard-shortcuts-modal{background-color:rgba(0,0,0,.75)}body.night-mode #keyboard-shortcuts-modal .modal-contents{background-color:#212127;color:#b4b4b4}body.night-mode #keyboard-shortcuts-modal .modal-contents dl.shortcut-row{border-bottom:1px solid #38383d}body.night-mode #keyboard-shortcuts-modal .modal-contents dl.shortcut-row:last-of-type{border-bottom-style:none}body.night-mode #keyboard-shortcuts-modal .modal-contents kbd>kbd{color:#b4b4b4;background-color:#2c2c31;border:1px solid #38383d}body.night-mode #tooltip{-webkit-box-shadow:0 0 10px rgba(0,0,0,.5);box-shadow:0 0 10px rgba(0,0,0,.5)}body.night-mode #tooltip .tooltip-body{border:1px solid #2c2c31}body.night-mode #tooltip .tooltip-body .docstring{background:#212127}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media print{.main{display:block}.sidebar,.sidebar-button{display:none}.content{padding-left:0;overflow:visible}.summary-row{page-break-inside:avoid}}code.makeup .unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.makeup .hll{background-color:#ffc}.makeup .bp{color:#3465a4}.makeup .c,.makeup .c1,.makeup .ch,.makeup .cm,.makeup .cp,.makeup .cpf,.makeup .cs{color:#737373}.makeup .dl{color:#408200}.makeup .err{color:#a40000;border:#ef2929}.makeup .fm,.makeup .g{color:#4d4d4c}.makeup .gd{color:#a40000}.makeup .ge{color:#4d4d4c;font-style:italic}.makeup .gh{color:navy;font-weight:700}.makeup .gi{color:#00a000}.makeup .go{color:#4d4d4c;font-style:italic}.makeup .gp{color:#737373}.makeup .gr{color:#ef2929}.makeup .gs{color:#4d4d4c;font-weight:700}.makeup .gt{color:#a40000;font-weight:700}.makeup .gu{color:purple;font-weight:700}.makeup .il{color:#0000cf;font-weight:700}.makeup .k,.makeup .kc,.makeup .kd,.makeup .kn,.makeup .kp,.makeup .kr,.makeup .kt{color:#204a87}.makeup .l{color:#4d4d4c}.makeup .ld{color:#c00}.makeup .m,.makeup .mb,.makeup .mf,.makeup .mh,.makeup .mi,.makeup .mo{color:#2937ab}.makeup .n{color:#4d4d4c}.makeup .na{color:#8a7000}.makeup .nb{color:#204a87}.makeup .nc{color:#0000cf}.makeup .nd{color:#5c35cc;font-weight:700}.makeup .ne{color:#c00;font-weight:700}.makeup .nf{color:#b65800}.makeup .ni{color:#bc5400}.makeup .nl{color:#b65800}.makeup .nn{color:#4d4d4c}.makeup .no{color:#a06600}.makeup .nt{color:#204a87;font-weight:700}.makeup .nv,.makeup .nx{color:#4d4d4c}.makeup .o{color:#bc5400}.makeup .ow{color:#204a87}.makeup .p,.makeup .py{color:#4d4d4c}.makeup .s,.makeup .s1,.makeup .s2,.makeup .sa,.makeup .sb,.makeup .sc{color:#408200}.makeup .sd{color:#8f5902;font-style:italic}.makeup .se{color:#204a87}.makeup .sh{color:#408200}.makeup .si{color:#204a87}.makeup .sr{color:#c00}.makeup .ss{color:#a06600}.makeup .sx{color:#408200}.makeup .vc,.makeup .vg,.makeup .vi,.makeup .vm,.makeup .x{color:#4d4d4c}.night-mode .makeup{color:#f8f8f2}.night-mode .makeup .hll{background-color:#49483e}.night-mode .makeup .bp{color:#f8f8f2}.night-mode .makeup .c,.night-mode .makeup .c1,.night-mode .makeup .ch,.night-mode .makeup .cm,.night-mode .makeup .cp,.night-mode .makeup .cpf,.night-mode .makeup .cs{color:#969386}.night-mode .makeup .dl{color:#e6db74}.night-mode .makeup .err{color:#960050;background-color:#1e0010}.night-mode .makeup .fm{color:#a6e22e}.night-mode .makeup .gd{color:#ff5385}.night-mode .makeup .ge{font-style:italic}.night-mode .makeup .gi{color:#a6e22e}.night-mode .makeup .gp{color:#969386}.night-mode .makeup .gs{font-weight:700}.night-mode .makeup .gu{color:#969386}.night-mode .makeup .gt{color:#ff5385;font-weight:700}.night-mode .makeup .il{color:#ae81ff}.night-mode .makeup .k,.night-mode .makeup .kc,.night-mode .makeup .kd{color:#66d9ef}.night-mode .makeup .kn{color:#ff5385}.night-mode .makeup .kp,.night-mode .makeup .kr,.night-mode .makeup .kt{color:#66d9ef}.night-mode .makeup .l,.night-mode .makeup .ld,.night-mode .makeup .m,.night-mode .makeup .mb,.night-mode .makeup .mf,.night-mode .makeup .mh,.night-mode .makeup .mi,.night-mode .makeup .mo{color:#ae81ff}.night-mode .makeup .n{color:#f8f8f2}.night-mode .makeup .na{color:#a6e22e}.night-mode .makeup .nb{color:#f8f8f2}.night-mode .makeup .nc,.night-mode .makeup .nd,.night-mode .makeup .ne,.night-mode .makeup .nf{color:#a6e22e}.night-mode .makeup .ni,.night-mode .makeup .nl,.night-mode .makeup .nn{color:#f8f8f2}.night-mode .makeup .no{color:#66d9ef}.night-mode .makeup .nt{color:#ff5385}.night-mode .makeup .nv{color:#f8f8f2}.night-mode .makeup .nx{color:#a6e22e}.night-mode .makeup .o,.night-mode .makeup .ow{color:#ff5385}.night-mode .makeup .p,.night-mode .makeup .py{color:#f8f8f2}.night-mode .makeup .s,.night-mode .makeup .s1,.night-mode .makeup .s2,.night-mode .makeup .sa,.night-mode .makeup .sb,.night-mode .makeup .sc,.night-mode .makeup .sd{color:#e6db74}.night-mode .makeup .se{color:#ae81ff}.night-mode .makeup .sh,.night-mode .makeup .si,.night-mode .makeup .sr,.night-mode .makeup .ss,.night-mode .makeup .sx{color:#e6db74}.night-mode .makeup .vc,.night-mode .makeup .vg,.night-mode .makeup .vi,.night-mode .makeup .vm{color:#f8f8f2} \ No newline at end of file diff --git a/doc/dist/html/fonts/icomoon.eot b/doc/dist/html/fonts/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..50dd714d471b6a60329aaf49758a1d3e3cd750c1 GIT binary patch literal 3380 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 PQ}*Wyz9g{APi_AOy*UMm literal 0 HcmV?d00001 diff --git a/doc/dist/html/fonts/icomoon.svg b/doc/dist/html/fonts/icomoon.svg new file mode 100644 index 0000000..1602a64 --- /dev/null +++ b/doc/dist/html/fonts/icomoon.svg @@ -0,0 +1,19 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/dist/html/fonts/icomoon.ttf b/doc/dist/html/fonts/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f421262fd12a4806003d142377c922e9ae25b8fa GIT binary patch literal 3216 zcmb7GYit`?6+U-nJQF)Jd3YSZNbIql#7>iX5Tkjknnp+0s&V&m}LnMvzP zVSziokMp?aoO{p1mlzSXQ-eerec`iarqiqa8JJ(9zp}Vqz4CVX?KBbV1^ni6_39PO zU4U<5Zd+cvcInl-FT4Zz=K$AMYSkrQ|F8Z^hV%2k9{Vm|10PbC{ZeO7w{TT3jfQ^mndhM-g_rC!D4LZJgrG9k_cA}}=4ueGT zyX-o-h=jL<-vIL+duI12%iNr=r7@WObekf&9}{;Ec4%suw*=;Pz!|}{3Uu2{axhmk-LF5 z{|`Flj(d>QYJs)+@xX{dUS|u3Kvev+wc*LGPsRx}e6TCt5?AS2`UZ}h3HbTf<5T2L zCM)<7@#G-BLe?T>GsVI)tWYfEa~66q5$Bwk5;i{Th;a7VWQghU*^+GmeoVFkNBm$u z=Ljwqvcj!w+8h|r(FPh~TViCyJdsNpQ9abJYCVae(Ref(YJ^lxQ$wL>G#-l@!3)F3 z+cZUN447u7`G^0DJ!6jcKc!4ug<>v#TriKX4csd2X1CX0|L&?3R!X33w6zh40p|KZ$4^1 z(!3nUwB|z_$5f_jUf~`FFIbz8Y#SX0-3v0dW3!6wVC5M+PpjgNuuI*PpgfTtLwxhF zPs9-LJR1KOOhY6u4@2+1GyfM@*oBGRJZieJuSu;CdkVsR33P!ZaYvkoedlpwgO;D| zbWAh&_#{iFSwdDi7!QCzgdxRFuxtk22Mt4RFe!F0Bx)MNArh=sj)Na4>=nP~?)Aiy z$rqE!_;5Jf*{&M0OOb=>%&F6t3`1@UhgYVj&%1Tc^tVsM!{MZ=x>V0Q*{_~1PfX1D zdSsVZKam_ft}_;m8fGGyI(O_?%9l&9pUKP}=FuNEhDWMnnPE>*^R&x`aq0A_ne#8c z^p&BZw#;a+5j!)K8gU2Y=08S~ifqJcQ&W|(^zqO1^>t;7g%va1AL{B-C8=ZRY#&NL z(ZP;H;tqX^lDM1Gv_Q-B8hxFzn8tT+^uL@NsA+hO2X$c0|E{| zRo$No>hr!pz&Ec4#bX#8@Z*n5s;YF$_?5sP*MuoghYTE+K#1MKPLJ<7)6C_~v~5w^ z%;!w=IbTn6eyLJkS}IqT1hV8>BKPM5`hp&?2H}h%%L*h-AQ2L3sfpsJLawYRGO*0# zd@$;yHTv{G^UehDoQz{2d)S|3rG%XtB*ZmEwrj=f_+P?DUU)R`X8A#Q74eP#B7}E9 zm|~4)+3yY<}yF4`yfa6kw##D{M}#RMn z=?(sBlia{`fMTx&te2g&i1nnimazVkvv!f63}-C^f6iHZC`UiMyjWka*Ei@gEmED< z(d)FaP}{tExxQhHrAJW%YqUvM!2kl}j8U3KkKA=6@?35CwYBOdl-8_bx<*ynJd(3q z-`FyiYa6xA>Q-&ZxOmMtvsj;jZD}f7y0@Tx8Dcgpi>kDRc?r0SbPeMf>i{$M0bnD~ Ip-*i82Fe%pQUCw| literal 0 HcmV?d00001 diff --git a/doc/dist/html/fonts/icomoon.woff b/doc/dist/html/fonts/icomoon.woff new file mode 100644 index 0000000000000000000000000000000000000000..d50dd6085aa435c6a4ea4f5836ad60fd362a1692 GIT binary patch literal 3292 zcmb7GU2Ggz6+U-ncE-D&@z2hB|FCywcWv)Fc6RLjHSs#Nnsm2uYNrjc6;cVhu{U<= zpDm7C5(&_P0Ew!oQ6-QX^`WYesIUZ&wIIYnzwB`v7!~L-OZBWwpM*$G*$q&1v^PU#ef)#D0JAP)-CUif^#1P8`;k|9~y0}75(s!`kOu)~-9-kt2GFicwh$jc}6|&Y;Hd8D-!3xDfK4-B9 z6LBtyAz|~gjtXa;JqmQ;;HV$W=N!ewLRPq*O`8J)I@&-(Y)g!cm`8F+ zBdUk`Rjns6G#ZaaLyeHCX=*4GjmBe9BY1B3aGR!xjRDilH2?5_iD%5w{>O}oD=^Fz z@tKCCM7z5}UL%?ei3xuQHXHj!L8w~ji|vZk=+}MC>yR>%A&E~m=O&HHMHP4 zl|jt5W9v2t8j@^uTUq!h4u|OE<8e^za3ta;4@m2I6%mJQ4+6ly)&u4f4+F%uW-FC! zE)wj2O7)YhYi<71CVk#931cIql zal9n1L?gLur80Z$=w#-u>eZp;-jKh?S?Z{tccc&0#PgHU7Vg!YaGO&04v}SUX5|`o zo5xh9YF^i7ND{ZiIrw)LCpKus*}jfxh8Q1Z$uvvIN(bW!5Qs2bu_G*- zLG&?)E;pDII~Xo%8r?nz?WFABl&O$I!_>{9O?3ZAm0<(dQ_MvpG)lv_vn{x9NxU zW1LgmIuP6kejq3`{3vi6_!)?CgchX?k(R|wVUp!gx#T|P^XvA2!?TzyVxMEqWP`Y1 zz9`!t_a~BAJIvy^cm4^MDGWf5gXW%$k5sq)5Gel7g! z(k6Ncd->eX4(ImDmME_y;k{2JQ`!GJ55B6zZvoRuo~7_?<$gTMnsa?@@laqG+UER@MWNf9l&j; zIlwsp=fA?%Nr5KB6U{?DiqK7VhFxPH375qe#jE1`Qo*vI(Yw4}pzV8N5l+`ZKXv@z zIb!Y1l0?2Zd=Y$G6F01&%GfU}7hc&t4laX#(!o9O=~ez}lic8RV8+G;;7blJ0-tnn z3Ha9>+(mve99#zfw1a!_UjEU=h5A~(zD^fuf$FpdsMGp-03Z1s`pot(N!I$7 literal 0 HcmV?d00001 diff --git a/doc/dist/search_items-12aedcfc50.js b/doc/dist/search_items-12aedcfc50.js new file mode 100644 index 0000000..1e777b3 --- /dev/null +++ b/doc/dist/search_items-12aedcfc50.js @@ -0,0 +1 @@ +searchNodes=[{"doc":"Couchx context module","ref":"Couchx.html","title":"Couchx","type":"module"},{"doc":"Adapter to get basic query functionality into Ecto with CouchDB . Configuration It uses the same as Ecto pattern to config the Dbs with this format: config :my_app , MyRepo , username : "username" , password : "password" , database : "db_name" , hostname : "localhost" , protocol : "http" , port : 5984 Usage Couchx supports 1 main repo and many dynamic supervised repos. A dynamic repo will allow you to have multiple db connections in your application. To achieve this, you will need to setup a DynamicSupervisor and a Registry in the application like: def start ( _type , _args ) do children = [ { DynamicSupervisor , strategy : :one_for_one , name : CouchxSupervisor } { Registry , keys : :unique , name : CouchxRegistry } , ... ] ... end The Restry name is tied up to the code so it must be called CouchxRegistry . The main Repo is configured as any other Ecto Repo, so you can start it in the application just adding it to the children list. def start ( _type , _args ) do children = [ MyDb.Repo ] ... end Dynamic Repo queries The dynamic repos are implemente with a Macro that you can get into your repo as: use CouchxDyncamicTepo , otp_app : :my_app , name : :my_repo This is used to setup a run function, with a callback as argument. To execute actions in a dynamic repo we follow this pattern: MyDynamicRepo . run ( -> MyDynamicRepo . get ( MyStruct , doc_id ) end ) Any Repo call inside the callback function will be run in a dynamically supervised connection. Migrations Couchx comes with a Mango index generator. Example $ mix couchx.gen.mango_index -r MyApp.Repo -n my-mango-index -f username,email This will create a file under priv/my_app/repo/index/my-mango-index.exs with contents as: defmodule MyApp.Repo.Index.MyMangoIndex do use Couchx.MangoIndex , repo_name : MyApp.Repo def up do create_index "my-mango-index" do %{ fields : [ "username" , "email" ] , } end end def down do drop_index "my-mango-index" end end The Map inside the create_index block will be added to the index json object, so any structure that can go there can be added here. Currently only supported methods are create_index(String.t(), (-> Map.t())) name: ID and Name for the index to be created in CouchDB, this will be used as id for the document persisted. fun: A block that returns a formated Map for the index to be created, it will be parsed as JSON to the body of the index document. drop_index(String.t()) name: Id and Name for the index document to be deleted Examples $ mix couchx.mango_index Will add all indexes store under `priv/my_app/repo/index/` paths $ mix couchx.mango_index.down -r MyApp.Repo -n my-mango-index,my-other-index It will call down function on the Migration files ``` priv/my_app/repo/index/my-mango-index.exs priv/my_app/repo/index/my-other-index.exs ``` Removing the documents from the database.","ref":"Couchx.Adapter.html","title":"Couchx.Adapter","type":"module"},{"doc":"Callback implementation for Ecto.Adapter.Schema.autogenerate/1 .","ref":"Couchx.Adapter.html#autogenerate/1","title":"Couchx.Adapter.autogenerate/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.checked_out?/1 .","ref":"Couchx.Adapter.html#checked_out?/1","title":"Couchx.Adapter.checked_out?/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.checkout/3 .","ref":"Couchx.Adapter.html#checkout/3","title":"Couchx.Adapter.checkout/3","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#create_admin/3","title":"Couchx.Adapter.create_admin/3","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#create_db/2","title":"Couchx.Adapter.create_db/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.delete/4 .","ref":"Couchx.Adapter.html#delete/4","title":"Couchx.Adapter.delete/4","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#delete_admin/2","title":"Couchx.Adapter.delete_admin/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#delete_db/2","title":"Couchx.Adapter.delete_db/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#do_insert/6","title":"Couchx.Adapter.do_insert/6","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.dumpers/2 .","ref":"Couchx.Adapter.html#dumpers/2","title":"Couchx.Adapter.dumpers/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.ensure_all_started/2 .","ref":"Couchx.Adapter.html#ensure_all_started/2","title":"Couchx.Adapter.ensure_all_started/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.execute/5 .","ref":"Couchx.Adapter.html#execute/5","title":"Couchx.Adapter.execute/5","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#execute/6","title":"Couchx.Adapter.execute/6","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.init/1 .","ref":"Couchx.Adapter.html#init/1","title":"Couchx.Adapter.init/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.insert/6 .","ref":"Couchx.Adapter.html#insert/6","title":"Couchx.Adapter.insert/6","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#insert_all/7","title":"Couchx.Adapter.insert_all/7","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.insert_all/8 .","ref":"Couchx.Adapter.html#insert_all/8","title":"Couchx.Adapter.insert_all/8","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.loaders/2 .","ref":"Couchx.Adapter.html#loaders/2","title":"Couchx.Adapter.loaders/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#parse_bulk_response/3","title":"Couchx.Adapter.parse_bulk_response/3","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.prepare/2 .","ref":"Couchx.Adapter.html#prepare/2","title":"Couchx.Adapter.prepare/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.stream/5 .","ref":"Couchx.Adapter.html#stream/5","title":"Couchx.Adapter.stream/5","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.update/6 .","ref":"Couchx.Adapter.html#update/6","title":"Couchx.Adapter.update/6","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#update!/6","title":"Couchx.Adapter.update!/6","type":"function"},{"doc":"","ref":"Couchx.Constraint.html","title":"Couchx.Constraint","type":"module"},{"doc":"","ref":"Couchx.Constraint.html#call/4","title":"Couchx.Constraint.call/4","type":"function"},{"doc":"","ref":"Couchx.CouchId.html","title":"Couchx.CouchId","type":"module"},{"doc":"","ref":"Couchx.CouchId.html#base_id/1","title":"Couchx.CouchId.base_id/1","type":"function"},{"doc":"","ref":"Couchx.CouchId.html#underscore_school_id/1","title":"Couchx.CouchId.underscore_school_id/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html","title":"Couchx.DbConnection","type":"module"},{"doc":"","ref":"Couchx.DbConnection.html#all_docs/3","title":"Couchx.DbConnection.all_docs/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#bulk_docs/3","title":"Couchx.DbConnection.bulk_docs/3","type":"function"},{"doc":"Returns a specification to start this module under a supervisor. See Supervisor .","ref":"Couchx.DbConnection.html#child_spec/1","title":"Couchx.DbConnection.child_spec/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#create_admin/3","title":"Couchx.DbConnection.create_admin/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#create_db/2","title":"Couchx.DbConnection.create_db/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete/3","title":"Couchx.DbConnection.delete/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete/4","title":"Couchx.DbConnection.delete/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete_admin/2","title":"Couchx.DbConnection.delete_admin/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete_db/2","title":"Couchx.DbConnection.delete_db/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#find/3","title":"Couchx.DbConnection.find/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#get/4","title":"Couchx.DbConnection.get/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#index/2","title":"Couchx.DbConnection.index/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#info/1","title":"Couchx.DbConnection.info/1","type":"function"},{"doc":"Callback implementation for GenServer.init/1 .","ref":"Couchx.DbConnection.html#init/1","title":"Couchx.DbConnection.init/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#insert/4","title":"Couchx.DbConnection.insert/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#raw_request/4","title":"Couchx.DbConnection.raw_request/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#start_link/1","title":"Couchx.DbConnection.start_link/1","type":"function"},{"doc":"","ref":"Couchx.DocumentState.html","title":"Couchx.DocumentState","type":"module"},{"doc":"","ref":"Couchx.DocumentState.html#merge_constraints/1","title":"Couchx.DocumentState.merge_constraints/1","type":"function"},{"doc":"","ref":"Couchx.DocumentState.html#process_constraints/2","title":"Couchx.DocumentState.process_constraints/2","type":"function"},{"doc":"","ref":"Couchx.DynamicRepo.html","title":"Couchx.DynamicRepo","type":"module"},{"doc":"","ref":"Couchx.Finders.html","title":"Couchx.Finders","type":"module"},{"doc":"","ref":"Couchx.MangoIndex.html","title":"Couchx.MangoIndex","type":"module"},{"doc":"","ref":"Couchx.Migrator.html","title":"Couchx.Migrator","type":"module"},{"doc":"","ref":"Couchx.Migrator.html#run/2","title":"Couchx.Migrator.run/2","type":"function"},{"doc":"","ref":"Couchx.Migrator.html#run/3","title":"Couchx.Migrator.run/3","type":"function"},{"doc":"","ref":"Couchx.Migrator.html#run_direction/2","title":"Couchx.Migrator.run_direction/2","type":"function"},{"doc":"","ref":"Couchx.PrepareQuery.html","title":"Couchx.PrepareQuery","type":"module"},{"doc":"","ref":"Couchx.PrepareQuery.html#call/1","title":"Couchx.PrepareQuery.call/1","type":"function"},{"doc":"","ref":"Couchx.QueryHandler.html","title":"Couchx.QueryHandler","type":"module"},{"doc":"","ref":"Couchx.QueryHandler.html#query_results/3","title":"Couchx.QueryHandler.query_results/3","type":"function"},{"doc":"","ref":"Couchx.Support.ApplicationHelper.html","title":"Couchx.Support.ApplicationHelper","type":"module"},{"doc":"","ref":"Couchx.Support.ApplicationHelper.html#base_repo_path/2","title":"Couchx.Support.ApplicationHelper.base_repo_path/2","type":"function"},{"doc":"","ref":"Mix.Tasks.Couchx.Gen.MangoIndex.html","title":"Mix.Tasks.Couchx.Gen.MangoIndex","type":"task"},{"doc":"Creates the index documents defined in the priv/repo/index/ path. The migration files should be exs files and can have a up and down functions. Examples defmodule MyApp.Repo.Index.MyIndex do use Couchx.MangoIndex , repo_name : BS.Repo def up do create_index ( "my-index" ) do %{ fields : [ "name" , "email" ] } end end def down do drop_index ( "my-index" ) end end Current convention is that the file name uses - to separate words, and this is used to create de module name. Example $ priv/my_repo/index/my-index.exs $ mix couchx.mango_index Couchx will need knowledge of the main OTP app supervising the repos, also we need to configure ecto repos. Example confix :couchx , otp_app : :my_app config :my_app , ecto_repos : [ MyApp.Repo , Custom.Repo ] The task will look for paths for all the repos and process the indexes it finds.","ref":"Mix.Tasks.Couchx.MangoIndex.html","title":"Mix.Tasks.Couchx.MangoIndex","type":"task"},{"doc":"Deletes an index or list of indexes provided from the Repo DB. The Repo passed as -r or --r will define the DB to lookup for the index document. There is also a parameter set as -n or --names which will need to match the ddoc and the index name . Examples $ mix couchx.mango_index.down -r MyApp.Repo -n my-index-ddoc The Repo have to match one in the config.exs file. Also couchx will need knowledge of the main OTP app supervising the repos. Examples confix :couchx , otp_app : :my_app config :my_app , ecto_repos : [ MyApp.Repo , Custom.Repo ]","ref":"Mix.Tasks.Couchx.MangoIndex.Down.html","title":"Mix.Tasks.Couchx.MangoIndex.Down","type":"task"},{"doc":"","ref":"Mix.Tasks.Couchx.MangoIndex.Down.html#prepend/2","title":"Mix.Tasks.Couchx.MangoIndex.Down.prepend/2","type":"function"},{"doc":"","ref":"Couchx.DbError.html","title":"Couchx.DbError","type":"exception"}] \ No newline at end of file diff --git a/doc/dist/sidebar_items-5461d0ecee.js b/doc/dist/sidebar_items-5461d0ecee.js new file mode 100644 index 0000000..948dabb --- /dev/null +++ b/doc/dist/sidebar_items-5461d0ecee.js @@ -0,0 +1 @@ +sidebarNodes={"extras":[{"group":"","headers":[{"anchor":"modules","id":"Modules"},{"anchor":"mix-tasks","id":"Mix Tasks"}],"id":"api-reference","title":"API Reference"}],"modules":[{"group":"","id":"Couchx","sections":[],"title":"Couchx"},{"group":"","id":"Couchx.Adapter","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"autogenerate/1","id":"autogenerate/1"},{"anchor":"checked_out?/1","id":"checked_out?/1"},{"anchor":"checkout/3","id":"checkout/3"},{"anchor":"create_admin/3","id":"create_admin/3"},{"anchor":"create_db/2","id":"create_db/2"},{"anchor":"delete/4","id":"delete/4"},{"anchor":"delete_admin/2","id":"delete_admin/2"},{"anchor":"delete_db/2","id":"delete_db/2"},{"anchor":"do_insert/6","id":"do_insert/6"},{"anchor":"dumpers/2","id":"dumpers/2"},{"anchor":"ensure_all_started/2","id":"ensure_all_started/2"},{"anchor":"execute/5","id":"execute/5"},{"anchor":"execute/6","id":"execute/6"},{"anchor":"init/1","id":"init/1"},{"anchor":"insert/6","id":"insert/6"},{"anchor":"insert_all/7","id":"insert_all/7"},{"anchor":"insert_all/8","id":"insert_all/8"},{"anchor":"loaders/2","id":"loaders/2"},{"anchor":"parse_bulk_response/3","id":"parse_bulk_response/3"},{"anchor":"prepare/2","id":"prepare/2"},{"anchor":"stream/5","id":"stream/5"},{"anchor":"update/6","id":"update/6"},{"anchor":"update!/6","id":"update!/6"}]}],"sections":[{"anchor":"module-configuration","id":"Configuration"},{"anchor":"module-usage","id":"Usage"},{"anchor":"module-migrations","id":"Migrations"}],"title":"Couchx.Adapter"},{"group":"","id":"Couchx.Constraint","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/4","id":"call/4"}]}],"sections":[],"title":"Couchx.Constraint"},{"group":"","id":"Couchx.CouchId","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"base_id/1","id":"base_id/1"},{"anchor":"underscore_school_id/1","id":"underscore_school_id/1"}]}],"sections":[],"title":"Couchx.CouchId"},{"group":"","id":"Couchx.DbConnection","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_docs/3","id":"all_docs/3"},{"anchor":"bulk_docs/3","id":"bulk_docs/3"},{"anchor":"child_spec/1","id":"child_spec/1"},{"anchor":"create_admin/3","id":"create_admin/3"},{"anchor":"create_db/2","id":"create_db/2"},{"anchor":"delete/3","id":"delete/3"},{"anchor":"delete/4","id":"delete/4"},{"anchor":"delete_admin/2","id":"delete_admin/2"},{"anchor":"delete_db/2","id":"delete_db/2"},{"anchor":"find/3","id":"find/3"},{"anchor":"get/4","id":"get/4"},{"anchor":"index/2","id":"index/2"},{"anchor":"info/1","id":"info/1"},{"anchor":"init/1","id":"init/1"},{"anchor":"insert/4","id":"insert/4"},{"anchor":"raw_request/4","id":"raw_request/4"},{"anchor":"start_link/1","id":"start_link/1"}]}],"sections":[],"title":"Couchx.DbConnection"},{"group":"","id":"Couchx.DocumentState","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"merge_constraints/1","id":"merge_constraints/1"},{"anchor":"process_constraints/2","id":"process_constraints/2"}]}],"sections":[],"title":"Couchx.DocumentState"},{"group":"","id":"Couchx.DynamicRepo","sections":[],"title":"Couchx.DynamicRepo"},{"group":"","id":"Couchx.Finders","sections":[],"title":"Couchx.Finders"},{"group":"","id":"Couchx.MangoIndex","sections":[],"title":"Couchx.MangoIndex"},{"group":"","id":"Couchx.Migrator","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/2","id":"run/2"},{"anchor":"run/3","id":"run/3"},{"anchor":"run_direction/2","id":"run_direction/2"}]}],"sections":[],"title":"Couchx.Migrator"},{"group":"","id":"Couchx.PrepareQuery","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/1","id":"call/1"}]}],"sections":[],"title":"Couchx.PrepareQuery"},{"group":"","id":"Couchx.QueryHandler","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"query_results/3","id":"query_results/3"}]}],"sections":[],"title":"Couchx.QueryHandler"},{"group":"","id":"Couchx.Support.ApplicationHelper","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"base_repo_path/2","id":"base_repo_path/2"}]}],"sections":[],"title":"Couchx.Support.ApplicationHelper"},{"group":"Exceptions","id":"Couchx.DbError","sections":[],"title":"Couchx.DbError"}],"tasks":[{"group":"","id":"Mix.Tasks.Couchx.Gen.MangoIndex","sections":[],"title":"mix couchx.gen.mango_index"},{"group":"","id":"Mix.Tasks.Couchx.MangoIndex","sections":[{"anchor":"module-examples","id":"Examples"},{"anchor":"module-example","id":"Example"},{"anchor":"module-example-1","id":"Example"}],"title":"mix couchx.mango_index"},{"group":"","id":"Mix.Tasks.Couchx.MangoIndex.Down","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"prepend/2","id":"prepend/2"}]}],"sections":[{"anchor":"module-examples","id":"Examples"},{"anchor":"module-examples-1","id":"Examples"}],"title":"mix couchx.mango_index.down"}]} \ No newline at end of file diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..92b75bc --- /dev/null +++ b/doc/index.html @@ -0,0 +1,10 @@ + + + + + Couchx v0.3.0 — Documentation + + + + + diff --git a/doc/search.html b/doc/search.html new file mode 100644 index 0000000..2fa9353 --- /dev/null +++ b/doc/search.html @@ -0,0 +1,135 @@ + + + + + + + + + + Search — Couchx v0.3.0 + + + + + + + + + + + + + +
    + + + + + +
    +
    +
    + + + + +
    +
    +
    +
    + + + + diff --git a/mix.exs b/mix.exs index d60595f..e754356 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Couchx.MixProject do def project do [ app: :couchx, - version: "0.3.0", + version: "0.3.1", elixir: "~> 1.12", name: "Couchx", description: "Limited CouchDb Adapter for Ecto", From 2afe031900107a576ce66584ea45838b8c07cd78 Mon Sep 17 00:00:00 2001 From: javierg Date: Tue, 31 Oct 2023 08:06:26 -0700 Subject: [PATCH 07/25] Upgrade ecto dependency --- lib/couchx/query_handler.ex | 2 +- mix.exs | 4 ++-- mix.lock | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/couchx/query_handler.ex b/lib/couchx/query_handler.ex index 266bac1..c955fe1 100644 --- a/lib/couchx/query_handler.ex +++ b/lib/couchx/query_handler.ex @@ -6,7 +6,7 @@ defmodule Couchx.QueryHandler do ] def query_results([], _, _), do: {0, []} - def query_results({:error, reason}, _, _), do: raise Couchx.DbError, message: "#{reason}" + def query_results({:error, reason}, _, _), do: raise(Couchx.DbError, message: "#{reason}") def query_results([%{"_id" => _}|_] = docs, fields, metadata) do Enum.map(docs, &process_docs(&1, fields, metadata)) diff --git a/mix.exs b/mix.exs index e754356..1ba9ffe 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Couchx.MixProject do def project do [ app: :couchx, - version: "0.3.1", + version: "0.4.0", elixir: "~> 1.12", name: "Couchx", description: "Limited CouchDb Adapter for Ecto", @@ -28,7 +28,7 @@ defmodule Couchx.MixProject do defp deps do [ {:earmark, "~> 0.1", only: :dev}, - {:ecto_sql, "~> 3.0"}, + {:ecto_sql, "~> 3.10"}, {:ex_doc, "~> 0.11", only: :dev}, {:httpoison, "~> 1.8"}, {:inflex, "~> 2.0.0"}, diff --git a/mix.lock b/mix.lock index 26777d0..53564a7 100644 --- a/mix.lock +++ b/mix.lock @@ -1,18 +1,18 @@ %{ "certifi": {:hex, :certifi, "2.6.1", "dbab8e5e155a0763eea978c913ca280a6b544bfa115633fa20249c3d396d9493", [:rebar3], [], "hexpm", "524c97b4991b3849dd5c17a631223896272c6b0af446778ba4675a1dff53bb7e"}, "connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, - "db_connection": {:hex, :db_connection, "2.4.0", "d04b1b73795dae60cead94189f1b8a51cc9e1f911c234cc23074017c43c031e5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad416c21ad9f61b3103d254a71b63696ecadb6a917b36f563921e0de00d7d7c8"}, - "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, + "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"}, + "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "earmark": {:hex, :earmark, "0.2.1", "ba6d26ceb16106d069b289df66751734802777a3cbb6787026dd800ffeb850f3", [:mix], [], "hexpm", "c86afb8d22a5aa8315afd4257c7512011c0c9a48b0fea43af7612836b958098b"}, "earmark_parser": {:hex, :earmark_parser, "1.4.15", "b29e8e729f4aa4a00436580dcc2c9c5c51890613457c193cc8525c388ccb2f06", [:mix], [], "hexpm", "044523d6438ea19c1b8ec877ec221b008661d3c27e3b848f4c879f500421ca5c"}, - "ecto": {:hex, :ecto, "3.7.1", "a20598862351b29f80f285b21ec5297da1181c0442687f9b8329f0445d228892", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d36e5b39fc479e654cffd4dbe1865d9716e4a9b6311faff799b6f90ab81b8638"}, - "ecto_sql": {:hex, :ecto_sql, "3.7.0", "2fcaad4ab0c8d76a5afbef078162806adbe709c04160aca58400d5cbbe8eeac6", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.7.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.4.0 or ~> 0.5.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a26135dfa1d99bf87a928c464cfa25bba6535a4fe761eefa56077a4febc60f70"}, + "ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"}, + "ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"}, "ex_doc": {:hex, :ex_doc, "0.25.2", "4f1cae793c4d132e06674b282f1d9ea3bf409bcca027ddb2fe177c4eed6a253f", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "5b0c172e87ac27f14dfd152d52a145238ec71a95efbf29849550278c58a393d6"}, "hackney": {:hex, :hackney, "1.17.4", "99da4674592504d3fb0cfef0db84c3ba02b4508bae2dff8c0108baa0d6e0977c", [:rebar3], [{:certifi, "~>2.6.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "de16ff4996556c8548d512f4dbe22dd58a587bf3332e7fd362430a7ef3986b16"}, "httpoison": {:hex, :httpoison, "1.8.0", "6b85dea15820b7804ef607ff78406ab449dd78bed923a49c7160e1886e987a3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "28089eaa98cf90c66265b6b5ad87c59a3729bea2e74e9d08f9b51eb9729b3c3a"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "inflex": {:hex, :inflex, "2.0.0", "db69d542b8fdb23ac667f9bc0c2395a3983fa2da6ae2efa7ab5dc541928f7a75", [:mix], [], "hexpm", "c018852409bd48b03ad96ed53594186bc074bdd1519043a0ad1fa5697aac4399"}, - "jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"}, + "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"}, "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, "makeup_elixir": {:hex, :makeup_elixir, "0.15.1", "b5888c880d17d1cc3e598f05cdb5b5a91b7b17ac4eaf5f297cb697663a1094dd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "db68c173234b07ab2a07f645a5acdc117b9f99d69ebf521821d89690ae6c6ec8"}, "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, @@ -21,6 +21,6 @@ "nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, - "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, + "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, } From c858e1af32dbc46c3593a89df280337bc9a0cd9c Mon Sep 17 00:00:00 2001 From: javierg Date: Wed, 8 Nov 2023 08:50:37 -0800 Subject: [PATCH 08/25] link db connection genserver to main supervisor --- doc/404.html | 10 +- doc/Couchx.Adapter.html | 117 +++++++++++----------- doc/Couchx.Constraint.html | 14 +-- doc/Couchx.CouchId.html | 14 +-- doc/Couchx.DbConnection.html | 14 +-- doc/Couchx.DbError.html | 14 +-- doc/Couchx.DocumentState.html | 14 +-- doc/Couchx.DynamicRepo.html | 14 +-- doc/Couchx.Finders.html | 14 +-- doc/Couchx.MangoIndex.html | 14 +-- doc/Couchx.Migrator.html | 14 +-- doc/Couchx.PrepareQuery.html | 14 +-- doc/Couchx.QueryHandler.html | 18 ++-- doc/Couchx.Support.ApplicationHelper.html | 14 +-- doc/Couchx.epub | Bin 24454 -> 24368 bytes doc/Couchx.html | 14 +-- doc/Mix.Tasks.Couchx.Gen.MangoIndex.html | 14 +-- doc/Mix.Tasks.Couchx.MangoIndex.Down.html | 16 +-- doc/Mix.Tasks.Couchx.MangoIndex.html | 36 +++---- doc/api-reference.html | 14 +-- doc/dist/search_items-0e001a1d03.js | 1 + doc/dist/search_items-12aedcfc50.js | 1 - doc/index.html | 2 +- doc/search.html | 12 +-- lib/couchx/adapter.ex | 25 +++-- lib/couchx/db_connection.ex | 4 + 26 files changed, 220 insertions(+), 218 deletions(-) create mode 100644 doc/dist/search_items-0e001a1d03.js delete mode 100644 doc/dist/search_items-12aedcfc50.js diff --git a/doc/404.html b/doc/404.html index 888058d..d96a1f7 100644 --- a/doc/404.html +++ b/doc/404.html @@ -5,9 +5,9 @@ - + - 404 — Couchx v0.3.0 + 404 — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0 @@ -93,8 +93,8 @@

    Page not found

    Find it on Hex: - Package - Preview + Package + Preview

    diff --git a/doc/Couchx.Adapter.html b/doc/Couchx.Adapter.html index bc209e3..f55db47 100644 --- a/doc/Couchx.Adapter.html +++ b/doc/Couchx.Adapter.html @@ -5,9 +5,9 @@ - + - Couchx.Adapter — Couchx v0.3.0 + Couchx.Adapter — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0 @@ -82,13 +82,13 @@

    -Couchx.Adapter (Couchx v0.3.0) +Couchx.Adapter (Couchx v0.4.0)

    -

    Adapter to get basic query functionality into Ecto with CouchDB.

    +

    Adapter to get basic query functionality into Ecto with CouchDB.

    Configuration

    @@ -104,26 +104,25 @@

    Couchx supports 1 main repo and many dynamic supervised repos. A dynamic repo will allow you to have multiple db connections in your application. -To achieve this, you will need to setup a DynamicSupervisor and a Registry in the application like:

      def start(_type, _args) do
    -    children = [
    -      {DynamicSupervisor, strategy: :one_for_one, name: CouchxSupervisor}
    -      {Registry, keys: :unique, name: CouchxRegistry},
    +To achieve this, you will need to setup a Registry in the application like:

      def start(_type, _args) do
    +    children = [
    +      {Registry, keys: :unique, name: CouchxRegistry},
           ...
    -    ]
    +    ]
         ...
    -  end

    The Restry name is tied up to the code so it must be called CouchxRegistry.

    The main Repo is configured as any other Ecto Repo, so you can start it in the application just adding it to the children list.

      def start(_type, _args) do
    -    children = [
    +  end

    The Restry name is tied up to the code so it must be called CouchxRegistry.

    The main Repo is configured as any other Ecto Repo, so you can start it in the application just adding it to the children list.

      def start(_type, _args) do
    +    children = [
           MyDb.Repo
    -    ]
    +    ]
         ...
    -  end

    + end

    Dynamic Repo queries

    The dynamic repos are implemente with a Macro that you can get into your repo as:

      use CouchxDyncamicTepo, otp_app: :my_app, name: :my_repo

    This is used to setup a run function, with a callback as argument. -To execute actions in a dynamic repo we follow this pattern:

      MyDynamicRepo.run( ->
    -    MyDynamicRepo.get(MyStruct, doc_id)
    -  end)

    Any Repo call inside the callback function will be run in a dynamically supervised connection.

    +To execute actions in a dynamic repo we follow this pattern:

      MyDynamicRepo.run( ->
    +    MyDynamicRepo.get(MyStruct, doc_id)
    +  end)

    Any Repo call inside the callback function will be run in a dynamically supervised connection.

    Migrations

    @@ -132,21 +131,21 @@

    Example

    $ mix couchx.gen.mango_index -r MyApp.Repo -n my-mango-index -f username,email
    -

    This will create a file under priv/my_app/repo/index/my-mango-index.exs with contents as:

    defmodule MyApp.Repo.Index.MyMangoIndex do
    +

    This will create a file under priv/my_app/repo/index/my-mango-index.exs with contents as:

    defmodule MyApp.Repo.Index.MyMangoIndex do
       use Couchx.MangoIndex, repo_name: MyApp.Repo
     
    -  def up do
    -    create_index "my-mango-index" do
    -      %{
    -         fields: ["username", "email"],
    -       }
    -    end
    -  end
    +  def up do
    +    create_index "my-mango-index" do
    +      %{
    +         fields: ["username", "email"],
    +       }
    +    end
    +  end
     
    -  def down do
    +  def down do
         drop_index "my-mango-index"
    -  end
    -end
    +  end
    +end
     

    The Map inside the create_index block will be added to the index json object, so any structure that can go there can be added here. Currently only supported methods are

    @@ -197,7 +196,7 @@

    -

    Callback implementation for Ecto.Adapter.Schema.autogenerate/1.

    +

    Callback implementation for Ecto.Adapter.Schema.autogenerate/1.

    @@ -206,7 +205,7 @@

    -

    Callback implementation for Ecto.Adapter.checked_out?/1.

    +

    Callback implementation for Ecto.Adapter.checked_out?/1.

    @@ -215,7 +214,7 @@

    -

    Callback implementation for Ecto.Adapter.checkout/3.

    +

    Callback implementation for Ecto.Adapter.checkout/3.

    @@ -238,7 +237,7 @@

    -

    Callback implementation for Ecto.Adapter.Schema.delete/4.

    +

    Callback implementation for Ecto.Adapter.Schema.delete/4.

    @@ -268,7 +267,7 @@

    -

    Callback implementation for Ecto.Adapter.dumpers/2.

    +

    Callback implementation for Ecto.Adapter.dumpers/2.

    @@ -277,7 +276,7 @@

    -

    Callback implementation for Ecto.Adapter.ensure_all_started/2.

    +

    Callback implementation for Ecto.Adapter.ensure_all_started/2.

    @@ -286,7 +285,7 @@

    -

    Callback implementation for Ecto.Adapter.Queryable.execute/5.

    +

    Callback implementation for Ecto.Adapter.Queryable.execute/5.

    @@ -302,7 +301,7 @@

    -

    Callback implementation for Ecto.Adapter.init/1.

    +

    Callback implementation for Ecto.Adapter.init/1.

    @@ -311,7 +310,7 @@

    -

    Callback implementation for Ecto.Adapter.Schema.insert/6.

    +

    Callback implementation for Ecto.Adapter.Schema.insert/6.

    @@ -327,7 +326,7 @@

    -

    Callback implementation for Ecto.Adapter.Schema.insert_all/8.

    +

    Callback implementation for Ecto.Adapter.Schema.insert_all/8.

    @@ -336,7 +335,7 @@

    -

    Callback implementation for Ecto.Adapter.loaders/2.

    +

    Callback implementation for Ecto.Adapter.loaders/2.

    @@ -352,7 +351,7 @@

    -

    Callback implementation for Ecto.Adapter.Queryable.prepare/2.

    +

    Callback implementation for Ecto.Adapter.Queryable.prepare/2.

    @@ -361,7 +360,7 @@

    -

    Callback implementation for Ecto.Adapter.Queryable.stream/5.

    +

    Callback implementation for Ecto.Adapter.Queryable.stream/5.

    @@ -370,7 +369,7 @@

    -

    Callback implementation for Ecto.Adapter.Schema.update/6.

    +

    Callback implementation for Ecto.Adapter.Schema.update/6.

    @@ -409,7 +408,7 @@

    autogenerate(atom)

    -

    Callback implementation for Ecto.Adapter.Schema.autogenerate/1.

    +

    Callback implementation for Ecto.Adapter.Schema.autogenerate/1.

    @@ -426,7 +425,7 @@

    checked_out?(arg)

    -

    Callback implementation for Ecto.Adapter.checked_out?/1.

    +

    Callback implementation for Ecto.Adapter.checked_out?/1.

    @@ -443,7 +442,7 @@

    checkout(adapter, config, result)

    -

    Callback implementation for Ecto.Adapter.checkout/3.

    +

    Callback implementation for Ecto.Adapter.checkout/3.

    @@ -494,7 +493,7 @@

    delete(meta, meta_schema, params, opts)

    -

    Callback implementation for Ecto.Adapter.Schema.delete/4.

    +

    Callback implementation for Ecto.Adapter.Schema.delete/4.

    @@ -562,7 +561,7 @@

    dumpers(arg1, type)

    -

    Callback implementation for Ecto.Adapter.dumpers/2.

    +

    Callback implementation for Ecto.Adapter.dumpers/2.

    @@ -579,7 +578,7 @@

    ensure_all_started(repo, type)

    -

    Callback implementation for Ecto.Adapter.ensure_all_started/2.

    +

    Callback implementation for Ecto.Adapter.ensure_all_started/2.

    @@ -596,7 +595,7 @@

    execute(meta, meta, design, view, query_opts)

    -

    Callback implementation for Ecto.Adapter.Queryable.execute/5.

    +

    Callback implementation for Ecto.Adapter.Queryable.execute/5.

    @@ -630,7 +629,7 @@

    init(config)

    -

    Callback implementation for Ecto.Adapter.init/1.

    +

    Callback implementation for Ecto.Adapter.init/1.

    @@ -647,7 +646,7 @@

    insert(meta, repo, fields, on_conflict, returning, options
    -

    Callback implementation for Ecto.Adapter.Schema.insert/6.

    +

    Callback implementation for Ecto.Adapter.Schema.insert/6.

    @@ -681,7 +680,7 @@

    insert_all(meta, repo, fields, data, on_conflict, schema,
    -

    Callback implementation for Ecto.Adapter.Schema.insert_all/8.

    +

    Callback implementation for Ecto.Adapter.Schema.insert_all/8.

    @@ -698,7 +697,7 @@

    loaders(arg1, type)

    -

    Callback implementation for Ecto.Adapter.loaders/2.

    +

    Callback implementation for Ecto.Adapter.loaders/2.

    @@ -732,7 +731,7 @@

    prepare(atom, query)

    -

    Callback implementation for Ecto.Adapter.Queryable.prepare/2.

    +

    Callback implementation for Ecto.Adapter.Queryable.prepare/2.

    @@ -749,7 +748,7 @@

    stream(a, b, c, d, e)

    -

    Callback implementation for Ecto.Adapter.Queryable.stream/5.

    +

    Callback implementation for Ecto.Adapter.Queryable.stream/5.

    @@ -766,7 +765,7 @@

    update(meta, repo, fields, identity, returning, opts)

    -

    Callback implementation for Ecto.Adapter.Schema.update/6.

    +

    Callback implementation for Ecto.Adapter.Schema.update/6.

    @@ -794,10 +793,10 @@

    update!(meta, repo, fields, identity, returning, a)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.Constraint.html b/doc/Couchx.Constraint.html index a93ae24..3046ff3 100644 --- a/doc/Couchx.Constraint.html +++ b/doc/Couchx.Constraint.html @@ -5,9 +5,9 @@ - + - Couchx.Constraint — Couchx v0.3.0 + Couchx.Constraint — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.Constraint (Couchx v0.3.0) +Couchx.Constraint (Couchx v0.4.0)

    @@ -150,10 +150,10 @@

    call(server, repo, fields, prev_fields \\ [])

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.CouchId.html b/doc/Couchx.CouchId.html index af09e21..ece43ac 100644 --- a/doc/Couchx.CouchId.html +++ b/doc/Couchx.CouchId.html @@ -5,9 +5,9 @@ - + - Couchx.CouchId — Couchx v0.3.0 + Couchx.CouchId — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.CouchId (Couchx v0.3.0) +Couchx.CouchId (Couchx v0.4.0)

    @@ -172,10 +172,10 @@

    underscore_school_id(school_id)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.DbConnection.html b/doc/Couchx.DbConnection.html index 27ead65..91ea8ba 100644 --- a/doc/Couchx.DbConnection.html +++ b/doc/Couchx.DbConnection.html @@ -5,9 +5,9 @@ - + - Couchx.DbConnection — Couchx v0.3.0 + Couchx.DbConnection — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.DbConnection (Couchx v0.3.0) +Couchx.DbConnection (Couchx v0.4.0)

    @@ -550,10 +550,10 @@

    start_link(args)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.DbError.html b/doc/Couchx.DbError.html index 96a56e8..7da132b 100644 --- a/doc/Couchx.DbError.html +++ b/doc/Couchx.DbError.html @@ -5,9 +5,9 @@ - + - Couchx.DbError — Couchx v0.3.0 + Couchx.DbError — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.DbError exception (Couchx v0.3.0) +Couchx.DbError exception (Couchx v0.4.0)

    @@ -93,10 +93,10 @@

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.DocumentState.html b/doc/Couchx.DocumentState.html index a6b26ab..85eda74 100644 --- a/doc/Couchx.DocumentState.html +++ b/doc/Couchx.DocumentState.html @@ -5,9 +5,9 @@ - + - Couchx.DocumentState — Couchx v0.3.0 + Couchx.DocumentState — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -82,7 +82,7 @@

    -Couchx.DocumentState (Couchx v0.3.0) +Couchx.DocumentState (Couchx v0.4.0)

    @@ -172,10 +172,10 @@

    process_constraints(constraints, server)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.DynamicRepo.html b/doc/Couchx.DynamicRepo.html index 92c9960..7383280 100644 --- a/doc/Couchx.DynamicRepo.html +++ b/doc/Couchx.DynamicRepo.html @@ -5,9 +5,9 @@ - + - Couchx.DynamicRepo — Couchx v0.3.0 + Couchx.DynamicRepo — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.DynamicRepo (Couchx v0.3.0) +Couchx.DynamicRepo (Couchx v0.4.0)

    @@ -93,10 +93,10 @@

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.Finders.html b/doc/Couchx.Finders.html index 671aa2d..3407e14 100644 --- a/doc/Couchx.Finders.html +++ b/doc/Couchx.Finders.html @@ -5,9 +5,9 @@ - + - Couchx.Finders — Couchx v0.3.0 + Couchx.Finders — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -82,7 +82,7 @@

    -Couchx.Finders (Couchx v0.3.0) +Couchx.Finders (Couchx v0.4.0)

    @@ -93,10 +93,10 @@

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.MangoIndex.html b/doc/Couchx.MangoIndex.html index 7abe1a9..5451e23 100644 --- a/doc/Couchx.MangoIndex.html +++ b/doc/Couchx.MangoIndex.html @@ -5,9 +5,9 @@ - + - Couchx.MangoIndex — Couchx v0.3.0 + Couchx.MangoIndex — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -82,7 +82,7 @@

    -Couchx.MangoIndex (Couchx v0.3.0) +Couchx.MangoIndex (Couchx v0.4.0)

    @@ -93,10 +93,10 @@

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.Migrator.html b/doc/Couchx.Migrator.html index 59588e1..0bdff49 100644 --- a/doc/Couchx.Migrator.html +++ b/doc/Couchx.Migrator.html @@ -5,9 +5,9 @@ - + - Couchx.Migrator — Couchx v0.3.0 + Couchx.Migrator — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -82,7 +82,7 @@

    -Couchx.Migrator (Couchx v0.3.0) +Couchx.Migrator (Couchx v0.4.0)

    @@ -196,10 +196,10 @@

    run_direction(migrations, direction)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.PrepareQuery.html b/doc/Couchx.PrepareQuery.html index de6575c..a3e9611 100644 --- a/doc/Couchx.PrepareQuery.html +++ b/doc/Couchx.PrepareQuery.html @@ -5,9 +5,9 @@ - + - Couchx.PrepareQuery — Couchx v0.3.0 + Couchx.PrepareQuery — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.PrepareQuery (Couchx v0.3.0) +Couchx.PrepareQuery (Couchx v0.4.0)

    @@ -148,10 +148,10 @@

    call(query)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.QueryHandler.html b/doc/Couchx.QueryHandler.html index 79c3d31..0771797 100644 --- a/doc/Couchx.QueryHandler.html +++ b/doc/Couchx.QueryHandler.html @@ -5,9 +5,9 @@ - + - Couchx.QueryHandler — Couchx v0.3.0 + Couchx.QueryHandler — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.QueryHandler (Couchx v0.3.0) +Couchx.QueryHandler (Couchx v0.4.0)

    @@ -103,7 +103,7 @@

    @@ -130,7 +130,7 @@

    Link to this function -

    query_results(doc, fields, metadata)

    +

    query_results(docs, fields, metadata)

    @@ -148,10 +148,10 @@

    query_results(doc, fields, metadata)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.Support.ApplicationHelper.html b/doc/Couchx.Support.ApplicationHelper.html index cfe91d7..cd17a06 100644 --- a/doc/Couchx.Support.ApplicationHelper.html +++ b/doc/Couchx.Support.ApplicationHelper.html @@ -5,9 +5,9 @@ - + - Couchx.Support.ApplicationHelper — Couchx v0.3.0 + Couchx.Support.ApplicationHelper — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx.Support.ApplicationHelper (Couchx v0.3.0) +Couchx.Support.ApplicationHelper (Couchx v0.4.0)

    @@ -148,10 +148,10 @@

    base_repo_path(repo, directory)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Couchx.epub b/doc/Couchx.epub index 03b4391a2097e02f052938adf9efdd925cb08f58..e0cbe1eba72ecf922c3495ec43d991c97b3ccf9a 100644 GIT binary patch delta 16729 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 B{Ph3; delta 16705 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 - + - Couchx — Couchx v0.3.0 + Couchx — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -Couchx (Couchx v0.3.0) +Couchx (Couchx v0.4.0)

    @@ -97,10 +97,10 @@

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Mix.Tasks.Couchx.Gen.MangoIndex.html b/doc/Mix.Tasks.Couchx.Gen.MangoIndex.html index 0856af0..e66ff3b 100644 --- a/doc/Mix.Tasks.Couchx.Gen.MangoIndex.html +++ b/doc/Mix.Tasks.Couchx.Gen.MangoIndex.html @@ -5,9 +5,9 @@ - + - mix couchx.gen.mango_index — Couchx v0.3.0 + mix couchx.gen.mango_index — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -82,7 +82,7 @@

    -mix couchx.gen.mango_index (Couchx v0.3.0) +mix couchx.gen.mango_index (Couchx v0.4.0)

    @@ -93,10 +93,10 @@

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Mix.Tasks.Couchx.MangoIndex.Down.html b/doc/Mix.Tasks.Couchx.MangoIndex.Down.html index e37c97f..d2b974f 100644 --- a/doc/Mix.Tasks.Couchx.MangoIndex.Down.html +++ b/doc/Mix.Tasks.Couchx.MangoIndex.Down.html @@ -5,9 +5,9 @@ - + - mix couchx.mango_index.down — Couchx v0.3.0 + mix couchx.mango_index.down — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -82,7 +82,7 @@

    -mix couchx.mango_index.down (Couchx v0.3.0) +mix couchx.mango_index.down (Couchx v0.4.0)

    @@ -99,7 +99,7 @@

    Examples

      confix :couchx, otp_app: :my_app
    -  config :my_app, ecto_repos: [MyApp.Repo, Custom.Repo]
    + config :my_app, ecto_repos: [MyApp.Repo, Custom.Repo] @@ -163,10 +163,10 @@

    prepend(string, suffix)

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/Mix.Tasks.Couchx.MangoIndex.html b/doc/Mix.Tasks.Couchx.MangoIndex.html index 9916943..08ffd90 100644 --- a/doc/Mix.Tasks.Couchx.MangoIndex.html +++ b/doc/Mix.Tasks.Couchx.MangoIndex.html @@ -5,9 +5,9 @@ - + - mix couchx.mango_index — Couchx v0.3.0 + mix couchx.mango_index — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0
    @@ -82,7 +82,7 @@

    -mix couchx.mango_index (Couchx v0.3.0) +mix couchx.mango_index (Couchx v0.4.0)

    @@ -92,19 +92,19 @@

    Examples

    -
    defmodule MyApp.Repo.Index.MyIndex do
    +
    defmodule MyApp.Repo.Index.MyIndex do
       use Couchx.MangoIndex, repo_name: BS.Repo
     
    -  def up do
    -    create_index("my-index") do
    -      %{fields: ["name", "email"]}
    -    end
    -  end
    +  def up do
    +    create_index("my-index") do
    +      %{fields: ["name", "email"]}
    +    end
    +  end
     
    -  def down do
    -    drop_index("my-index")
    -  end
    -end

    Current convention is that the file name uses - to separate words, and this is used to create de module name.

    + def down do + drop_index("my-index") + end +end

    Current convention is that the file name uses - to separate words, and this is used to create de module name.

    Example

    @@ -115,7 +115,7 @@

    Example

      confix :couchx, otp_app: :my_app
    -  config :my_app, ecto_repos: [MyApp.Repo, Custom.Repo]

    The task will look for paths for all the repos and process the indexes it finds.

    + config :my_app, ecto_repos: [MyApp.Repo, Custom.Repo]

    The task will look for paths for all the repos and process the indexes it finds.

    @@ -124,10 +124,10 @@

    Find it on Hex: - Package - Preview + Package + Preview - (current file) + (current file)

    diff --git a/doc/api-reference.html b/doc/api-reference.html index e5e404e..8ccc454 100644 --- a/doc/api-reference.html +++ b/doc/api-reference.html @@ -5,9 +5,9 @@ - + - API Reference — Couchx v0.3.0 + API Reference — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -82,7 +82,7 @@

    - API Reference Couchx v0.3.0 + API Reference Couchx v0.4.0

    @@ -107,7 +107,7 @@

    -

    Adapter to get basic query functionality into Ecto with CouchDB.

    +

    Adapter to get basic query functionality into Ecto with CouchDB.

    @@ -248,8 +248,8 @@

    Find it on Hex: - Package - Preview + Package + Preview

    diff --git a/doc/dist/search_items-0e001a1d03.js b/doc/dist/search_items-0e001a1d03.js new file mode 100644 index 0000000..f702b58 --- /dev/null +++ b/doc/dist/search_items-0e001a1d03.js @@ -0,0 +1 @@ +searchNodes=[{"doc":"Couchx context module","ref":"Couchx.html","title":"Couchx","type":"module"},{"doc":"Adapter to get basic query functionality into Ecto with CouchDB . Configuration It uses the same as Ecto pattern to config the Dbs with this format: config :my_app , MyRepo , username : "username" , password : "password" , database : "db_name" , hostname : "localhost" , protocol : "http" , port : 5984 Usage Couchx supports 1 main repo and many dynamic supervised repos. A dynamic repo will allow you to have multiple db connections in your application. To achieve this, you will need to setup a Registry in the application like: def start ( _type , _args ) do children = [ { Registry , keys : :unique , name : CouchxRegistry } , ... ] ... end The Restry name is tied up to the code so it must be called CouchxRegistry . The main Repo is configured as any other Ecto Repo, so you can start it in the application just adding it to the children list. def start ( _type , _args ) do children = [ MyDb.Repo ] ... end Dynamic Repo queries The dynamic repos are implemente with a Macro that you can get into your repo as: use CouchxDyncamicTepo , otp_app : :my_app , name : :my_repo This is used to setup a run function, with a callback as argument. To execute actions in a dynamic repo we follow this pattern: MyDynamicRepo . run ( -> MyDynamicRepo . get ( MyStruct , doc_id ) end ) Any Repo call inside the callback function will be run in a dynamically supervised connection. Migrations Couchx comes with a Mango index generator. Example $ mix couchx.gen.mango_index -r MyApp.Repo -n my-mango-index -f username,email This will create a file under priv/my_app/repo/index/my-mango-index.exs with contents as: defmodule MyApp.Repo.Index.MyMangoIndex do use Couchx.MangoIndex , repo_name : MyApp.Repo def up do create_index "my-mango-index" do %{ fields : [ "username" , "email" ] , } end end def down do drop_index "my-mango-index" end end The Map inside the create_index block will be added to the index json object, so any structure that can go there can be added here. Currently only supported methods are create_index(String.t(), (-> Map.t())) name: ID and Name for the index to be created in CouchDB, this will be used as id for the document persisted. fun: A block that returns a formated Map for the index to be created, it will be parsed as JSON to the body of the index document. drop_index(String.t()) name: Id and Name for the index document to be deleted Examples $ mix couchx.mango_index Will add all indexes store under `priv/my_app/repo/index/` paths $ mix couchx.mango_index.down -r MyApp.Repo -n my-mango-index,my-other-index It will call down function on the Migration files ``` priv/my_app/repo/index/my-mango-index.exs priv/my_app/repo/index/my-other-index.exs ``` Removing the documents from the database.","ref":"Couchx.Adapter.html","title":"Couchx.Adapter","type":"module"},{"doc":"Callback implementation for Ecto.Adapter.Schema.autogenerate/1 .","ref":"Couchx.Adapter.html#autogenerate/1","title":"Couchx.Adapter.autogenerate/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.checked_out?/1 .","ref":"Couchx.Adapter.html#checked_out?/1","title":"Couchx.Adapter.checked_out?/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.checkout/3 .","ref":"Couchx.Adapter.html#checkout/3","title":"Couchx.Adapter.checkout/3","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#create_admin/3","title":"Couchx.Adapter.create_admin/3","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#create_db/2","title":"Couchx.Adapter.create_db/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.delete/4 .","ref":"Couchx.Adapter.html#delete/4","title":"Couchx.Adapter.delete/4","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#delete_admin/2","title":"Couchx.Adapter.delete_admin/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#delete_db/2","title":"Couchx.Adapter.delete_db/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#do_insert/6","title":"Couchx.Adapter.do_insert/6","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.dumpers/2 .","ref":"Couchx.Adapter.html#dumpers/2","title":"Couchx.Adapter.dumpers/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.ensure_all_started/2 .","ref":"Couchx.Adapter.html#ensure_all_started/2","title":"Couchx.Adapter.ensure_all_started/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.execute/5 .","ref":"Couchx.Adapter.html#execute/5","title":"Couchx.Adapter.execute/5","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#execute/6","title":"Couchx.Adapter.execute/6","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.init/1 .","ref":"Couchx.Adapter.html#init/1","title":"Couchx.Adapter.init/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.insert/6 .","ref":"Couchx.Adapter.html#insert/6","title":"Couchx.Adapter.insert/6","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#insert_all/7","title":"Couchx.Adapter.insert_all/7","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.insert_all/8 .","ref":"Couchx.Adapter.html#insert_all/8","title":"Couchx.Adapter.insert_all/8","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.loaders/2 .","ref":"Couchx.Adapter.html#loaders/2","title":"Couchx.Adapter.loaders/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#parse_bulk_response/3","title":"Couchx.Adapter.parse_bulk_response/3","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.prepare/2 .","ref":"Couchx.Adapter.html#prepare/2","title":"Couchx.Adapter.prepare/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.stream/5 .","ref":"Couchx.Adapter.html#stream/5","title":"Couchx.Adapter.stream/5","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.update/6 .","ref":"Couchx.Adapter.html#update/6","title":"Couchx.Adapter.update/6","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#update!/6","title":"Couchx.Adapter.update!/6","type":"function"},{"doc":"","ref":"Couchx.Constraint.html","title":"Couchx.Constraint","type":"module"},{"doc":"","ref":"Couchx.Constraint.html#call/4","title":"Couchx.Constraint.call/4","type":"function"},{"doc":"","ref":"Couchx.CouchId.html","title":"Couchx.CouchId","type":"module"},{"doc":"","ref":"Couchx.CouchId.html#base_id/1","title":"Couchx.CouchId.base_id/1","type":"function"},{"doc":"","ref":"Couchx.CouchId.html#underscore_school_id/1","title":"Couchx.CouchId.underscore_school_id/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html","title":"Couchx.DbConnection","type":"module"},{"doc":"","ref":"Couchx.DbConnection.html#all_docs/3","title":"Couchx.DbConnection.all_docs/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#bulk_docs/3","title":"Couchx.DbConnection.bulk_docs/3","type":"function"},{"doc":"Returns a specification to start this module under a supervisor. See Supervisor .","ref":"Couchx.DbConnection.html#child_spec/1","title":"Couchx.DbConnection.child_spec/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#create_admin/3","title":"Couchx.DbConnection.create_admin/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#create_db/2","title":"Couchx.DbConnection.create_db/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete/3","title":"Couchx.DbConnection.delete/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete/4","title":"Couchx.DbConnection.delete/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete_admin/2","title":"Couchx.DbConnection.delete_admin/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete_db/2","title":"Couchx.DbConnection.delete_db/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#find/3","title":"Couchx.DbConnection.find/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#get/4","title":"Couchx.DbConnection.get/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#index/2","title":"Couchx.DbConnection.index/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#info/1","title":"Couchx.DbConnection.info/1","type":"function"},{"doc":"Callback implementation for GenServer.init/1 .","ref":"Couchx.DbConnection.html#init/1","title":"Couchx.DbConnection.init/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#insert/4","title":"Couchx.DbConnection.insert/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#raw_request/4","title":"Couchx.DbConnection.raw_request/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#start_link/1","title":"Couchx.DbConnection.start_link/1","type":"function"},{"doc":"","ref":"Couchx.DocumentState.html","title":"Couchx.DocumentState","type":"module"},{"doc":"","ref":"Couchx.DocumentState.html#merge_constraints/1","title":"Couchx.DocumentState.merge_constraints/1","type":"function"},{"doc":"","ref":"Couchx.DocumentState.html#process_constraints/2","title":"Couchx.DocumentState.process_constraints/2","type":"function"},{"doc":"","ref":"Couchx.DynamicRepo.html","title":"Couchx.DynamicRepo","type":"module"},{"doc":"","ref":"Couchx.Finders.html","title":"Couchx.Finders","type":"module"},{"doc":"","ref":"Couchx.MangoIndex.html","title":"Couchx.MangoIndex","type":"module"},{"doc":"","ref":"Couchx.Migrator.html","title":"Couchx.Migrator","type":"module"},{"doc":"","ref":"Couchx.Migrator.html#run/2","title":"Couchx.Migrator.run/2","type":"function"},{"doc":"","ref":"Couchx.Migrator.html#run/3","title":"Couchx.Migrator.run/3","type":"function"},{"doc":"","ref":"Couchx.Migrator.html#run_direction/2","title":"Couchx.Migrator.run_direction/2","type":"function"},{"doc":"","ref":"Couchx.PrepareQuery.html","title":"Couchx.PrepareQuery","type":"module"},{"doc":"","ref":"Couchx.PrepareQuery.html#call/1","title":"Couchx.PrepareQuery.call/1","type":"function"},{"doc":"","ref":"Couchx.QueryHandler.html","title":"Couchx.QueryHandler","type":"module"},{"doc":"","ref":"Couchx.QueryHandler.html#query_results/3","title":"Couchx.QueryHandler.query_results/3","type":"function"},{"doc":"","ref":"Couchx.Support.ApplicationHelper.html","title":"Couchx.Support.ApplicationHelper","type":"module"},{"doc":"","ref":"Couchx.Support.ApplicationHelper.html#base_repo_path/2","title":"Couchx.Support.ApplicationHelper.base_repo_path/2","type":"function"},{"doc":"","ref":"Mix.Tasks.Couchx.Gen.MangoIndex.html","title":"Mix.Tasks.Couchx.Gen.MangoIndex","type":"task"},{"doc":"Creates the index documents defined in the priv/repo/index/ path. The migration files should be exs files and can have a up and down functions. Examples defmodule MyApp.Repo.Index.MyIndex do use Couchx.MangoIndex , repo_name : BS.Repo def up do create_index ( "my-index" ) do %{ fields : [ "name" , "email" ] } end end def down do drop_index ( "my-index" ) end end Current convention is that the file name uses - to separate words, and this is used to create de module name. Example $ priv/my_repo/index/my-index.exs $ mix couchx.mango_index Couchx will need knowledge of the main OTP app supervising the repos, also we need to configure ecto repos. Example confix :couchx , otp_app : :my_app config :my_app , ecto_repos : [ MyApp.Repo , Custom.Repo ] The task will look for paths for all the repos and process the indexes it finds.","ref":"Mix.Tasks.Couchx.MangoIndex.html","title":"Mix.Tasks.Couchx.MangoIndex","type":"task"},{"doc":"Deletes an index or list of indexes provided from the Repo DB. The Repo passed as -r or --r will define the DB to lookup for the index document. There is also a parameter set as -n or --names which will need to match the ddoc and the index name . Examples $ mix couchx.mango_index.down -r MyApp.Repo -n my-index-ddoc The Repo have to match one in the config.exs file. Also couchx will need knowledge of the main OTP app supervising the repos. Examples confix :couchx , otp_app : :my_app config :my_app , ecto_repos : [ MyApp.Repo , Custom.Repo ]","ref":"Mix.Tasks.Couchx.MangoIndex.Down.html","title":"Mix.Tasks.Couchx.MangoIndex.Down","type":"task"},{"doc":"","ref":"Mix.Tasks.Couchx.MangoIndex.Down.html#prepend/2","title":"Mix.Tasks.Couchx.MangoIndex.Down.prepend/2","type":"function"},{"doc":"","ref":"Couchx.DbError.html","title":"Couchx.DbError","type":"exception"}] \ No newline at end of file diff --git a/doc/dist/search_items-12aedcfc50.js b/doc/dist/search_items-12aedcfc50.js deleted file mode 100644 index 1e777b3..0000000 --- a/doc/dist/search_items-12aedcfc50.js +++ /dev/null @@ -1 +0,0 @@ -searchNodes=[{"doc":"Couchx context module","ref":"Couchx.html","title":"Couchx","type":"module"},{"doc":"Adapter to get basic query functionality into Ecto with CouchDB . Configuration It uses the same as Ecto pattern to config the Dbs with this format: config :my_app , MyRepo , username : "username" , password : "password" , database : "db_name" , hostname : "localhost" , protocol : "http" , port : 5984 Usage Couchx supports 1 main repo and many dynamic supervised repos. A dynamic repo will allow you to have multiple db connections in your application. To achieve this, you will need to setup a DynamicSupervisor and a Registry in the application like: def start ( _type , _args ) do children = [ { DynamicSupervisor , strategy : :one_for_one , name : CouchxSupervisor } { Registry , keys : :unique , name : CouchxRegistry } , ... ] ... end The Restry name is tied up to the code so it must be called CouchxRegistry . The main Repo is configured as any other Ecto Repo, so you can start it in the application just adding it to the children list. def start ( _type , _args ) do children = [ MyDb.Repo ] ... end Dynamic Repo queries The dynamic repos are implemente with a Macro that you can get into your repo as: use CouchxDyncamicTepo , otp_app : :my_app , name : :my_repo This is used to setup a run function, with a callback as argument. To execute actions in a dynamic repo we follow this pattern: MyDynamicRepo . run ( -> MyDynamicRepo . get ( MyStruct , doc_id ) end ) Any Repo call inside the callback function will be run in a dynamically supervised connection. Migrations Couchx comes with a Mango index generator. Example $ mix couchx.gen.mango_index -r MyApp.Repo -n my-mango-index -f username,email This will create a file under priv/my_app/repo/index/my-mango-index.exs with contents as: defmodule MyApp.Repo.Index.MyMangoIndex do use Couchx.MangoIndex , repo_name : MyApp.Repo def up do create_index "my-mango-index" do %{ fields : [ "username" , "email" ] , } end end def down do drop_index "my-mango-index" end end The Map inside the create_index block will be added to the index json object, so any structure that can go there can be added here. Currently only supported methods are create_index(String.t(), (-> Map.t())) name: ID and Name for the index to be created in CouchDB, this will be used as id for the document persisted. fun: A block that returns a formated Map for the index to be created, it will be parsed as JSON to the body of the index document. drop_index(String.t()) name: Id and Name for the index document to be deleted Examples $ mix couchx.mango_index Will add all indexes store under `priv/my_app/repo/index/` paths $ mix couchx.mango_index.down -r MyApp.Repo -n my-mango-index,my-other-index It will call down function on the Migration files ``` priv/my_app/repo/index/my-mango-index.exs priv/my_app/repo/index/my-other-index.exs ``` Removing the documents from the database.","ref":"Couchx.Adapter.html","title":"Couchx.Adapter","type":"module"},{"doc":"Callback implementation for Ecto.Adapter.Schema.autogenerate/1 .","ref":"Couchx.Adapter.html#autogenerate/1","title":"Couchx.Adapter.autogenerate/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.checked_out?/1 .","ref":"Couchx.Adapter.html#checked_out?/1","title":"Couchx.Adapter.checked_out?/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.checkout/3 .","ref":"Couchx.Adapter.html#checkout/3","title":"Couchx.Adapter.checkout/3","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#create_admin/3","title":"Couchx.Adapter.create_admin/3","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#create_db/2","title":"Couchx.Adapter.create_db/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.delete/4 .","ref":"Couchx.Adapter.html#delete/4","title":"Couchx.Adapter.delete/4","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#delete_admin/2","title":"Couchx.Adapter.delete_admin/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#delete_db/2","title":"Couchx.Adapter.delete_db/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#do_insert/6","title":"Couchx.Adapter.do_insert/6","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.dumpers/2 .","ref":"Couchx.Adapter.html#dumpers/2","title":"Couchx.Adapter.dumpers/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.ensure_all_started/2 .","ref":"Couchx.Adapter.html#ensure_all_started/2","title":"Couchx.Adapter.ensure_all_started/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.execute/5 .","ref":"Couchx.Adapter.html#execute/5","title":"Couchx.Adapter.execute/5","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#execute/6","title":"Couchx.Adapter.execute/6","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.init/1 .","ref":"Couchx.Adapter.html#init/1","title":"Couchx.Adapter.init/1","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.insert/6 .","ref":"Couchx.Adapter.html#insert/6","title":"Couchx.Adapter.insert/6","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#insert_all/7","title":"Couchx.Adapter.insert_all/7","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.insert_all/8 .","ref":"Couchx.Adapter.html#insert_all/8","title":"Couchx.Adapter.insert_all/8","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.loaders/2 .","ref":"Couchx.Adapter.html#loaders/2","title":"Couchx.Adapter.loaders/2","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#parse_bulk_response/3","title":"Couchx.Adapter.parse_bulk_response/3","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.prepare/2 .","ref":"Couchx.Adapter.html#prepare/2","title":"Couchx.Adapter.prepare/2","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Queryable.stream/5 .","ref":"Couchx.Adapter.html#stream/5","title":"Couchx.Adapter.stream/5","type":"function"},{"doc":"Callback implementation for Ecto.Adapter.Schema.update/6 .","ref":"Couchx.Adapter.html#update/6","title":"Couchx.Adapter.update/6","type":"function"},{"doc":"","ref":"Couchx.Adapter.html#update!/6","title":"Couchx.Adapter.update!/6","type":"function"},{"doc":"","ref":"Couchx.Constraint.html","title":"Couchx.Constraint","type":"module"},{"doc":"","ref":"Couchx.Constraint.html#call/4","title":"Couchx.Constraint.call/4","type":"function"},{"doc":"","ref":"Couchx.CouchId.html","title":"Couchx.CouchId","type":"module"},{"doc":"","ref":"Couchx.CouchId.html#base_id/1","title":"Couchx.CouchId.base_id/1","type":"function"},{"doc":"","ref":"Couchx.CouchId.html#underscore_school_id/1","title":"Couchx.CouchId.underscore_school_id/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html","title":"Couchx.DbConnection","type":"module"},{"doc":"","ref":"Couchx.DbConnection.html#all_docs/3","title":"Couchx.DbConnection.all_docs/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#bulk_docs/3","title":"Couchx.DbConnection.bulk_docs/3","type":"function"},{"doc":"Returns a specification to start this module under a supervisor. See Supervisor .","ref":"Couchx.DbConnection.html#child_spec/1","title":"Couchx.DbConnection.child_spec/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#create_admin/3","title":"Couchx.DbConnection.create_admin/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#create_db/2","title":"Couchx.DbConnection.create_db/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete/3","title":"Couchx.DbConnection.delete/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete/4","title":"Couchx.DbConnection.delete/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete_admin/2","title":"Couchx.DbConnection.delete_admin/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#delete_db/2","title":"Couchx.DbConnection.delete_db/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#find/3","title":"Couchx.DbConnection.find/3","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#get/4","title":"Couchx.DbConnection.get/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#index/2","title":"Couchx.DbConnection.index/2","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#info/1","title":"Couchx.DbConnection.info/1","type":"function"},{"doc":"Callback implementation for GenServer.init/1 .","ref":"Couchx.DbConnection.html#init/1","title":"Couchx.DbConnection.init/1","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#insert/4","title":"Couchx.DbConnection.insert/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#raw_request/4","title":"Couchx.DbConnection.raw_request/4","type":"function"},{"doc":"","ref":"Couchx.DbConnection.html#start_link/1","title":"Couchx.DbConnection.start_link/1","type":"function"},{"doc":"","ref":"Couchx.DocumentState.html","title":"Couchx.DocumentState","type":"module"},{"doc":"","ref":"Couchx.DocumentState.html#merge_constraints/1","title":"Couchx.DocumentState.merge_constraints/1","type":"function"},{"doc":"","ref":"Couchx.DocumentState.html#process_constraints/2","title":"Couchx.DocumentState.process_constraints/2","type":"function"},{"doc":"","ref":"Couchx.DynamicRepo.html","title":"Couchx.DynamicRepo","type":"module"},{"doc":"","ref":"Couchx.Finders.html","title":"Couchx.Finders","type":"module"},{"doc":"","ref":"Couchx.MangoIndex.html","title":"Couchx.MangoIndex","type":"module"},{"doc":"","ref":"Couchx.Migrator.html","title":"Couchx.Migrator","type":"module"},{"doc":"","ref":"Couchx.Migrator.html#run/2","title":"Couchx.Migrator.run/2","type":"function"},{"doc":"","ref":"Couchx.Migrator.html#run/3","title":"Couchx.Migrator.run/3","type":"function"},{"doc":"","ref":"Couchx.Migrator.html#run_direction/2","title":"Couchx.Migrator.run_direction/2","type":"function"},{"doc":"","ref":"Couchx.PrepareQuery.html","title":"Couchx.PrepareQuery","type":"module"},{"doc":"","ref":"Couchx.PrepareQuery.html#call/1","title":"Couchx.PrepareQuery.call/1","type":"function"},{"doc":"","ref":"Couchx.QueryHandler.html","title":"Couchx.QueryHandler","type":"module"},{"doc":"","ref":"Couchx.QueryHandler.html#query_results/3","title":"Couchx.QueryHandler.query_results/3","type":"function"},{"doc":"","ref":"Couchx.Support.ApplicationHelper.html","title":"Couchx.Support.ApplicationHelper","type":"module"},{"doc":"","ref":"Couchx.Support.ApplicationHelper.html#base_repo_path/2","title":"Couchx.Support.ApplicationHelper.base_repo_path/2","type":"function"},{"doc":"","ref":"Mix.Tasks.Couchx.Gen.MangoIndex.html","title":"Mix.Tasks.Couchx.Gen.MangoIndex","type":"task"},{"doc":"Creates the index documents defined in the priv/repo/index/ path. The migration files should be exs files and can have a up and down functions. Examples defmodule MyApp.Repo.Index.MyIndex do use Couchx.MangoIndex , repo_name : BS.Repo def up do create_index ( "my-index" ) do %{ fields : [ "name" , "email" ] } end end def down do drop_index ( "my-index" ) end end Current convention is that the file name uses - to separate words, and this is used to create de module name. Example $ priv/my_repo/index/my-index.exs $ mix couchx.mango_index Couchx will need knowledge of the main OTP app supervising the repos, also we need to configure ecto repos. Example confix :couchx , otp_app : :my_app config :my_app , ecto_repos : [ MyApp.Repo , Custom.Repo ] The task will look for paths for all the repos and process the indexes it finds.","ref":"Mix.Tasks.Couchx.MangoIndex.html","title":"Mix.Tasks.Couchx.MangoIndex","type":"task"},{"doc":"Deletes an index or list of indexes provided from the Repo DB. The Repo passed as -r or --r will define the DB to lookup for the index document. There is also a parameter set as -n or --names which will need to match the ddoc and the index name . Examples $ mix couchx.mango_index.down -r MyApp.Repo -n my-index-ddoc The Repo have to match one in the config.exs file. Also couchx will need knowledge of the main OTP app supervising the repos. Examples confix :couchx , otp_app : :my_app config :my_app , ecto_repos : [ MyApp.Repo , Custom.Repo ]","ref":"Mix.Tasks.Couchx.MangoIndex.Down.html","title":"Mix.Tasks.Couchx.MangoIndex.Down","type":"task"},{"doc":"","ref":"Mix.Tasks.Couchx.MangoIndex.Down.html#prepend/2","title":"Mix.Tasks.Couchx.MangoIndex.Down.prepend/2","type":"function"},{"doc":"","ref":"Couchx.DbError.html","title":"Couchx.DbError","type":"exception"}] \ No newline at end of file diff --git a/doc/index.html b/doc/index.html index 92b75bc..2c9b3b2 100644 --- a/doc/index.html +++ b/doc/index.html @@ -2,7 +2,7 @@ - Couchx v0.3.0 — Documentation + Couchx v0.4.0 — Documentation diff --git a/doc/search.html b/doc/search.html index 2fa9353..5cad841 100644 --- a/doc/search.html +++ b/doc/search.html @@ -5,9 +5,9 @@ - + - Search — Couchx v0.3.0 + Search — Couchx v0.4.0 @@ -58,7 +58,7 @@ Couchx - v0.3.0 + v0.4.0

    @@ -85,13 +85,13 @@

    Search

    - +