From 8a059d0a46e5b26d9391649657683615086280fa Mon Sep 17 00:00:00 2001 From: jaeyson Date: Sun, 1 Jun 2025 20:32:11 +0800 Subject: [PATCH 1/4] Reduce code duplication --- README.md | 33 +- lib/ex_typesense.ex | 195 ++++------- lib/ex_typesense/analytics.ex | 237 +++++-------- lib/ex_typesense/cluster.ex | 375 ++++++++------------- lib/ex_typesense/collection.ex | 553 +++++++++++-------------------- lib/ex_typesense/conversation.ex | 198 ++++------- lib/ex_typesense/curation.ex | 203 ++++-------- lib/ex_typesense/debug.ex | 38 +-- lib/ex_typesense/document.ex | 521 +++++++++-------------------- lib/ex_typesense/key.ex | 151 +++------ lib/ex_typesense/preset.ex | 153 +++------ lib/ex_typesense/search.ex | 159 +++------ lib/ex_typesense/stemming.ex | 105 ++---- lib/ex_typesense/stopwords.ex | 156 +++------ lib/ex_typesense/synonym.ex | 194 ++++------- mix.exs | 2 +- mix.lock | 6 +- test/analytics_test.exs | 54 +-- test/cluster_test.exs | 84 +++-- test/collection_test.exs | 146 +++----- test/conversation_test.exs | 30 +- test/curation_test.exs | 48 +-- test/debug_test.exs | 6 +- test/document_test.exs | 140 ++++---- test/key_test.exs | 24 +- test/preset_test.exs | 24 +- test/search_test.exs | 82 +++-- test/stemming_test.exs | 20 +- test/stopwords_test.exs | 24 +- test/synonym_test.exs | 50 +-- 30 files changed, 1403 insertions(+), 2608 deletions(-) diff --git a/README.md b/README.md index 6798e49..193f0bd 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,25 @@ > Under the hood, this library utilizes [open_api_typesense](https://github.com/jaeyson/open_api_typesense) > to make sure it adheres to [Typesense's OpenAPI spec](https://github.com/typesense/typesense-api-spec). +> #### Upgrading to v2 {: .warning} +> +> Purpose of v2 is to reduce code duplication and to streamline +> passing of options (including `conn`). The breaking change here +> is `conn` is now part of `opts`. > when calling functions, see +> example below: + +```elixir +# pre-v1 +Collections.get_collections(conn, opts) + +# v1 +Collections.get_collections(conn: conn) + +# another way (v1) +opts = [limit: 1, conn: conn] +Collections.get_collections(opts) +``` + > #### upgrading to `1.0.0` contains **LOTS** of breaking changes. {: .warning} ## Installation @@ -166,6 +185,12 @@ config :open_api_typesense, scheme: "https" ``` +Test if working: + +```elixir +ExTypesense.health() +``` + ### using map Option 2: Set credentials from a map @@ -201,7 +226,7 @@ conn = %{ # NOTE: create a collection and import documents # first before using the command below -ExTypesense.search(conn, collection_name, query) +ExTypesense.search(collection_name, query, conn: conn) ``` Or convert your struct to map, as long as the keys matches in [`OpenApiTypesense.Connection.t()`](https://hexdocs.pm/open_api_typesense/OpenApiTypesense.Connection.html#t:t/0): @@ -211,7 +236,7 @@ conn = Map.from_struct(MyApp.Credential) # NOTE: create a collection and import documents # first before using the command below -ExTypesense.search(conn, collection_name, query) +ExTypesense.search(collection_name, query, conn: conn) ``` Or you don't want to change the fields in your Ecto schema, thus you convert it to map: @@ -233,7 +258,7 @@ conn = # NOTE: create a collection and import documents # first before using the command below -ExTypesense.search(conn, collection_name, query) +ExTypesense.search(collection_name, query, conn: conn) ``` Or just plain map @@ -246,7 +271,7 @@ conn = %{ scheme: "http" } -ExTypesense.health(conn) +ExTypesense.health(conn: conn) ``` diff --git a/lib/ex_typesense.ex b/lib/ex_typesense.ex index 9eff77d..44e737c 100644 --- a/lib/ex_typesense.ex +++ b/lib/ex_typesense.ex @@ -99,32 +99,25 @@ defmodule ExTypesense do # start collection-specific tasks ########################################################## defdelegate list_collections, to: ExTypesense.Collection - defdelegate list_collections(conn_or_opts), to: ExTypesense.Collection - defdelegate list_collections(conn, opts), to: ExTypesense.Collection + defdelegate list_collections(opts), to: ExTypesense.Collection defdelegate create_collection(schema), to: ExTypesense.Collection - defdelegate create_collection(conn, schema), to: ExTypesense.Collection - defdelegate create_collection(conn, schema, opts), to: ExTypesense.Collection + defdelegate create_collection(schema, opts), to: ExTypesense.Collection defdelegate create_collection_with_alias(schema), to: ExTypesense.Collection - defdelegate create_collection_with_alias(conn, schema), to: ExTypesense.Collection - defdelegate create_collection_with_alias(conn, schema, opts), to: ExTypesense.Collection + defdelegate create_collection_with_alias(schema, opts), to: ExTypesense.Collection defdelegate clone_collection(src_coll, new_coll), to: ExTypesense.Collection - defdelegate clone_collection(conn, src_coll, new_coll), to: ExTypesense.Collection - defdelegate clone_collection(conn, src_coll, new_coll, opts), to: ExTypesense.Collection + defdelegate clone_collection(src_coll, new_coll, opts), to: ExTypesense.Collection defdelegate get_collection(name), to: ExTypesense.Collection - defdelegate get_collection(conn, coll_name), to: ExTypesense.Collection - defdelegate get_collection(conn, coll_name, opts), to: ExTypesense.Collection + defdelegate get_collection(coll_name, opts), to: ExTypesense.Collection defdelegate drop_collection(name), to: ExTypesense.Collection - defdelegate drop_collection(conn, name), to: ExTypesense.Collection - defdelegate drop_collection(conn, name, opts), to: ExTypesense.Collection + defdelegate drop_collection(name, opts), to: ExTypesense.Collection defdelegate update_collection_fields(name, fields), to: ExTypesense.Collection - defdelegate update_collection_fields(conn, name, fields), to: ExTypesense.Collection - defdelegate update_collection_fields(conn, name, fields, opts), to: ExTypesense.Collection + defdelegate update_collection_fields(name, fields, opts), to: ExTypesense.Collection ########################################################## # end collection-specific tasks ########################################################## @@ -133,23 +126,16 @@ defmodule ExTypesense do # start collection alias ########################################################## defdelegate list_collection_aliases, to: ExTypesense.Collection - defdelegate list_collection_aliases(conn_or_opts), to: ExTypesense.Collection - defdelegate list_collection_aliases(conn, opts), to: ExTypesense.Collection + defdelegate list_collection_aliases(opts), to: ExTypesense.Collection defdelegate get_collection_alias(alias_name), to: ExTypesense.Collection - defdelegate get_collection_alias(conn, alias_name), to: ExTypesense.Collection - defdelegate get_collection_alias(conn, alias_name, opts), to: ExTypesense.Collection + defdelegate get_collection_alias(alias_name, opts), to: ExTypesense.Collection defdelegate delete_collection_alias(alias_name), to: ExTypesense.Collection - defdelegate delete_collection_alias(conn, alias_name), to: ExTypesense.Collection - defdelegate delete_collection_alias(conn, alias_name, opts), to: ExTypesense.Collection + defdelegate delete_collection_alias(alias_name, opts), to: ExTypesense.Collection defdelegate upsert_collection_alias(alias_name, coll_name), to: ExTypesense.Collection - defdelegate upsert_collection_alias(conn, alias_name, coll_name), to: ExTypesense.Collection - - defdelegate upsert_collection_alias(conn, alias_name, coll_name, opts), - to: ExTypesense.Collection - + defdelegate upsert_collection_alias(alias_name, coll_name, opts), to: ExTypesense.Collection ########################################################## # end collection alias ########################################################## @@ -158,40 +144,31 @@ defmodule ExTypesense do # start document-specific tasks ########################################################## defdelegate get_document(coll_name, doc_id), to: ExTypesense.Document - defdelegate get_document(conn, coll_name, doc_id), to: ExTypesense.Document - defdelegate get_document(conn, coll_name, doc_id, opts), to: ExTypesense.Document + defdelegate get_document(coll_name, doc_id, opts), to: ExTypesense.Document defdelegate index_document(document), to: ExTypesense.Document defdelegate index_document(collection_name, document), to: ExTypesense.Document - defdelegate index_document(conn, collection_name, document), to: ExTypesense.Document - defdelegate index_document(conn, collection_name, document, opts), to: ExTypesense.Document + defdelegate index_document(collection_name, document, opts), to: ExTypesense.Document defdelegate delete_document(document), to: ExTypesense.Document defdelegate delete_document(coll_name, doc_id), to: ExTypesense.Document - defdelegate delete_document(conn, coll_name, doc_id), to: ExTypesense.Document - defdelegate delete_document(conn, coll_name, doc_id, opts), to: ExTypesense.Document + defdelegate delete_document(coll_name, doc_id, opts), to: ExTypesense.Document defdelegate delete_documents_by_query(collection_name, opts), to: ExTypesense.Document - defdelegate delete_documents_by_query(conn, collection_name, opts), to: ExTypesense.Document defdelegate import_documents(coll_name, documents), to: ExTypesense.Document - defdelegate import_documents(conn, coll_name, documents), to: ExTypesense.Document - defdelegate import_documents(conn, coll_name, documents, opts), to: ExTypesense.Document + defdelegate import_documents(coll_name, documents, opts), to: ExTypesense.Document defdelegate export_documents(coll_name), to: ExTypesense.Document - defdelegate export_documents(conn, coll_name), to: ExTypesense.Document - defdelegate export_documents(conn, coll_name, opts), to: ExTypesense.Document + defdelegate export_documents(coll_name, opts), to: ExTypesense.Document defdelegate delete_all_documents(collection_name), to: ExTypesense.Document - defdelegate delete_all_documents(conn, collection_name), to: ExTypesense.Document - defdelegate delete_all_documents(conn, collection_name, opts), to: ExTypesense.Document + defdelegate delete_all_documents(collection_name, opts), to: ExTypesense.Document defdelegate update_document(document), to: ExTypesense.Document - defdelegate update_document(conn, document), to: ExTypesense.Document - defdelegate update_document(conn, document, opts), to: ExTypesense.Document + defdelegate update_document(document, opts), to: ExTypesense.Document defdelegate update_documents_by_query(coll_name, body, opts), to: ExTypesense.Document - defdelegate update_documents_by_query(conn, coll_name, body, opts), to: ExTypesense.Document ########################################################## # end document-specific tasks ########################################################## @@ -200,20 +177,16 @@ defmodule ExTypesense do # start API keys ########################################################## defdelegate get_key(key_id), to: ExTypesense.Key - defdelegate get_key(conn, key_id), to: ExTypesense.Key - defdelegate get_key(conn, key_id, opts), to: ExTypesense.Key + defdelegate get_key(key_id, opts), to: ExTypesense.Key defdelegate delete_key(key_id), to: ExTypesense.Key - defdelegate delete_key(conn, key_id), to: ExTypesense.Key - defdelegate delete_key(conn, key_id, opts), to: ExTypesense.Key + defdelegate delete_key(key_id, opts), to: ExTypesense.Key defdelegate create_key(body), to: ExTypesense.Key - defdelegate create_key(conn, body), to: ExTypesense.Key - defdelegate create_key(conn, body, opts), to: ExTypesense.Key + defdelegate create_key(body, opts), to: ExTypesense.Key defdelegate list_keys, to: ExTypesense.Key - defdelegate list_keys(conn_or_opts), to: ExTypesense.Key - defdelegate list_keys(conn, opts), to: ExTypesense.Key + defdelegate list_keys(opts), to: ExTypesense.Key ########################################################## # end API keys ########################################################## @@ -222,20 +195,16 @@ defmodule ExTypesense do # start presets ########################################################## defdelegate get_preset(preset_id), to: ExTypesense.Preset - defdelegate get_preset(conn, preset_id), to: ExTypesense.Preset - defdelegate get_preset(conn, preset_id, opts), to: ExTypesense.Preset + defdelegate get_preset(preset_id, opts), to: ExTypesense.Preset defdelegate upsert_preset(preset_id, body), to: ExTypesense.Preset - defdelegate upsert_preset(conn, preset_id, body), to: ExTypesense.Preset - defdelegate upsert_preset(conn, preset_id, body, opts), to: ExTypesense.Preset + defdelegate upsert_preset(preset_id, body, opts), to: ExTypesense.Preset defdelegate delete_preset(preset_id), to: ExTypesense.Preset - defdelegate delete_preset(conn, preset_id), to: ExTypesense.Preset - defdelegate delete_preset(conn, preset_id, opts), to: ExTypesense.Preset + defdelegate delete_preset(preset_id, opts), to: ExTypesense.Preset defdelegate list_presets, to: ExTypesense.Preset - defdelegate list_presets(conn_or_opts), to: ExTypesense.Preset - defdelegate list_presets(conn, opts), to: ExTypesense.Preset + defdelegate list_presets(opts), to: ExTypesense.Preset ########################################################## # end presets ########################################################## @@ -244,20 +213,16 @@ defmodule ExTypesense do # start stopwords ########################################################## defdelegate list_stopwords, to: ExTypesense.Stopwords - defdelegate list_stopwords(conn_or_opts), to: ExTypesense.Stopwords - defdelegate list_stopwords(conn, opts), to: ExTypesense.Stopwords + defdelegate list_stopwords(opts), to: ExTypesense.Stopwords defdelegate get_stopword(stop_id), to: ExTypesense.Stopwords - defdelegate get_stopword(conn, stop_id), to: ExTypesense.Stopwords - defdelegate get_stopword(conn, stop_id, opts), to: ExTypesense.Stopwords + defdelegate get_stopword(stop_id, opts), to: ExTypesense.Stopwords defdelegate upsert_stopword(stop_id, body), to: ExTypesense.Stopwords - defdelegate upsert_stopword(conn, stop_id, body), to: ExTypesense.Stopwords - defdelegate upsert_stopword(conn, stop_id, body, opts), to: ExTypesense.Stopwords + defdelegate upsert_stopword(stop_id, body, opts), to: ExTypesense.Stopwords defdelegate delete_stopword(stop_id), to: ExTypesense.Stopwords - defdelegate delete_stopword(conn, stop_id), to: ExTypesense.Stopwords - defdelegate delete_stopword(conn, stop_id, opts), to: ExTypesense.Stopwords + defdelegate delete_stopword(stop_id, opts), to: ExTypesense.Stopwords ########################################################## # end stopwords ########################################################## @@ -266,24 +231,19 @@ defmodule ExTypesense do # start conversation ########################################################## defdelegate create_model(body), to: ExTypesense.Conversation - defdelegate create_model(conn, body), to: ExTypesense.Conversation - defdelegate create_model(conn, body, opts), to: ExTypesense.Conversation + defdelegate create_model(body, opts), to: ExTypesense.Conversation defdelegate list_models, to: ExTypesense.Conversation - defdelegate list_models(conn_or_opts), to: ExTypesense.Conversation - defdelegate list_models(conn, opts), to: ExTypesense.Conversation + defdelegate list_models(opts), to: ExTypesense.Conversation defdelegate get_model(model_id), to: ExTypesense.Conversation - defdelegate get_model(conn, model_id), to: ExTypesense.Conversation - defdelegate get_model(conn, model_id, opts), to: ExTypesense.Conversation + defdelegate get_model(model_id, opts), to: ExTypesense.Conversation defdelegate delete_model(model_id), to: ExTypesense.Conversation - defdelegate delete_model(conn, model_id), to: ExTypesense.Conversation - defdelegate delete_model(conn, model_id, opts), to: ExTypesense.Conversation + defdelegate delete_model(model_id, opts), to: ExTypesense.Conversation defdelegate update_model(model_id, body), to: ExTypesense.Conversation - defdelegate update_model(conn, model_id, body), to: ExTypesense.Conversation - defdelegate update_model(conn, model_id, body, opts), to: ExTypesense.Conversation + defdelegate update_model(model_id, body, opts), to: ExTypesense.Conversation ########################################################## # end conversation ########################################################## @@ -292,28 +252,22 @@ defmodule ExTypesense do # start analytics ########################################################## defdelegate list_analytics_rules, to: ExTypesense.Analytics - defdelegate list_analytics_rules(conn_or_opts), to: ExTypesense.Analytics - defdelegate list_analytics_rules(conn, opts), to: ExTypesense.Analytics + defdelegate list_analytics_rules(opts), to: ExTypesense.Analytics defdelegate create_analytics_event(body), to: ExTypesense.Analytics - defdelegate create_analytics_event(conn, body), to: ExTypesense.Analytics - defdelegate create_analytics_event(conn, body, opts), to: ExTypesense.Analytics + defdelegate create_analytics_event(body, opts), to: ExTypesense.Analytics defdelegate create_analytics_rule(body), to: ExTypesense.Analytics - defdelegate create_analytics_rule(conn, body), to: ExTypesense.Analytics - defdelegate create_analytics_rule(conn, body, opts), to: ExTypesense.Analytics + defdelegate create_analytics_rule(body, opts), to: ExTypesense.Analytics defdelegate get_analytics_rule(rule_name), to: ExTypesense.Analytics - defdelegate get_analytics_rule(conn, rule_name), to: ExTypesense.Analytics - defdelegate get_analytics_rule(conn, rule_name, opts), to: ExTypesense.Analytics + defdelegate get_analytics_rule(rule_name, opts), to: ExTypesense.Analytics defdelegate upsert_analytics_rule(rule_name, body), to: ExTypesense.Analytics - defdelegate upsert_analytics_rule(conn, rule_name, body), to: ExTypesense.Analytics - defdelegate upsert_analytics_rule(conn, rule_name, body, opts), to: ExTypesense.Analytics + defdelegate upsert_analytics_rule(rule_name, body, opts), to: ExTypesense.Analytics defdelegate delete_analytics_rule(rule_name), to: ExTypesense.Analytics - defdelegate delete_analytics_rule(conn, rule_name), to: ExTypesense.Analytics - defdelegate delete_analytics_rule(conn, rule_name, opts), to: ExTypesense.Analytics + defdelegate delete_analytics_rule(rule_name, opts), to: ExTypesense.Analytics ########################################################## # end analytics ########################################################## @@ -322,8 +276,7 @@ defmodule ExTypesense do # start debug ########################################################## defdelegate debug, to: ExTypesense.Debug - defdelegate debug(conn_or_opts), to: ExTypesense.Debug - defdelegate debug(conn, opts), to: ExTypesense.Debug + defdelegate debug(opts), to: ExTypesense.Debug ########################################################## # end debug ########################################################## @@ -332,18 +285,14 @@ defmodule ExTypesense do # start search ########################################################## defdelegate search(coll_name, opts), to: ExTypesense.Search - defdelegate search(conn, coll_name, opts), to: ExTypesense.Search defdelegate search_ecto(coll_name, opts), to: ExTypesense.Search - defdelegate search_ecto(conn, coll_name, opts), to: ExTypesense.Search defdelegate multi_search(searches), to: ExTypesense.Search - defdelegate multi_search(conn, searches), to: ExTypesense.Search - defdelegate multi_search(conn, searches, opts), to: ExTypesense.Search + defdelegate multi_search(searches, opts), to: ExTypesense.Search defdelegate multi_search_ecto(searches), to: ExTypesense.Search - defdelegate multi_search_ecto(conn, searches), to: ExTypesense.Search - defdelegate multi_search_ecto(conn, searches, opts), to: ExTypesense.Search + defdelegate multi_search_ecto(searches, opts), to: ExTypesense.Search ########################################################## # end search ########################################################## @@ -352,20 +301,16 @@ defmodule ExTypesense do # start curation ########################################################## defdelegate list_overrides(coll_name), to: ExTypesense.Curation - defdelegate list_overrides(conn, coll_name), to: ExTypesense.Curation - defdelegate list_overrides(conn, coll_name, opts), to: ExTypesense.Curation + defdelegate list_overrides(coll_name, opts), to: ExTypesense.Curation defdelegate get_override(coll_name, ovr_id), to: ExTypesense.Curation - defdelegate get_override(conn, coll_name, ovr_id), to: ExTypesense.Curation - defdelegate get_override(conn, coll_name, ovr_id, opts), to: ExTypesense.Curation + defdelegate get_override(coll_name, ovr_id, opts), to: ExTypesense.Curation defdelegate upsert_override(coll_name, ovr_id, body), to: ExTypesense.Curation - defdelegate upsert_override(conn, coll_name, ovr_id, body), to: ExTypesense.Curation - defdelegate upsert_override(conn, coll_name, ovr_id, body, opts), to: ExTypesense.Curation + defdelegate upsert_override(coll_name, ovr_id, body, opts), to: ExTypesense.Curation defdelegate delete_override(coll_name, ovr_id), to: ExTypesense.Curation - defdelegate delete_override(conn, coll_name, ovr_id), to: ExTypesense.Curation - defdelegate delete_override(conn, coll_name, ovr_id, opts), to: ExTypesense.Curation + defdelegate delete_override(coll_name, ovr_id, opts), to: ExTypesense.Curation ########################################################## # end curation ########################################################## @@ -374,20 +319,16 @@ defmodule ExTypesense do # start synonyms ########################################################## defdelegate list_synonyms(coll_name), to: ExTypesense.Synonym - defdelegate list_synonyms(conn, coll_name), to: ExTypesense.Synonym - defdelegate list_synonyms(conn, coll_name, opts), to: ExTypesense.Synonym + defdelegate list_synonyms(coll_name, opts), to: ExTypesense.Synonym defdelegate get_synonym(coll_name, syn_id), to: ExTypesense.Synonym - defdelegate get_synonym(conn, coll_name, syn_id), to: ExTypesense.Synonym - defdelegate get_synonym(conn, coll_name, syn_id, opts), to: ExTypesense.Synonym + defdelegate get_synonym(coll_name, syn_id, opts), to: ExTypesense.Synonym defdelegate delete_synonym(coll_name, syn_id), to: ExTypesense.Synonym - defdelegate delete_synonym(conn, coll_name, syn_id), to: ExTypesense.Synonym - defdelegate delete_synonym(conn, coll_name, syn_id, opts), to: ExTypesense.Synonym + defdelegate delete_synonym(coll_name, syn_id, opts), to: ExTypesense.Synonym defdelegate upsert_synonym(coll_name, syn_id, body), to: ExTypesense.Synonym - defdelegate upsert_synonym(conn, coll_name, syn_id, body), to: ExTypesense.Synonym - defdelegate upsert_synonym(conn, coll_name, syn_id, body, opts), to: ExTypesense.Synonym + defdelegate upsert_synonym(coll_name, syn_id, body, opts), to: ExTypesense.Synonym ########################################################## # end synonyms ########################################################## @@ -396,15 +337,12 @@ defmodule ExTypesense do # start stemming ########################################################## defdelegate get_stemming_dictionary(dictionary_id), to: ExTypesense.Stemming - defdelegate get_stemming_dictionary(conn, dictionary_id), to: ExTypesense.Stemming - defdelegate get_stemming_dictionary(conn, dictionary_id, opts), to: ExTypesense.Stemming + defdelegate get_stemming_dictionary(dictionary_id, opts), to: ExTypesense.Stemming defdelegate import_stemming_dictionary(body, opts), to: ExTypesense.Stemming - defdelegate import_stemming_dictionary(conn, body, opts), to: ExTypesense.Stemming defdelegate list_stemming_dictionaries(), to: ExTypesense.Stemming - defdelegate list_stemming_dictionaries(conn_or_opts), to: ExTypesense.Stemming - defdelegate list_stemming_dictionaries(conn, opts), to: ExTypesense.Stemming + defdelegate list_stemming_dictionaries(opts), to: ExTypesense.Stemming ########################################################## # end stemming ########################################################## @@ -413,39 +351,30 @@ defmodule ExTypesense do # start cluster operations ########################################################## defdelegate api_stats, to: ExTypesense.Cluster - defdelegate api_stats(conn_or_opts), to: ExTypesense.Cluster - defdelegate api_stats(conn, opts), to: ExTypesense.Cluster + defdelegate api_stats(opts), to: ExTypesense.Cluster defdelegate cluster_metrics, to: ExTypesense.Cluster - defdelegate cluster_metrics(conn_or_opts), to: ExTypesense.Cluster - defdelegate cluster_metrics(conn, opts), to: ExTypesense.Cluster + defdelegate cluster_metrics(opts), to: ExTypesense.Cluster defdelegate health, to: ExTypesense.Cluster - defdelegate health(conn_or_opts), to: ExTypesense.Cluster - defdelegate health(conn, opts), to: ExTypesense.Cluster + defdelegate health(opts), to: ExTypesense.Cluster defdelegate create_snapshot(opts), to: ExTypesense.Cluster - defdelegate create_snapshot(conn, opts), to: ExTypesense.Cluster defdelegate compact_db, to: ExTypesense.Cluster - defdelegate compact_db(conn_or_opts), to: ExTypesense.Cluster - defdelegate compact_db(conn, opts), to: ExTypesense.Cluster + defdelegate compact_db(opts), to: ExTypesense.Cluster defdelegate clear_cache, to: ExTypesense.Cluster - defdelegate clear_cache(conn_or_opts), to: ExTypesense.Cluster - defdelegate clear_cache(conn, opts), to: ExTypesense.Cluster + defdelegate clear_cache(opts), to: ExTypesense.Cluster defdelegate get_schema_changes, to: ExTypesense.Cluster - defdelegate get_schema_changes(conn_or_opts), to: ExTypesense.Cluster - defdelegate get_schema_changes(conn, opts), to: ExTypesense.Cluster + defdelegate get_schema_changes(opts), to: ExTypesense.Cluster defdelegate toggle_slow_request_log(config), to: ExTypesense.Cluster - defdelegate toggle_slow_request_log(conn, config), to: ExTypesense.Cluster - defdelegate toggle_slow_request_log(conn, config, opts), to: ExTypesense.Cluster + defdelegate toggle_slow_request_log(config, opts), to: ExTypesense.Cluster defdelegate vote, to: ExTypesense.Cluster - defdelegate vote(conn_or_opts), to: ExTypesense.Cluster - defdelegate vote(conn, opts), to: ExTypesense.Cluster + defdelegate vote(opts), to: ExTypesense.Cluster ########################################################## # end cluster operations ########################################################## diff --git a/lib/ex_typesense/analytics.ex b/lib/ex_typesense/analytics.ex index a126a1b..15b70eb 100644 --- a/lib/ex_typesense/analytics.ex +++ b/lib/ex_typesense/analytics.ex @@ -8,8 +8,6 @@ defmodule ExTypesense.Analytics do More here: https://typesense.org/docs/latest/api/analytics-query-suggestions.html """ - alias OpenApiTypesense.Connection - @doc """ Creates an analytics rule @@ -48,41 +46,26 @@ defmodule ExTypesense.Analytics do @doc """ Same as [create_analytics_rule/1](`create_analytics_rule/1`) - ```elixir - ExTypesense.create_analytics_rule(body, []) - - ExTypesense.create_analytics_rule(%{api_key: xyz, host: ...}, body) + ## Options - ExTypesense.create_analytics_rule(OpenApiTypesense.Connection.new(), body) - ``` - """ - @doc since: "1.0.0" - @spec create_analytics_rule(map() | Connection.t(), map() | keyword()) :: - {:ok, OpenApiTypesense.AnalyticsRuleSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def create_analytics_rule(body, opts) when is_list(opts) do - Connection.new() |> create_analytics_rule(body, opts) - end - - def create_analytics_rule(conn, body) do - create_analytics_rule(conn, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [create_analytics_rule/2](`create_analytics_rule/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.create_analytics_rule(body, conn: conn) - ```elixir - ExTypesense.create_analytics_rule(%{api_key: xyz, host: ...}, body, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.create_analytics_rule(body, conn: conn) - ExTypesense.create_analytics_rule(OpenApiTypesense.Connection.new(), body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.create_analytics_rule(body, opts) """ @doc since: "1.0.0" - @spec create_analytics_rule(map() | Connection.t(), map(), keyword()) :: + @spec create_analytics_rule(map(), keyword()) :: {:ok, OpenApiTypesense.AnalyticsRuleSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def create_analytics_rule(conn, body, opts) do - OpenApiTypesense.Analytics.create_analytics_rule(conn, body, opts) + def create_analytics_rule(body, opts) do + OpenApiTypesense.Analytics.create_analytics_rule(body, opts) end @doc """ @@ -114,45 +97,33 @@ defmodule ExTypesense.Analytics do @doc """ Same as [create_analytics_event/1](`create_analytics_event/1`) - ```elixir - ExTypesense.create_analytics_event(body, []) + ## Options - ExTypesense.create_analytics_event(%{api_key: xyz, host: ...}, body) - - ExTypesense.create_analytics_event(OpenApiTypesense.Connection.new(), body) - ``` - """ - @doc since: "1.0.0" - @spec create_analytics_event(map() | Connection.t(), map() | keyword()) :: - {:ok, OpenApiTypesense.AnalyticsEventCreateResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def create_analytics_event(body, opts) when is_list(opts) do - Connection.new() |> create_analytics_event(body, opts) - end + * `conn`: The custom connection map or struct you passed - def create_analytics_event(conn, body) do - create_analytics_event(conn, body, []) - end - - @doc """ - Same as [create_analytics_event/2](`create_analytics_event/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.create_analytics_event(body, conn: conn) - ```elixir - ExTypesense.create_analytics_event(%{api_key: xyz, host: ...}, body, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.create_analytics_event(body, conn: conn) - ExTypesense.create_analytics_event(OpenApiTypesense.Connection.new(), body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.create_analytics_event(body, opts) """ @doc since: "1.0.0" - @spec create_analytics_event(map() | Connection.t(), map(), keyword()) :: + @spec create_analytics_event(map(), keyword()) :: {:ok, OpenApiTypesense.AnalyticsEventCreateResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def create_analytics_event(conn, body, opts) do - OpenApiTypesense.Analytics.create_analytics_event(conn, body, opts) + def create_analytics_event(body, opts) do + OpenApiTypesense.Analytics.create_analytics_event(body, opts) end @doc """ Retrieve the details of all analytics rules + + ## Examples + iex> ExTypesense.list_analytics_rules() """ @doc since: "1.0.0" @spec list_analytics_rules :: {:ok, OpenApiTypesense.AnalyticsRulesRetrieveSchema.t()} | :error @@ -163,43 +134,32 @@ defmodule ExTypesense.Analytics do @doc """ Same as [list_analytics_rules/0](`list_analytics_rules/0`) - ```elixir - ExTypesense.list_analytics_rules([]) - - ExTypesense.list_analytics_rules(%{api_key: xyz, host: ...}) - - ExTypesense.list_analytics_rules(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec list_analytics_rules(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.AnalyticsRulesRetrieveSchema.t()} | :error - def list_analytics_rules(opts) when is_list(opts) do - Connection.new() |> list_analytics_rules(opts) - end + ## Options - def list_analytics_rules(conn) do - list_analytics_rules(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_analytics_rules/1](`list_analytics_rules/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_analytics_rules(conn: conn) - ```elixir - ExTypesense.list_analytics_rules(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_analytics_rules(conn: conn) - ExTypesense.list_analytics_rules(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.list_analytics_rules(opts) """ @doc since: "1.0.0" - @spec list_analytics_rules(map() | Connection.t(), keyword()) :: + @spec list_analytics_rules(keyword()) :: {:ok, OpenApiTypesense.AnalyticsRulesRetrieveSchema.t()} | :error - def list_analytics_rules(conn, opts) do - OpenApiTypesense.Analytics.retrieve_analytics_rules(conn, opts) + def list_analytics_rules(opts) do + OpenApiTypesense.Analytics.retrieve_analytics_rules(opts) end @doc """ Retrieve the details of an analytics rule, given it's name + + ## Examples + iex> ExTypesense.get_analytics_rule(rule_name) """ @doc since: "1.0.0" @spec get_analytics_rule(String.t()) :: @@ -212,41 +172,26 @@ defmodule ExTypesense.Analytics do @doc """ Same as [get_analytics_rule/1](`get_analytics_rule/1`) - ```elixir - ExTypesense.get_analytics_rule(rule_name, []) - - ExTypesense.get_analytics_rule(%{api_key: xyz, host: ...}, rule_name) - - ExTypesense.get_analytics_rule(OpenApiTypesense.Connection.new(), rule_name) - ``` - """ - @doc since: "1.0.0" - @spec get_analytics_rule(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.AnalyticsRuleSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def get_analytics_rule(rule_name, opts) when is_list(opts) do - Connection.new() |> get_analytics_rule(rule_name, opts) - end + ## Options - def get_analytics_rule(conn, rule_name) do - get_analytics_rule(conn, rule_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_analytics_rule/2](`get_analytics_rule/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_analytics_rule(rule_name, conn: conn) - ```elixir - ExTypesense.get_analytics_rule(%{api_key: xyz, host: ...}, rule_name, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_analytics_rule(rule_name, conn: conn) - ExTypesense.get_analytics_rule(OpenApiTypesense.Connection.new(), rule_name, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_analytics_rule(rule_name, opts) """ @doc since: "1.0.0" - @spec get_analytics_rule(map() | Connection.t(), String.t(), keyword()) :: + @spec get_analytics_rule(String.t(), keyword()) :: {:ok, OpenApiTypesense.AnalyticsRuleSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_analytics_rule(conn, rule_name, opts) do - OpenApiTypesense.Analytics.retrieve_analytics_rule(conn, rule_name, opts) + def get_analytics_rule(rule_name, opts) do + OpenApiTypesense.Analytics.retrieve_analytics_rule(rule_name, opts) end @doc """ @@ -260,28 +205,29 @@ defmodule ExTypesense.Analytics do upsert_analytics_rule(rule_name, body, []) end - @doc since: "1.0.0" - @spec upsert_analytics_rule( - map() | Connection.t() | String.t(), - String.t() | map(), - map() | keyword() - ) :: - {:ok, OpenApiTypesense.AnalyticsRuleSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_analytics_rule(rule_name, body, opts) when is_list(opts) do - Connection.new() |> upsert_analytics_rule(rule_name, body, opts) - end + @doc """ + Same as [upsert_analytics_rule/2](`upsert_analytics_rule/2`) - def upsert_analytics_rule(conn, rule_name, body) do - upsert_analytics_rule(conn, rule_name, body, []) - end + ## Options + + * `conn`: The custom connection map or struct you passed + + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.upsert_analytics_rule(rule_name, body, conn: conn) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.upsert_analytics_rule(rule_name, body, conn: conn) + + iex> opts = [conn: conn] + iex> ExTypesense.upsert_analytics_rule(rule_name, body, opts) + """ @doc since: "1.0.0" - @spec upsert_analytics_rule(map() | Connection.t(), String.t(), map(), keyword()) :: + @spec upsert_analytics_rule(String.t(), map(), keyword()) :: {:ok, OpenApiTypesense.AnalyticsRuleSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_analytics_rule(conn, rule_name, body, opts) do - OpenApiTypesense.Analytics.upsert_analytics_rule(conn, rule_name, body, opts) + def upsert_analytics_rule(rule_name, body, opts) do + OpenApiTypesense.Analytics.upsert_analytics_rule(rule_name, body, opts) end @doc """ @@ -300,40 +246,25 @@ defmodule ExTypesense.Analytics do @doc """ Same as [delete_analytics_rule/1](`delete_analytics_rule/1`) - ```elixir - ExTypesense.delete_analytics_rule(rule_name, []) - - ExTypesense.delete_analytics_rule(%{api_key: xyz, host: ...}, rule_name) - - ExTypesense.delete_analytics_rule(OpenApiTypesense.Connection.new(), rule_name) - ``` - """ - @doc since: "1.0.0" - @spec delete_analytics_rule(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.AnalyticsRuleDeleteResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_analytics_rule(rule_name, opts) when is_list(opts) do - Connection.new() |> delete_analytics_rule(rule_name, opts) - end + ## Options - def delete_analytics_rule(conn, rule_name) do - delete_analytics_rule(conn, rule_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_analytics_rule/2](`delete_analytics_rule/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_analytics_rule(rule_name, conn: conn) - ```elixir - ExTypesense.delete_analytics_rule(%{api_key: xyz, host: ...}, rule_name, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_analytics_rule(rule_name, conn: conn) - ExTypesense.delete_analytics_rule(OpenApiTypesense.Connection.new(), rule_name, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_analytics_rule(rule_name, opts) """ @doc since: "1.0.0" - @spec delete_analytics_rule(map() | Connection.t(), String.t(), keyword()) :: + @spec delete_analytics_rule(String.t(), keyword()) :: {:ok, OpenApiTypesense.AnalyticsRuleDeleteResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_analytics_rule(conn, rule_name, opts) do - OpenApiTypesense.Analytics.delete_analytics_rule(conn, rule_name, opts) + def delete_analytics_rule(rule_name, opts) do + OpenApiTypesense.Analytics.delete_analytics_rule(rule_name, opts) end end diff --git a/lib/ex_typesense/cluster.ex b/lib/ex_typesense/cluster.ex index 4db8dbb..62d1ba0 100644 --- a/lib/ex_typesense/cluster.ex +++ b/lib/ex_typesense/cluster.ex @@ -7,10 +7,11 @@ defmodule ExTypesense.Cluster do More here: https://typesense.org/docs/latest/api/cluster-operations.html """ - alias OpenApiTypesense.Connection - @doc """ Get health information about a Typesense node. + + ## Examples + iex> ExTypesense.health() """ @doc since: "0.3.0" @spec health :: {:ok, OpenApiTypesense.HealthStatus.t()} | :error @@ -21,39 +22,29 @@ defmodule ExTypesense.Cluster do @doc """ Same as [health/0](`health/0`) - ```elixir - ExTypesense.health([]) - - ExTypesense.health(%{api_key: xyz, host: ...}) - - ExTypesense.health(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec health(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.HealthStatus.t()} | :error - def health(opts) when is_list(opts) do - Connection.new() |> health(opts) - end + ## Options - def health(conn) do - health(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [health/1](`health/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.health(conn: conn) - ```elixir - ExTypesense.health(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.health(conn: conn) - ExTypesense.health(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.health(opts) """ @doc since: "1.0.0" - @spec health(map() | Connection.t(), keyword()) :: - {:ok, OpenApiTypesense.HealthStatus.t()} | :error - def health(conn, opts) do - OpenApiTypesense.Health.health(conn, opts) + @spec health(keyword()) :: {:ok, OpenApiTypesense.HealthStatus.t()} | :error + def health([]) do + conn = OpenApiTypesense.Connection.new() + OpenApiTypesense.Health.health(conn: conn) + end + + def health(opts) do + OpenApiTypesense.Health.health(opts) end @doc """ @@ -61,6 +52,9 @@ defmodule ExTypesense.Cluster do This endpoint returns average requests per second and latencies for all requests in the last 10 seconds. + + ## Examples + iex> ExTypesense.api_stats() """ @doc since: "0.3.0" @spec api_stats :: {:ok, OpenApiTypesense.ApiStatsResponse.t()} | :error @@ -71,43 +65,36 @@ defmodule ExTypesense.Cluster do @doc """ Same as [api_stats/0](`api_stats/0`) - ```elixir - ExTypesense.api_stats([]) - - ExTypesense.api_stats(%{api_key: xyz, host: ...}) - - ExTypesense.api_stats(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec api_stats(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.ApiStatsResponse.t()} | :error - def api_stats(opts) when is_list(opts) do - Connection.new() |> api_stats(opts) - end + ## Options - def api_stats(conn) do - api_stats(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [api_stats/1](`api_stats/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.api_stats(conn: conn) - ```elixir - ExTypesense.api_stats(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.api_stats(conn: conn) - ExTypesense.api_stats(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.api_stats(opts) """ @doc since: "1.0.0" - @spec api_stats(map() | Connection.t(), keyword()) :: - {:ok, OpenApiTypesense.ApiStatsResponse.t()} | :error - def api_stats(conn, opts) do - OpenApiTypesense.Operations.retrieve_api_stats(conn, opts) + @spec api_stats(keyword()) :: {:ok, OpenApiTypesense.ApiStatsResponse.t()} | :error + def api_stats([]) do + conn = OpenApiTypesense.Connection.new() + OpenApiTypesense.Operations.retrieve_api_stats(conn: conn) + end + + def api_stats(opts) do + OpenApiTypesense.Operations.retrieve_api_stats(opts) end @doc """ Get current RAM, CPU, Disk & Network usage metrics. + + ## Examples + iex> ExTypesense.cluster_metrics() """ @doc since: "0.3.0" @spec cluster_metrics :: {:ok, map} | :error @@ -118,37 +105,24 @@ defmodule ExTypesense.Cluster do @doc """ Same as [cluster_metrics/0](`cluster_metrics/0`) - ```elixir - ExTypesense.cluster_metrics([]) - - ExTypesense.cluster_metrics(%{api_key: xyz, host: ...}) - - ExTypesense.cluster_metrics(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec cluster_metrics(map() | Connection.t() | keyword()) :: {:ok, map} | :error - def cluster_metrics(opts) when is_list(opts) do - Connection.new() |> cluster_metrics(opts) - end + ## Options - def cluster_metrics(conn) do - cluster_metrics(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [cluster_metrics/1](`cluster_metrics/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.cluster_metrics(conn: conn) - ```elixir - ExTypesense.cluster_metrics(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.cluster_metrics(conn: conn) - ExTypesense.cluster_metrics(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.cluster_metrics(opts) """ @doc since: "1.0.0" - @spec cluster_metrics(map() | Connection.t(), keyword()) :: {:ok, map} | :error - def cluster_metrics(conn, opts) do - OpenApiTypesense.Operations.retrieve_metrics(conn, opts) + @spec cluster_metrics(keyword()) :: {:ok, map} | :error + def cluster_metrics(opts) do + OpenApiTypesense.Operations.retrieve_metrics(opts) end @doc """ @@ -160,30 +134,26 @@ defmodule ExTypesense.Cluster do ## Options + * `conn`: The custom connection map or struct you passed * `snapshot_path`: The directory on the server where the snapshot should be saved. - """ - @doc since: "1.0.0" - @spec create_snapshot(keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def create_snapshot(opts) when is_list(opts) do - Connection.new() |> create_snapshot(opts) - end + ## Examples + iex> path = "/path/to/snapshot_dir" + iex> ExTypesense.create_snapshot(snapshot_path: path) - @doc """ - Same as [create_snapshot/1](`create_snapshot/1`) but passes another connection. + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.create_snapshot(snapshot_path: path, conn: conn) - ```elixir - ExTypesense.create_snapshot(%{api_key: xyz, host: ...}, snapshot_path: "/tmp/typesense-data-snapshot") + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.create_snapshot(snapshot_path: path, conn: conn) - ExTypesense.create_snapshot(OpenApiTypesense.Connection.new(), snapshot_path: "/tmp/typesense-data-snapshot") - ``` + iex> opts = [snapshot_path: path, conn: conn] + iex> ExTypesense.create_snapshot(opts) """ @doc since: "1.0.0" - @spec create_snapshot(map() | Connection.t(), keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def create_snapshot(conn, opts) do - OpenApiTypesense.Operations.take_snapshot(conn, opts) + @spec create_snapshot(keyword()) :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error + def create_snapshot(opts) do + OpenApiTypesense.Operations.take_snapshot(opts) end @doc """ @@ -195,10 +165,12 @@ defmodule ExTypesense.Cluster do RocksDB database. This could reduce the size of the database and decrease read latency. While the database will not block during this operation, we recommend running it during off-peak hours. + + ## Examples + iex> ExTypesense.compact_db() """ @doc since: "1.0.0" - @spec compact_db :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error + @spec compact_db :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error def compact_db do compact_db([]) end @@ -206,39 +178,25 @@ defmodule ExTypesense.Cluster do @doc """ Same as [compact_db/0](`compact_db/0`) - ```elixir - ExTypesense.compact_db([]) - - ExTypesense.compact_db(%{api_key: xyz, host: ...}) - - ExTypesense.compact_db(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec compact_db(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def compact_db(opts) when is_list(opts) do - Connection.new() |> compact_db(opts) - end + ## Options - def compact_db(conn) do - compact_db(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [compact_db/1](`compact_db/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.compact_db(conn: conn) - ```elixir - ExTypesense.compact_db(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.compact_db(conn: conn) - ExTypesense.compact_db(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.compact_db(opts) """ @doc since: "1.0.0" - @spec compact_db(map() | Connection.t(), keyword()) :: + @spec compact_db(keyword()) :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def compact_db(conn, opts) do - OpenApiTypesense.Operations.compact(conn, opts) + def compact_db(opts) do + OpenApiTypesense.Operations.compact(opts) end @doc """ @@ -247,6 +205,9 @@ defmodule ExTypesense.Cluster do Responses of search requests that are sent with [`use_cache` parameter](https://typesense.org/docs/latest/api/search.html#caching-parameters) are cached in a LRU cache. Clears cache completely. + + ## Examples + iex> ExTypesense.clear_cache() """ @doc since: "1.0.0" @spec clear_cache :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error @@ -257,39 +218,24 @@ defmodule ExTypesense.Cluster do @doc """ Same as [clear_cache/0](`clear_cache/0`) - ```elixir - ExTypesense.clear_cache([]) - - ExTypesense.clear_cache(%{api_key: xyz, host: ...}) - - ExTypesense.clear_cache(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec clear_cache(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def clear_cache(opts) when is_list(opts) do - Connection.new() |> clear_cache(opts) - end + ## Options - def clear_cache(conn) do - clear_cache(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [clear_cache/1](`clear_cache/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.clear_cache(conn: conn) - ```elixir - ExTypesense.clear_cache(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.clear_cache(conn: conn) - ExTypesense.clear_cache(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.clear_cache(opts) """ @doc since: "1.0.0" - @spec clear_cache(map() | Connection.t(), keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def clear_cache(conn, opts) do - OpenApiTypesense.Operations.clear_cache(conn, opts) + @spec clear_cache(keyword()) :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error + def clear_cache(opts) do + OpenApiTypesense.Operations.clear_cache(opts) end @doc """ @@ -297,6 +243,9 @@ defmodule ExTypesense.Cluster do Returns the status of any ongoing schema change operations. If no schema changes are in progress, returns an empty response. + + ## Examples + iex> ExTypesense.get_schema_changes() """ @doc since: "1.2.0" @spec get_schema_changes :: {:ok, [OpenApiTypesense.SchemaChangeStatus.t()]} | :error @@ -307,39 +256,24 @@ defmodule ExTypesense.Cluster do @doc """ Same as [get_schema_changes/0](`get_schema_changes/0`) but passes another connection. - ```elixir - ExTypesense.get_schema_changes([]) - - ExTypesense.get_schema_changes(%{api_key: xyz, host: ...}) - - ExTypesense.get_schema_changes(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.2.0" - @spec get_schema_changes(map() | Connection.t() | keyword()) :: - {:ok, [OpenApiTypesense.SchemaChangeStatus.t()]} | :error - def get_schema_changes(opts) when is_list(opts) do - Connection.new() |> get_schema_changes(opts) - end + ## Options - def get_schema_changes(conn) do - get_schema_changes(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_schema_changes/1](`get_schema_changes/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_schema_changes(conn: conn) - ```elixir - ExTypesense.get_schema_changes(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_schema_changes(conn: conn) - ExTypesense.get_schema_changes(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_schema_changes(opts) """ @doc since: "1.2.0" - @spec get_schema_changes(map() | Connection.t(), keyword()) :: - {:ok, [OpenApiTypesense.SchemaChangeStatus.t()]} | :error - def get_schema_changes(conn, opts) do - OpenApiTypesense.Operations.get_schema_changes(conn, opts) + @spec get_schema_changes(keyword()) :: {:ok, [OpenApiTypesense.SchemaChangeStatus.t()]} | :error + def get_schema_changes(opts) do + OpenApiTypesense.Operations.get_schema_changes(opts) end @doc """ @@ -354,8 +288,7 @@ defmodule ExTypesense.Cluster do """ @doc since: "1.0.0" - @spec toggle_slow_request_log(map()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error + @spec toggle_slow_request_log(map()) :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error def toggle_slow_request_log(config) do toggle_slow_request_log(config, []) end @@ -363,39 +296,25 @@ defmodule ExTypesense.Cluster do @doc """ Same as [toggle_slow_request_log/1](`toggle_slow_request_log/1`) - ```elixir - ExTypesense.toggle_slow_request_log(config, []) - - ExTypesense.toggle_slow_request_log(%{api_key: xyz, host: ...}, config) - - ExTypesense.toggle_slow_request_log(OpenApiTypesense.Connection.new(), config) - ``` - """ - @doc since: "1.0.0" - @spec toggle_slow_request_log(map() | Connection.t(), map() | keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def toggle_slow_request_log(config, opts) when is_list(opts) do - Connection.new() |> toggle_slow_request_log(config, opts) - end + ## Options - def toggle_slow_request_log(conn, config) do - toggle_slow_request_log(conn, config, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [toggle_slow_request_log/2](`toggle_slow_request_log/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.toggle_slow_request_log(config, conn: conn) - ```elixir - ExTypesense.toggle_slow_request_log(%{api_key: xyz, host: ...}, config, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.toggle_slow_request_log(config, conn: conn) - ExTypesense.toggle_slow_request_log(OpenApiTypesense.Connection.new(), config, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.toggle_slow_request_log(config, opts) """ @doc since: "1.0.0" - @spec toggle_slow_request_log(map() | Connection.t(), map(), keyword()) :: + @spec toggle_slow_request_log(map(), keyword()) :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def toggle_slow_request_log(conn, config, opts) do - OpenApiTypesense.Operations.config(conn, config, opts) + def toggle_slow_request_log(config, opts) do + OpenApiTypesense.Operations.config(config, opts) end @doc """ @@ -404,6 +323,9 @@ defmodule ExTypesense.Cluster do The follower node that you run this operation against will become the new leader, once this command succeeds. + + ## Examples + iex> ExTypesense.vote() """ @spec vote :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error def vote do @@ -413,36 +335,23 @@ defmodule ExTypesense.Cluster do @doc """ Same as [vote/0](`vote/0`) but passes another connection. - ```elixir - ExTypesense.vote([]) - - ExTypesense.vote(%{api_key: xyz, host: ...}) - - ExTypesense.vote(OpenApiTypesense.Connection.new()) - ``` - """ - @spec vote(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def vote(opts) when is_list(opts) do - Connection.new() |> vote(opts) - end + ## Options - def vote(conn) do - vote(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [vote/1](`vote/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.vote(conn: conn) - ```elixir - ExTypesense.vote(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.vote(conn: conn) - ExTypesense.vote(OpenApiTypesense.Connection.new(), []) + iex> opts = [conn: conn] + iex> ExTypesense.vote(opts) ``` """ - @spec vote(map() | Connection.t(), keyword()) :: - {:ok, OpenApiTypesense.SuccessStatus.t()} | :error - def vote(conn, opts) do - OpenApiTypesense.Operations.vote(conn, opts) + @spec vote(keyword()) :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error + def vote(opts) do + OpenApiTypesense.Operations.vote(opts) end end diff --git a/lib/ex_typesense/collection.ex b/lib/ex_typesense/collection.ex index 2dce04f..8281e88 100644 --- a/lib/ex_typesense/collection.ex +++ b/lib/ex_typesense/collection.ex @@ -13,17 +13,12 @@ defmodule ExTypesense.Collection do More here: https://typesense.org/docs/latest/api/collections.html """ - alias OpenApiTypesense.Connection - @doc """ Returns a summary of all your collections. The collections are returned sorted by creation date, with the most recent collections appearing first. - ## Options - - * `limit`: Limit results in paginating on collection listing. - * `offset`: Skip a certain number of results and start after that. - * `exclude_fields`: Exclude the field definitions from being returned in the response. + ## Examples + iex> ExTypesense.list_collections() """ @doc since: "1.0.0" @spec list_collections :: {:ok, [OpenApiTypesense.CollectionResponse.t()]} | :error @@ -34,39 +29,28 @@ defmodule ExTypesense.Collection do @doc """ Same as [list_collections/0](`list_collections/0`) but passes another connection or option. - ```elixir - ExTypesense.list_collections(OpenApiTypesense.Connection.new()) - - ExTypesense.list_collections(%{api_key: xyz, host: ...}) - - ExTypesense.list_collections(exclude_fields: "fields", limit: 10) - ``` - """ - @doc since: "1.0.0" - @spec list_collections(map() | Connection.t() | keyword()) :: - {:ok, [OpenApiTypesense.CollectionResponse.t()]} | :error - def list_collections(opts) when is_list(opts) do - Connection.new() |> list_collections(opts) - end + ## Options - def list_collections(conn) do - list_collections(conn, []) - end + * `conn`: The custom connection map or struct you passed + * `limit`: Limit results in paginating on collection listing. + * `offset`: Skip a certain number of results and start after that. + * `exclude_fields`: Exclude the field definitions from being returned in the response. - @doc """ - Same as [list_collections/1](`list_collections/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_collections(conn: conn) - ```elixir - ExTypesense.list_collections(%{api_key: xyz, host: ...}, limit: 10) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_collections(conn: conn) - ExTypesense.list_collections(OpenApiTypesense.Connection.new(), exclude_fields: "fields", limit: 10) - ``` + iex> opts = [exclude_fields: "fields", limit: 10, conn: conn] + iex> ExTypesense.list_collections(opts) """ @doc since: "1.0.0" - @spec list_collections(map() | Connection.t(), keyword()) :: + @spec list_collections(keyword()) :: {:ok, [OpenApiTypesense.CollectionResponse.t()]} | :error - def list_collections(conn, opts) do - OpenApiTypesense.Collections.get_collections(conn, opts) + def list_collections(opts) do + OpenApiTypesense.Collections.get_collections(opts) end @doc """ @@ -83,6 +67,24 @@ defmodule ExTypesense.Collection do > One common use-case for aliases is to reindex your data in the > background on a new collection and then switch your application > to it without any changes to your code. [Source](https://typesense.org/docs/latest/api/collection-alias.html#use-case) + + ## Options + + * `conn`: The custom connection map or struct you passed + + ## Examples + iex> schema = %{ + ...> name: "companies", + ...> fields: [ + ...> %{name: "company_name", type: "string"}, + ...> %{name: "companies_id", type: "int32"}, + ...> %{name: "country", type: "string", facet: true} + ...> ], + ...> default_sorting_field: "companies_id" + ...> } + iex> ExTypesense.create_collection_with_alias(schema) + + iex> ExTypesense.create_collection_with_alias(Person) """ @doc since: "1.1.0" @spec create_collection_with_alias(map() | module()) :: @@ -95,50 +97,31 @@ defmodule ExTypesense.Collection do @doc """ Same as [create_collection_with_alias/1](`create_collection_with_alias/1`) but passes another connection or opts. - ```elixir - ExTypesense.create_collection_with_alias(%{api_key: xyz, host: ...}, schema) - - ExTypesense.create_collection_with_alias(OpenApiTypesense.Connection.new(), MyModule.Context) - - ExTypesense.create_collection_with_alias(schema, src_name: "companies") - ``` - """ - @doc since: "1.1.0" - @spec create_collection_with_alias(map() | Connection.t(), map() | module() | keyword()) :: - {:ok, OpenApiTypesense.CollectionResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def create_collection_with_alias(schema, opts) when is_list(opts) do - Connection.new() |> create_collection_with_alias(schema, opts) - end - - def create_collection_with_alias(conn, schema) do - create_collection_with_alias(conn, schema, []) - end - - @doc """ - Same as [create_collection_with_alias/2](`create_collection_with_alias/2`) but explicitly passes all arguments. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.create_collection_with_alias(schema, conn: conn) - ```elixir - ExTypesense.create_collection_with_alias(%{api_key: xyz, host: ...}, schema, opts) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.create_collection_with_alias(schema, conn: conn) - ExTypesense.create_collection_with_alias(OpenApiTypesense.Connection.new(), MyModule.Context.Schema, opts) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.create_collection_with_alias(schema, opts) """ @doc since: "1.1.0" - @spec create_collection_with_alias(map() | Connection.t(), map() | module(), keyword()) :: + @spec create_collection_with_alias(map() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def create_collection_with_alias(conn, module, opts) when is_atom(module) do + def create_collection_with_alias(module, opts) when is_atom(module) do schema = module.get_field_types() - create_collection_with_alias(conn, schema, opts) + create_collection_with_alias(schema, opts) end - def create_collection_with_alias(conn, schema, opts) do + def create_collection_with_alias(schema, opts) when is_map(schema) do coll_name = Map.get(schema, "name") || Map.get(schema, :name) coll_name_ts = "#{coll_name}-#{DateTime.utc_now() |> DateTime.to_unix()}" updated_schema = Map.put(schema, :name, coll_name_ts) - coll = create_collection(conn, updated_schema, opts) - upsert_collection_alias(conn, coll_name, coll_name_ts) + coll = create_collection(updated_schema, opts) + upsert_collection_alias(coll_name, coll_name_ts, opts) coll end @@ -149,11 +132,6 @@ defmodule ExTypesense.Collection do Please refer to these [list of schema params](https://typesense.org/docs/latest/api/collections.html#schema-parameters). - ## Options - - * `src_name` (optional): Clone an existing collection's schema (documents are not copied), overrides and synonyms. This option is used primarily by [`clone_collection/2`](`clone_collection/2`). - - ## Examples iex> schema = %{ ...> name: "companies", @@ -197,46 +175,32 @@ defmodule ExTypesense.Collection do @doc """ Same as [create_collection/1](`create_collection/1`) but passes another connection or opts. - ```elixir - ExTypesense.create_collection(%{api_key: xyz, host: ...}, schema) - - ExTypesense.create_collection(OpenApiTypesense.Connection.new(), MyModule.Context) - - ExTypesense.create_collection(schema, src_name: "companies") - ``` - """ - @doc since: "1.0.0" - @spec create_collection(map() | Connection.t(), map() | module() | keyword()) :: - {:ok, OpenApiTypesense.CollectionResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def create_collection(schema, opts) when is_list(opts) do - Connection.new() |> create_collection(schema, opts) - end + ## Options - def create_collection(conn, schema) do - create_collection(conn, schema, []) - end + * `conn`: The custom connection map or struct you passed + * `src_name` (optional): Clone an existing collection's schema (documents are not copied), overrides and synonyms. This option is used primarily by [`clone_collection/2`](`clone_collection/2`). - @doc """ - Same as [create_collection/2](`create_collection/2`) but explicitly passes all arguments. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.create_collection(schema, conn: conn) - ```elixir - ExTypesense.create_collection(%{api_key: xyz, host: ...}, schema, opts) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.create_collection(schema, conn: conn) - ExTypesense.create_collection(OpenApiTypesense.Connection.new(), MyModule.Context.Schema, opts) - ``` + iex> opts = [src_name: "companies", conn: conn] + iex> ExTypesense.create_collection(schema, opts) """ @doc since: "1.0.0" - @spec create_collection(map() | Connection.t(), map() | module(), keyword()) :: + @spec create_collection(map() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def create_collection(conn, module, opts) when is_atom(module) do + def create_collection(module, opts) when is_atom(module) do schema = module.get_field_types() - create_collection(conn, schema, opts) + create_collection(schema, opts) end - def create_collection(conn, schema, opts) do - OpenApiTypesense.Collections.create_collection(conn, schema, opts) + def create_collection(schema, opts) when is_map(schema) do + OpenApiTypesense.Collections.create_collection(schema, opts) end @doc """ @@ -245,11 +209,9 @@ defmodule ExTypesense.Collection do not copied, so this is primarily useful for creating new collections from an existing reference template. - ```elixir - ExTypesense.clone_collection(MyModule.Accounts.User, "persons") - - ExTypesense.clone_collection("persons", "accounts") - ``` + ## Examples + iex> ExTypesense.clone_collection(MyModule.Accounts.User, "persons") + iex> ExTypesense.clone_collection("persons", "accounts") """ @doc since: "1.0.0" @spec clone_collection(String.t() | module(), String.t()) :: @@ -262,57 +224,40 @@ defmodule ExTypesense.Collection do @doc """ Same as [clone_collection/2](`clone_collection/2`) - ```elixir - ExTypesense.clone_collection("persons", "accounts", []) - - ExTypesense.clone_collection(MyModule.Accounts.User, "persons", []) - - ExTypesense.clone_collection(%{api_key: xyz, host: ...}, "persons", "accounts") - - ExTypesense.clone_collection(OpenApiTypesense.Connection.new(), MyModule.Accounts.User, "persons") - ``` - """ - @doc since: "1.0.0" - @spec clone_collection( - map() | Connection.t() | String.t() | module(), - String.t() | module(), - String.t() | keyword() - ) :: - {:ok, OpenApiTypesense.CollectionResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def clone_collection(src_coll, new_coll, opts) when is_list(opts) do - Connection.new() |> clone_collection(src_coll, new_coll, opts) - end + ## Options - def clone_collection(conn, src_coll, new_coll) do - clone_collection(conn, src_coll, new_coll, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [clone_collection/3](`clone_collection/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.clone_collection("persons", "accounts", conn: conn) - ```elixir - ExTypesense.clone_collection(%{api_key: xyz, host: ...}, "persons", "accounts", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.clone_collection(MyModule.Accounts.User, "persons", conn: conn) - ExTypesense.clone_collection(OpenApiTypesense.Connection.new(), "persons", MyModule.Accounts.User, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.clone_collection(MyModule.Accounts.User, "persons", opts) """ @doc since: "1.0.0" - @spec clone_collection(map() | Connection.t(), String.t() | module(), String.t(), keyword()) :: + @spec clone_collection(String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def clone_collection(conn, module, new_coll, opts) when is_atom(module) do + def clone_collection(module, new_coll, opts) when is_atom(module) do src_coll = module.__schema__(:source) - clone_collection(conn, src_coll, new_coll, opts) + clone_collection(src_coll, new_coll, opts) end - def clone_collection(conn, src_coll, new_coll, opts) do + def clone_collection(src_coll, new_coll, opts) when is_binary(src_coll) do opts = Keyword.put_new(opts, :src_name, src_coll) - create_collection(conn, %{"name" => new_coll}, opts) + create_collection(%{"name" => new_coll}, opts) end @doc """ Get a specific collection by string or module name. + + ## Examples + iex> ExTypesense.get_collection(MyModule.Accounts.User) + iex> ExTypesense.get_collection("persons") """ @doc since: "1.0.0" @spec get_collection(String.t() | module()) :: @@ -325,55 +270,31 @@ defmodule ExTypesense.Collection do @doc """ Same as [get_collection/1](`get_collection/1`) - ```elixir - ExTypesense.get_collection("persons", []) - - ExTypesense.get_collection(MyModule.Accounts.User, []) - - ExTypesense.get_collection(%{api_key: xyz, host: ...}, "persons") - - ExTypesense.get_collection(OpenApiTypesense.Connection.new(), MyModule.Accounts.User) - ``` - """ - @doc since: "1.0.0" - @spec get_collection( - map() | Connection.t() | String.t() | module(), - String.t() | module() | keyword() - ) :: - {:ok, OpenApiTypesense.CollectionResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def get_collection(coll_name, opts) when is_list(opts) do - Connection.new() |> get_collection(coll_name, opts) - end + ## Options - def get_collection(conn, coll_name) do - get_collection(conn, coll_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_collection/2](`get_collection/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_collection("persons", conn: conn) - ```elixir - ExTypesense.get_collection(%{api_key: xyz, host: ...}, "persons", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_collection(MyModule.Accounts.User, conn: conn) - ExTypesense.get_collection(OpenApiTypesense.Connection.new(), MyModule.Accounts.User, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_collection(MyModule.Accounts.User, opts) """ @doc since: "1.0.0" - @spec get_collection( - map() | Connection.t(), - String.t() | module(), - keyword() - ) :: + @spec get_collection(String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_collection(conn, module, opts) when is_atom(module) do + def get_collection(module, opts) when is_atom(module) do collection_name = module.__schema__(:source) - get_collection(conn, collection_name, opts) + get_collection(collection_name, opts) end - def get_collection(conn, coll_name, opts) do - OpenApiTypesense.Collections.get_collection(conn, coll_name, opts) + def get_collection(coll_name, opts) when is_binary(coll_name) do + OpenApiTypesense.Collections.get_collection(coll_name, opts) end @doc """ @@ -421,50 +342,31 @@ defmodule ExTypesense.Collection do @doc """ Same as [update_collection_fields/2](`update_collection_fields/2`) - ```elixir - ExTypesense.update_collection_fields("persons", fields, []) - - ExTypesense.update_collection_fields(%{api_key: xyz, host: ...}, "persons", fields) - - ExTypesense.update_collection_fields(OpenApiTypesense.Connection.new(), MyModule.Accounts.User, fields) - ``` - """ - @doc since: "1.0.0" - @spec update_collection_fields( - map() | Connection.t() | String.t() | module(), - String.t() | module() | map(), - map() | keyword() - ) :: - {:ok, OpenApiTypesense.CollectionUpdateSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def update_collection_fields(name, fields, opts) when is_list(opts) do - Connection.new() |> update_collection_fields(name, fields, opts) - end + ## Options - def update_collection_fields(conn, name, fields) do - update_collection_fields(conn, name, fields, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [update_collection_fields/3](`update_collection_fields/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.update_collection_fields("persons", fields, conn: conn) - ```elixir - ExTypesense.update_collection_fields(%{api_key: xyz, host: ...}, "persons", fields, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.update_collection_fields("persons", fields, conn: conn) - ExTypesense.update_collection_fields(OpenApiTypesense.Connection.new(), MyModule.Accounts.User, fields, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_collection("persons", fields, opts) """ @doc since: "1.0.0" - @spec update_collection_fields(map() | Connection.t(), String.t() | module(), map(), keyword()) :: + @spec update_collection_fields(String.t() | module(), map(), keyword()) :: {:ok, OpenApiTypesense.CollectionUpdateSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def update_collection_fields(conn, module, fields, opts) when is_atom(module) do + def update_collection_fields(module, fields, opts) when is_atom(module) do name = module.__schema__(:source) - update_collection_fields(conn, name, fields, opts) + update_collection_fields(name, fields, opts) end - def update_collection_fields(conn, name, fields, opts) do - OpenApiTypesense.Collections.update_collection(conn, name, fields, opts) + def update_collection_fields(name, fields, opts) when is_binary(name) do + OpenApiTypesense.Collections.update_collection(name, fields, opts) end @doc """ @@ -477,6 +379,11 @@ defmodule ExTypesense.Collection do > > dropping a collection does not remove the referenced > alias, only the indexed documents. + + ## Examples + iex> ExTypesense.drop_collection("persons") + + iex> ExTypesense.drop_collection(MyModule.Accounts.User) """ @doc since: "1.0.0" @spec drop_collection(String.t() | module()) :: @@ -489,50 +396,37 @@ defmodule ExTypesense.Collection do @doc """ Same as [drop_collection/2](`drop_collection/2`) - ```elixir - ExTypesense.drop_collection("persons", []) - - ExTypesense.drop_collection(%{api_key: xyz, host: ...}, "persons") - - ExTypesense.drop_collection(OpenApiTypesense.Connection.new(), MyModule.Accounts.User) - ``` - """ - @doc since: "1.0.0" - @spec drop_collection(map() | Connection.t(), String.t() | module()) :: - {:ok, OpenApiTypesense.CollectionResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def drop_collection(name, opts) when is_list(opts) do - Connection.new() |> drop_collection(name, opts) - end + ## Options - def drop_collection(conn, name) do - drop_collection(conn, name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [drop_collection/3](`drop_collection/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.drop_collection("persons", conn: conn) - ```elixir - ExTypesense.drop_collection(%{api_key: xyz, host: ...}, "persons", []) + iex> ExTypesense.drop_collection("persons", conn: conn) - ExTypesense.drop_collection(OpenApiTypesense.Connection.new(), MyModule.Accounts.User, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.drop_collection(MyModule.Accounts.User, opts) """ @doc since: "1.0.0" - @spec drop_collection(map() | Connection.t(), String.t() | module()) :: + @spec drop_collection(String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def drop_collection(conn, module, opts) when is_atom(module) do + def drop_collection(module, opts) when is_atom(module) do name = module.__schema__(:source) - drop_collection(conn, name, opts) + drop_collection(name, opts) end - def drop_collection(conn, name, opts) do - OpenApiTypesense.Collections.delete_collection(conn, name, opts) + def drop_collection(name, opts) when is_binary(name) do + OpenApiTypesense.Collections.delete_collection(name, opts) end @doc """ List all aliases and the corresponding collections that they map to. + + ## Examples + iex> ExTypesense.list_collection_aliases() """ @doc since: "1.0.0" @spec list_collection_aliases :: {:ok, OpenApiTypesense.CollectionAliasesResponse.t()} | :error @@ -543,43 +437,32 @@ defmodule ExTypesense.Collection do @doc """ Same as [list_collection_aliases/0](`list_collection_aliases/0`) - ```elixir - ExTypesense.list_collection_aliases([]) - - ExTypesense.list_collection_aliases(%{api_key: xyz, host: ...}) - - ExTypesense.list_collection_aliases(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec list_collection_aliases(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.CollectionAliasesResponse.t()} | :error - def list_collection_aliases(opts) when is_list(opts) do - Connection.new() |> list_collection_aliases(opts) - end + ## Options - def list_collection_aliases(conn) do - list_collection_aliases(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_collection_aliases/1](`list_collection_aliases/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_collection_aliases(conn: conn) - ```elixir - ExTypesense.list_collection_aliases(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_collection_aliases(conn: conn) - ExTypesense.list_collection_aliases(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.list_collection_aliases(opts) """ @doc since: "1.0.0" - @spec list_collection_aliases(map() | Connection.t(), keyword()) :: + @spec list_collection_aliases(keyword()) :: {:ok, OpenApiTypesense.CollectionAliasesResponse.t()} | :error - def list_collection_aliases(conn, opts) do - OpenApiTypesense.Collections.get_aliases(conn, opts) + def list_collection_aliases(opts) do + OpenApiTypesense.Collections.get_aliases(opts) end @doc """ Get a specific collection by alias. + + ## Examples + iex> ExTypesense.get_collection_alias("persons_sept_8_2019") """ @doc since: "1.0.0" @spec get_collection_alias(String.t() | module()) :: @@ -591,47 +474,30 @@ defmodule ExTypesense.Collection do @doc """ Same as [get_collection_alias/1](`get_collection_alias/1`) - ```elixir - ExTypesense.get_collection_alias("persons_sept_8_2019", []) - - ExTypesense.get_collection_alias(%{api_key: xyz, host: ...}, "persons_sept_8_2019") - - ExTypesense.get_collection_alias(OpenApiTypesense.Connection.new(), "persons_sept_8_2019") - ``` - """ - @doc since: "1.0.0" - @spec get_collection_alias( - map() | Connection.t() | String.t() | module(), - String.t() | module() | keyword() - ) :: - {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_collection_alias(alias_name, opts) when is_list(opts) do - Connection.new() |> get_collection_alias(alias_name, opts) - end + ## Options - def get_collection_alias(conn, alias_name) do - get_collection_alias(conn, alias_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_collection_alias/2](`get_collection_alias/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_collection_alias("persons_sept_8_2019", conn: conn) - ```elixir - ExTypesense.get_collection_alias(%{api_key: xyz, host: ...}, "persons_sept_8_2019", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_collection_alias("persons_sept_8_2019", conn: conn) - ExTypesense.get_collection_alias(OpenApiTypesense.Connection.new(), "persons_sept_8_2019", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_collection_alias("persons_sept_8_2019", opts) """ @doc since: "1.0.0" - @spec get_collection_alias(map() | Connection.t(), String.t() | module(), keyword()) :: + @spec get_collection_alias(String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_collection_alias(conn, module, opts) when is_atom(module) do + def get_collection_alias(module, opts) when is_atom(module) do alias_name = module.__schema__(:source) - get_collection_alias(conn, alias_name, opts) + get_collection_alias(alias_name, opts) end - def get_collection_alias(conn, alias_name, opts) do - OpenApiTypesense.Collections.get_alias(conn, alias_name, opts) + def get_collection_alias(alias_name, opts) when is_binary(alias_name) do + OpenApiTypesense.Collections.get_alias(alias_name, opts) end @doc """ @@ -643,6 +509,9 @@ defmodule ExTypesense.Collection do it without any changes to your code. `collection_name` can either be a string or module name + + ## Examples + iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", "persons") """ @doc since: "1.0.0" @spec upsert_collection_alias(String.t(), String.t() | module()) :: @@ -654,59 +523,39 @@ defmodule ExTypesense.Collection do @doc """ Same as [upsert_collection_alias/2](`upsert_collection_alias/2`) - ```elixir - ExTypesense.upsert_collection_alias("persons_sept_8_2019", "persons", []) - - ExTypesense.upsert_collection_alias(%{api_key: xyz, host: ...}, "persons_sept_8_2019", "persons") - - ExTypesense.upsert_collection_alias(OpenApiTypesense.Connection.new(), "persons_sept_8_2019", MyModule.Accounts.Person) - ``` - """ - @doc since: "1.0.0" - @spec upsert_collection_alias( - map() | Connection.t() | String.t(), - String.t() | module(), - String.t() | module() | keyword() - ) :: - {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_collection_alias(alias_name, coll_name, opts) when is_list(opts) do - Connection.new() |> upsert_collection_alias(alias_name, coll_name, opts) - end + ## Options - def upsert_collection_alias(conn, alias_name, coll_name) do - upsert_collection_alias(conn, alias_name, coll_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [upsert_collection_alias/3](`upsert_collection_alias/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", "persons", conn: conn) - ```elixir - ExTypesense.upsert_collection_alias(%{api_key: xyz, host: ...}, "persons_sept_8_2019", "persons", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", MyModule.Accounts.Person, conn: conn) - ExTypesense.upsert_collection_alias(OpenApiTypesense.Connection.new(), "persons_sept_8_2019", MyModule.Accounts.Person, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", "persons", opts) """ @doc since: "1.0.0" - @spec upsert_collection_alias( - map() | Connection.t(), - String.t(), - String.t() | module(), - keyword() - ) :: + @spec upsert_collection_alias(String.t(), String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_collection_alias(conn, alias_name, module, opts) when is_atom(module) do + def upsert_collection_alias(alias_name, module, opts) when is_atom(module) do collection_name = module.__schema__(:source) - upsert_collection_alias(conn, alias_name, collection_name, opts) + upsert_collection_alias(alias_name, collection_name, opts) end - def upsert_collection_alias(conn, alias_name, coll_name, opts) do + def upsert_collection_alias(alias_name, coll_name, opts) when is_binary(coll_name) do body = %{"collection_name" => coll_name} - OpenApiTypesense.Collections.upsert_alias(conn, alias_name, body, opts) + OpenApiTypesense.Collections.upsert_alias(alias_name, body, opts) end @doc """ Deletes a collection alias. The collection itself is not affected by this action. + + ## Examples + iex> ExTypesense.delete_collection_alias("persons_sept_8_2019") """ @doc since: "1.0.0" @spec delete_collection_alias(String.t()) :: @@ -718,38 +567,24 @@ defmodule ExTypesense.Collection do @doc """ Same as [delete_collection_alias/1](`delete_collection_alias/1`) - ```elixir - ExTypesense.delete_collection_alias("persons_sept_8_2019", []) - - ExTypesense.delete_collection_alias(%{api_key: xyz, host: ...}, "persons_sept_8_2019") - - ExTypesense.delete_collection_alias(OpenApiTypesense.Connection.new(), "persons_sept_8_2019") - ``` - """ - @doc since: "1.0.0" - @spec delete_collection_alias(map() | Connection.t(), String.t(), keyword()) :: - {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_collection_alias(alias_name, opts) when is_list(opts) do - Connection.new() |> delete_collection_alias(alias_name, opts) - end + ## Options - def delete_collection_alias(conn, alias_name) do - delete_collection_alias(conn, alias_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_collection_alias/2](`delete_collection_alias/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_collection_alias("persons_sept_8_2019", conn: conn) - ```elixir - ExTypesense.delete_collection_alias(%{api_key: xyz, host: ...}, "persons_sept_8_2019", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_collection_alias("persons_sept_8_2019", conn: conn) - ExTypesense.delete_collection_alias(OpenApiTypesense.Connection.new(), "persons_sept_8_2019", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_collection_alias("persons_sept_8_2019", opts) """ @doc since: "1.0.0" - @spec delete_collection_alias(map() | Connection.t(), String.t(), keyword()) :: + @spec delete_collection_alias(String.t(), keyword()) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_collection_alias(conn, alias_name, opts) do - OpenApiTypesense.Collections.delete_alias(conn, alias_name, opts) + def delete_collection_alias(alias_name, opts) do + OpenApiTypesense.Collections.delete_alias(alias_name, opts) end end diff --git a/lib/ex_typesense/conversation.ex b/lib/ex_typesense/conversation.ex index 4b7dd6f..1bd8aee 100644 --- a/lib/ex_typesense/conversation.ex +++ b/lib/ex_typesense/conversation.ex @@ -9,8 +9,6 @@ defmodule ExTypesense.Conversation do More here: https://typesense.org/docs/latest/api/conversational-search-rag.html """ - alias OpenApiTypesense.Connection - @doc """ Create conversation model. @@ -42,41 +40,26 @@ defmodule ExTypesense.Conversation do @doc """ Same as [create_model/1](`create_model/1`) - ```elixir - ExTypesense.create_model(body, []) - - ExTypesense.create_model(%{api_key: xyz, host: ...}, body) - - ExTypesense.create_model(OpenApiTypesense.Connection.new(), body) - ``` - """ - @doc since: "1.0.0" - @spec create_model(map() | Connection.t(), map() | keyword()) :: - {:ok, OpenApiTypesense.ConversationModelSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def create_model(body, opts) when is_list(opts) do - Connection.new() |> create_model(body, opts) - end + ## Options - def create_model(conn, body) do - create_model(conn, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [create_model/2](`create_model/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.create_model(body, conn: conn) - ```elixir - ExTypesense.create_model(%{api_key: xyz, host: ...}, body, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.create_model(body, conn: conn) - ExTypesense.create_model(OpenApiTypesense.Connection.new(), body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.create_model(body, opts) """ @doc since: "1.0.0" - @spec create_model(map() | Connection.t(), map() | keyword()) :: + @spec create_model(map(), keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def create_model(conn, body, opts) do - OpenApiTypesense.Conversations.create_conversation_model(conn, body, opts) + def create_model(body, opts) do + OpenApiTypesense.Conversations.create_conversation_model(body, opts) end @doc """ @@ -91,39 +74,25 @@ defmodule ExTypesense.Conversation do @doc """ Same as [get_model/1](`get_model/1`) - ```elixir - ExTypesense.get_model("conv-model-1", []) - - ExTypesense.get_model(%{api_key: xyz, host: ...}, "conv-model-1") + ## Options - ExTypesense.get_model(OpenApiTypesense.Connection.new(), "conv-model-1") - ``` - """ - @doc since: "1.0.0" - @spec get_model(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error - def get_model(model_id, opts) when is_list(opts) do - Connection.new() |> get_model(model_id, opts) - end - - def get_model(conn, model_id) do - get_model(conn, model_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_model/2](`get_model/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_model("conv-model-1", conn: conn) - ```elixir - ExTypesense.get_model(%{api_key: xyz, host: ...}, "conv-model-1", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_model("conv-model-1", conn: conn) - ExTypesense.get_model(OpenApiTypesense.Connection.new(), "conv-model-1", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_model("conv-model-1", opts) """ @doc since: "1.0.0" - @spec get_model(map() | Connection.t(), String.t(), keyword()) :: + @spec get_model(String.t(), keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error - def get_model(conn, model_id, opts) do - OpenApiTypesense.Conversations.retrieve_conversation_model(conn, model_id, opts) + def get_model(model_id, opts) do + OpenApiTypesense.Conversations.retrieve_conversation_model(model_id, opts) end @doc """ @@ -151,43 +120,25 @@ defmodule ExTypesense.Conversation do @doc """ Same as [update_model/2](`update_model/2`) - ```elixir - ExTypesense.update_model(model_id, body, []) - - ExTypesense.update_model(%{api_key: xyz, host: ...}, model_id, body) - - ExTypesense.update_model(OpenApiTypesense.Connection.new(), model_id, body) - ``` - """ - @doc since: "1.0.0" - @spec update_model( - map() | Connection.t() | String.t(), - String.t() | map(), - map() | keyword() - ) :: - {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error - def update_model(model_id, body, opts) when is_list(opts) do - Connection.new() |> update_model(model_id, body, opts) - end + ## Options - def update_model(conn, model_id, body) do - update_model(conn, model_id, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [update_model/3](`update_model/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.update_model(model_id, body, conn: conn) - ```elixir - ExTypesense.update_model(%{api_key: xyz, host: ...}, model_id, body, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.update_model(model_id, body, conn: conn) - ExTypesense.update_model(OpenApiTypesense.Connection.new(), model_id, body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.update_model(model_id, body, opts) """ @doc since: "1.0.0" - @spec update_model(map() | Connection.t(), String.t(), map(), keyword()) :: + @spec update_model(String.t(), map(), keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error - def update_model(conn, model_id, body, opts) do - OpenApiTypesense.Conversations.update_conversation_model(conn, model_id, body, opts) + def update_model(model_id, body, opts) do + OpenApiTypesense.Conversations.update_conversation_model(model_id, body, opts) end @doc """ @@ -203,41 +154,26 @@ defmodule ExTypesense.Conversation do @doc """ Same as [list_models/0](`list_models/0`) - ```elixir - ExTypesense.list_models([]) - - ExTypesense.list_models(%{api_key: xyz, host: ...}) - - ExTypesense.list_models(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec list_models(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.ConversationModelSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def list_models(opts) when is_list(opts) do - Connection.new() |> list_models(opts) - end + ## Options - def list_models(conn) do - list_models(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_models/1](`list_models/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_models(conn: conn) - ```elixir - ExTypesense.list_models(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_models(conn: conn) - ExTypesense.list_models(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.list_models(opts) """ @doc since: "1.0.0" - @spec list_models(map() | Connection.t(), keyword()) :: + @spec list_models(keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def list_models(conn, opts) do - OpenApiTypesense.Conversations.retrieve_all_conversation_models(conn, opts) + def list_models(opts) do + OpenApiTypesense.Conversations.retrieve_all_conversation_models(opts) end @doc """ @@ -252,38 +188,24 @@ defmodule ExTypesense.Conversation do @doc """ Same as [delete_model/1](`delete_model/1`) - ```elixir - ExTypesense.delete_model(model_id, []) - - ExTypesense.delete_model(%{api_key: xyz, host: ...}, model_id) - - ExTypesense.delete_model(OpenApiTypesense.Connection.new(), model_id) - ``` - """ - @doc since: "1.0.0" - @spec delete_model(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error - def delete_model(model_id, opts) when is_list(opts) do - Connection.new() |> delete_model(model_id, opts) - end + ## Options - def delete_model(conn, model_id) do - delete_model(conn, model_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_model/2](`delete_model/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_model(model_id, conn: conn) - ```elixir - ExTypesense.delete_model(%{api_key: xyz, host: ...}, model_id, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_model(model_id, conn: conn) - ExTypesense.delete_model(OpenApiTypesense.Connection.new(), model_id, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_model(model_id, opts) """ @doc since: "1.0.0" - @spec delete_model(map() | Connection.t(), String.t(), keyword()) :: + @spec delete_model(String.t(), keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error - def delete_model(conn, model_id, opts) do - OpenApiTypesense.Conversations.delete_conversation_model(conn, model_id, opts) + def delete_model(model_id, opts) do + OpenApiTypesense.Conversations.delete_conversation_model(model_id, opts) end end diff --git a/lib/ex_typesense/curation.ex b/lib/ex_typesense/curation.ex index 8aedf43..45ccf1d 100644 --- a/lib/ex_typesense/curation.ex +++ b/lib/ex_typesense/curation.ex @@ -13,8 +13,6 @@ defmodule ExTypesense.Curation do More here: https://typesense.org/docs/latest/api/curation.html#create-or-update-an-override """ - alias OpenApiTypesense.Connection - @doc """ Retrieve the details of a search override, given its id. """ @@ -28,53 +26,30 @@ defmodule ExTypesense.Curation do @doc """ Same as [get_override/2](`get_override/2`) - ```elixir - ExTypesense.get_override("helmets", "custom-helmet", []) - - ExTypesense.get_override(%{api_key: xyz, host: ...}, "helmets", "custom-helmet") - - ExTypesense.get_override(OpenApiTypesense.Connection.new(), MyApp.Wearables.Helmet, "custom-helmet") - ``` - """ - @doc since: "1.0.0" - @spec get_override( - map() | Connection.t() | String.t() | module(), - String.t() | module(), - String.t() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchOverride.t()} | :error - def get_override(coll_name, override_id, opts) when is_list(opts) do - Connection.new() |> get_override(coll_name, override_id, opts) - end + ## Options - def get_override(conn, coll_name, override_id) do - get_override(conn, coll_name, override_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_override/3](`get_override/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_override("helmets", "custom-helmet", conn: conn) - ```elixir - ExTypesense.get_override(%{api_key: xyz, host: ...}, "helmets", "custom-helmet", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_override("helmets", "custom-helmet", conn: conn) - ExTypesense.get_override(OpenApiTypesense.Connection.new(), MyApp.Wearables.Helmet, "custom-helmet", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_override(MyApp.Wearables.Helmet, "custom-helmet", opts) """ @doc since: "1.0.0" - @spec get_override( - map() | Connection.t(), - String.t() | module(), - String.t(), - keyword() - ) :: + @spec get_override(String.t() | module(), String.t(), keyword()) :: {:ok, OpenApiTypesense.SearchOverride.t()} | :error - def get_override(conn, module, override_id, opts) when is_atom(module) do + def get_override(module, override_id, opts) when is_atom(module) do coll_name = module.__schema__(:source) - get_override(conn, coll_name, override_id, opts) + get_override(coll_name, override_id, opts) end - def get_override(conn, coll_name, override_id, opts) do - OpenApiTypesense.Override.get_search_override(conn, coll_name, override_id, opts) + def get_override(coll_name, override_id, opts) when is_binary(coll_name) do + OpenApiTypesense.Override.get_search_override(coll_name, override_id, opts) end @doc """ @@ -108,55 +83,30 @@ defmodule ExTypesense.Curation do @doc """ Same as [upsert_override/3](`upsert_override/3`) - ```elixir - ExTypesense.upsert_override("helmets", "custom-helmet", body, []) - - ExTypesense.upsert_override(%{api_key: xyz, host: ...}, "helmets", "custom-helmet", body) - - ExTypesense.upsert_override(OpenApiTypesense.Connection.new(), MyApp.Wearables.Helmet, "custom-helmet", body) - ``` - """ - @doc since: "1.0.0" - @spec upsert_override( - map() | Connection.t() | String.t() | module(), - String.t() | module(), - String.t() | map(), - map() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchOverride.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_override(coll_name, override_id, body, opts) when is_list(opts) do - Connection.new() |> upsert_override(coll_name, override_id, body, opts) - end + ## Options - def upsert_override(conn, coll_name, override_id, body) do - upsert_override(conn, coll_name, override_id, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [upsert_override/4](`upsert_override/4`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.upsert_override("helmets", "custom-helmet", body, conn: conn) - ```elixir - ExTypesense.upsert_override(%{api_key: xyz, host: ...}, "helmets", "custom-helmet", body, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.upsert_override("helmets", "custom-helmet", body, conn: conn) - ExTypesense.upsert_override(OpenApiTypesense.Connection.new(), MyApp.Wearables.Helmet, "custom-helmet", body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.upsert_override(MyApp.Wearables.Helmet, "custom-helmet", body, opts) """ @doc since: "1.0.0" - @spec upsert_override( - map() | Connection.t(), - String.t() | module(), - String.t(), - map(), - keyword() - ) :: + @spec upsert_override(String.t() | module(), String.t(), map(), keyword()) :: {:ok, OpenApiTypesense.SearchOverride.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_override(conn, module, override_id, body, opts) when is_atom(module) do + def upsert_override(module, override_id, body, opts) when is_atom(module) do coll_name = module.__schema__(:source) - upsert_override(conn, coll_name, override_id, body, opts) + upsert_override(coll_name, override_id, body, opts) end - def upsert_override(conn, coll_name, override_id, body, opts) do - OpenApiTypesense.Curation.upsert_search_override(conn, coll_name, override_id, body, opts) + def upsert_override(coll_name, override_id, body, opts) when is_binary(coll_name) do + OpenApiTypesense.Curation.upsert_search_override(coll_name, override_id, body, opts) end @doc """ @@ -183,47 +133,30 @@ defmodule ExTypesense.Curation do @doc """ Same as [list_overrides/1](`list_overrides/1`). - ```elixir - ExTypesense.list_overrides("persons", limit: 10) - - ExTypesense.list_overrides(%{api_key: xyz, host: ...}, "persons") - - ExTypesense.list_overrides(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person) - ``` - """ - @doc since: "1.0.0" - @spec list_overrides( - map() | Connection.t() | String.t() | module(), - String.t() | module() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchOverridesResponse.t()} | :error - def list_overrides(coll_name, opts) when is_list(opts) do - Connection.new() |> list_overrides(coll_name, opts) - end + ## Options - def list_overrides(conn, coll_name) do - list_overrides(conn, coll_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_overrides/2](`list_overrides/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_overrides("persons", limit: 10, conn: conn) - ```elixir - ExTypesense.list_overrides(%{api_key: xyz, host: ...}, "persons", limit: 10) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_overrides("persons", conn: conn) - ExTypesense.list_overrides(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.list_overrides(MyApp.Accounts.Person, opts) """ @doc since: "1.0.0" - @spec list_overrides(map() | Connection.t(), String.t() | module(), keyword()) :: + @spec list_overrides(String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.SearchOverridesResponse.t()} | :error - def list_overrides(conn, module, opts) when is_atom(module) do + def list_overrides(module, opts) when is_atom(module) do coll_name = module.__schema__(:source) - list_overrides(conn, coll_name, opts) + list_overrides(coll_name, opts) end - def list_overrides(conn, coll_name, opts) do - OpenApiTypesense.Curation.get_search_overrides(conn, coll_name, opts) + def list_overrides(coll_name, opts) when is_binary(coll_name) do + OpenApiTypesense.Curation.get_search_overrides(coll_name, opts) end @doc """ @@ -240,54 +173,30 @@ defmodule ExTypesense.Curation do @doc """ Same as [delete_override/2](`delete_override/2`) - ```elixir - ExTypesense.delete_override("persons", "person-override", []) - - ExTypesense.delete_override(%{api_key: xyz, host: ...}, "persons", "person-override") - - ExTypesense.delete_override(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person, "person-override") - ``` - """ - @doc since: "1.0.0" - @spec delete_override( - map() | Connection.t() | String.t() | module(), - String.t() | module(), - String.t() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchOverrideDeleteResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_override(coll_name, override_id, opts) when is_list(opts) do - Connection.new() |> delete_override(coll_name, override_id, opts) - end + ## Options - def delete_override(conn, coll_name, override_id) do - delete_override(conn, coll_name, override_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_override/3](`delete_override/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_override("persons", "person-override", conn: conn) - ```elixir - ExTypesense.delete_override(%{api_key: xyz, host: ...}, "persons", "person-override", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_override("persons", "person-override", conn: conn) - ExTypesense.delete_override(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person, "person-override", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_override(MyApp.Accounts.Person, "person-override", opts) """ @doc since: "1.0.0" - @spec delete_override( - map() | Connection.t(), - String.t() | module(), - String.t(), - keyword() - ) :: + @spec delete_override(String.t() | module(), String.t(), keyword()) :: {:ok, OpenApiTypesense.SearchOverrideDeleteResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_override(conn, module, override_id, opts) when is_atom(module) do + def delete_override(module, override_id, opts) when is_atom(module) do coll_name = module.__schema__(:source) - delete_override(conn, coll_name, override_id, opts) + delete_override(coll_name, override_id, opts) end - def delete_override(conn, coll_name, override_id, opts) do - OpenApiTypesense.Curation.delete_search_override(conn, coll_name, override_id, opts) + def delete_override(coll_name, override_id, opts) when is_binary(coll_name) do + OpenApiTypesense.Curation.delete_search_override(coll_name, override_id, opts) end end diff --git a/lib/ex_typesense/debug.ex b/lib/ex_typesense/debug.ex index 842104e..e93ded5 100644 --- a/lib/ex_typesense/debug.ex +++ b/lib/ex_typesense/debug.ex @@ -5,8 +5,6 @@ defmodule ExTypesense.Debug do Provides API endpoint related to debug """ - alias OpenApiTypesense.Connection - @doc """ Print debugging information """ @@ -19,34 +17,22 @@ defmodule ExTypesense.Debug do @doc """ Same as [debug/0](`debug/0`) - ```elixir - ExTypesense.debug([]) - - ExTypesense.debug(%{api_key: xyz, host: ...}) + ## Options - ExTypesense.debug(OpenApiTypesense.Connection.new()) - ``` - """ - @spec debug(map() | Connection.t() | keyword()) :: {:ok, map()} | :error - def debug(opts) when is_list(opts) do - Connection.new() |> debug() - end + * `conn`: The custom connection map or struct you passed - def debug(conn) do - debug(conn, []) - end - - @doc """ - Same as [debug/1](`debug/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.debug(conn: conn) - ```elixir - ExTypesense.debug(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.debug(conn: conn) - ExTypesense.debug(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.debug(opts) """ - @spec debug(map() | Connection.t(), keyword()) :: {:ok, map()} | :error - def debug(conn, opts) do - OpenApiTypesense.Debug.debug(conn, opts) + @spec debug(keyword()) :: {:ok, map()} | :error + def debug(opts) do + OpenApiTypesense.Debug.debug(opts) end end diff --git a/lib/ex_typesense/document.ex b/lib/ex_typesense/document.ex index 13c1e9e..a2e57d8 100644 --- a/lib/ex_typesense/document.ex +++ b/lib/ex_typesense/document.ex @@ -49,50 +49,30 @@ defmodule ExTypesense.Document do @doc """ Same as [get_document/2](`get_document/2`). - ```elixir - ExTypesense.get_document("persons", "88", exclude_fields: "name") - - ExTypesense.get_document(MyModule.Accounts.Person, "88", exclude_fields: "name") - - ExTypesense.get_document(%{api_key: xyz, host: ...}, MyModule.Accounts.Person, "88") - - ExTypesense.get_document(OpenApiTypesense.Connection.new(), MyModule.Accounts.Person, "88") - ``` - """ - @doc since: "1.0.0" - @spec get_document( - map() | Connection.t() | module() | String.t(), - String.t() | module(), - String.t() | keyword() - ) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_document(collection_name, document_id, opts) when is_list(opts) do - Connection.new() |> get_document(collection_name, document_id, opts) - end + ## Options - def get_document(conn, coll_name, doc_id) do - get_document(conn, coll_name, doc_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_document/3](`get_document/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_document("persons", "88", exclude_fields: "name", conn: conn) - ```elixir - ExTypesense.get_document(%{api_key: xyz, host: ...}, "persons", "88", exclude_fields: "name") + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_document(MyModule.Accounts.Person, "88", exclude_fields: "name", conn: conn) - ExTypesense.get_document(OpenApiTypesense.Connection.new(), MyModule.Accounts.Person, "88", exclude_fields: "name") - ``` + iex> opts = [exclude_fields: "name", conn: conn] + iex> ExTypesense.get_document(MyModule.Accounts.Person, "88", opts) """ @doc since: "1.0.0" - @spec get_document(map() | Connection.t(), module() | String.t(), String.t(), keyword()) :: + @spec get_document(module() | String.t(), String.t(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_document(conn, module, doc_id, opts) when is_atom(module) do + def get_document(module, doc_id, opts) when is_atom(module) do collection_name = module.__schema__(:source) - get_document(conn, collection_name, doc_id, opts) + get_document(collection_name, doc_id, opts) end - def get_document(conn, coll_name, doc_id, opts) do - OpenApiTypesense.Documents.get_document(conn, coll_name, doc_id, opts) + def get_document(coll_name, doc_id, opts) when is_binary(coll_name) do + OpenApiTypesense.Documents.get_document(coll_name, doc_id, opts) end @doc """ @@ -151,56 +131,31 @@ defmodule ExTypesense.Document do @doc """ Same as [import_documents/2](`import_documents/2`). - ```elixir - ExTypesense.import_documents("users", documents, []) - - ExTypesense.import_documents(MyApp.Accounts.User, documents, []) - - ExTypesense.import_documents(%{api_key: xyz, host: ...}, MyApp.Accounts.User, structs) - - ExTypesense.import_documents(OpenApiTypesense.Connection.new(), "users", [%MyApp.Accounts.User{}]) - - ExTypesense.import_documents(OpenApiTypesense.Connection.new(), "users", documents) - ``` - """ - @doc since: "1.0.0" - @spec import_documents( - map() | Connection.t() | String.t() | module(), - String.t() | [struct()] | [map()], - [struct()] | [map()] | keyword() - ) :: - {:ok, [map()]} | {:error, OpenApiTypesense.ApiResponse.t()} - def import_documents(conn, coll_name, documents) when is_map(conn) and is_list(documents) do - import_documents(conn, coll_name, documents, []) - end + ## Options - def import_documents(coll_name, docs, opts) when is_list(docs) and is_list(opts) do - Connection.new() |> import_documents(coll_name, docs, opts) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [import_documents/3](`import_documents/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.import_documents("users", documents, conn: conn) + iex> ExTypesense.import_documents(MyApp.Accounts.User, documents, conn: conn) - ```elixir - ExTypesense.import_documents(%{api_key: xyz, host: ...}, "companies", documents, batch_size: 100) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.import_documents(MyApp.Accounts.User, structs, conn: conn) + iex> ExTypesense.import_documents("users", [%MyApp.Accounts.User{}], conn: conn) - ExTypesense.import_documents(OpenApiTypesense.Connection.new(), MyApp.Account.Person, structs, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.import_documents("users", documents, opts) """ @doc since: "1.0.0" - @spec import_documents( - map() | Connection.t(), - String.t() | module(), - [struct()] | [map()], - keyword() - ) :: + @spec import_documents(String.t() | module(), [struct()] | [map()], keyword()) :: {:ok, [map()]} | {:error, OpenApiTypesense.ApiResponse.t()} - def import_documents(conn, module, docs, opts) when is_atom(module) do + def import_documents(module, docs, opts) when is_atom(module) do coll_name = module.__schema__(:source) - import_documents(conn, coll_name, docs, opts) + import_documents(coll_name, docs, opts) end - def import_documents(conn, coll_name, [struct | _] = structs, opts) + def import_documents(coll_name, [struct | _] = structs, opts) when structs != [] and is_struct(struct) do body = Enum.map(structs, fn record -> @@ -209,11 +164,11 @@ defmodule ExTypesense.Document do |> Map.drop([:id, :__meta__, :__struct__]) end) - import_documents(conn, coll_name, body, opts) + import_documents(coll_name, body, opts) end - def import_documents(conn, coll_name, docs, opts) do - OpenApiTypesense.Documents.import_documents(conn, coll_name, docs, opts) + def import_documents(coll_name, docs, opts) do + OpenApiTypesense.Documents.import_documents(coll_name, docs, opts) end @doc """ @@ -262,108 +217,67 @@ defmodule ExTypesense.Document do iex> ExTypesense.index_document(post) """ @doc since: "1.0.0" - @spec index_document(struct()) :: + @spec index_document(map() | struct()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def index_document(document) when not is_struct(document) and is_map(document) do - collection_name = Map.get(document, "collection_name") || Map.get(document, :collection_name) - index_document(collection_name, document) - end - - def index_document(record) do - index_document(record, []) + def index_document(document) do + index_document(document, []) end @doc """ Same as [index_document/1](`index_document/1`). - ```elixir - ExTypesense.index_document("persons", document) - - ExTypesense.index_document(%{api_key: xyz, host: ...}, document) - - ExTypesense.index_document(OpenApiTypesense.Connection.new(), struct) - - ExTypesense.index_document(struct, action: "upsert") - ``` - """ - @spec index_document( - map() | Connection.t() | String.t() | struct(), - map() | struct() | keyword() - ) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def index_document(document, opts) - when not is_struct(document) and is_map(document) and is_list(opts) do - collection_name = Map.get(document, "collection_name") || Map.get(document, :collection_name) - index_document(collection_name, document, opts) - end - - def index_document(record, opts) when is_struct(record) and is_list(opts) do - Connection.new() |> index_document(record, opts) - end - - def index_document(conn_or_coll_name, record_or_document) do - index_document(conn_or_coll_name, record_or_document, []) - end + ## Options - @doc """ - Same as [index_document/2](`get_document/2`). + * `conn`: The custom connection map or struct you passed - ```elixir - ExTypesense.index_document("persons", document, action: "update") + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.index_document("persons", document, conn: conn) - ExTypesense.index_document(%{api_key: xyz, host: ...}, "persons", document) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.index_document(document, conn: conn) + iex> ExTypesense.index_document(struct, conn: conn) - ExTypesense.index_document(OpenApiTypesense.Connection.new(), %MyApp.Accounts.Person{...}, action: "upsert") - ``` + iex> opts = [action: "upsert", conn: conn] + iex> ExTypesense.index_document(struct, opts) """ - @doc since: "1.0.0" - @spec index_document( - map() | Connection.t() | String.t(), - String.t() | map() | struct(), - map() | keyword() - ) :: + @spec index_document(map() | struct() | String.t(), map() | keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def index_document(coll_name, body, opts) when is_binary(coll_name) and is_list(opts) do - Connection.new() |> index_document(coll_name, body, opts) + def index_document(record, opts) when is_struct(record) do + collection_name = record.__struct__.__schema__(:source) + document = Map.from_struct(record) |> Map.drop([:id, :__meta__, :__struct__]) + OpenApiTypesense.Documents.index_document(collection_name, document, opts) end - def index_document(conn, document, opts) - when not is_struct(document) and is_map(document) and is_list(opts) do + def index_document(document, opts) when is_map(document) do collection_name = Map.get(document, "collection_name") || Map.get(document, :collection_name) - index_document(conn, collection_name, document, opts) - end - - def index_document(conn, record, opts) when is_struct(record) do - collection_name = record.__struct__.__schema__(:source) - record = Map.from_struct(record) |> Map.drop([:id, :__meta__, :__struct__]) - OpenApiTypesense.Documents.index_document(conn, collection_name, record, opts) + index_document(collection_name, document, opts) end - def index_document(conn, collection_name, body) do - index_document(conn, collection_name, body, []) + def index_document(collection_name, document) do + index_document(collection_name, document, []) end @doc """ - Same as [get_document/3](`get_document/3`) but passes another connection. + Same as [index_document/2](`get_document/2`). + + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.index_document("persons", document, action: "update", conn: conn) - ```elixir - ExTypesense.index_document(%{api_key: xyz, host: ...}, "persons", documents, action: "update") + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.index_document("persons", document, conn: conn) - ExTypesense.index_document(OpenApiTypesense.Connection.new(), "persons", documents, []) - ``` + iex> opts = [action: "upsert", conn: conn] + iex> ExTypesense.index_document("persons", document, opts) """ @doc since: "1.0.0" - @spec index_document( - map() | Connection.t(), - String.t(), - map(), - keyword() - ) :: + @spec index_document(String.t(), map(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def index_document(conn, collection_name, body, opts) + def index_document(collection_name, body, opts) when is_binary(collection_name) and is_map(body) and is_list(opts) do body = Map.drop(body, ["collection_name", :collection_name]) - OpenApiTypesense.Documents.index_document(conn, collection_name, body, opts) + OpenApiTypesense.Documents.index_document(collection_name, body, opts) end @doc """ @@ -422,7 +336,7 @@ defmodule ExTypesense.Document do } """ @doc since: "1.0.0" - @spec update_document(struct() | map()) :: + @spec update_document(map() | struct()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} def update_document(document) do update_document(document, []) @@ -431,49 +345,39 @@ defmodule ExTypesense.Document do @doc """ Same as [update_document/1](`update_document/1`). - ```elixir - ExTypesense.update_document(document, []) - ExTypesense.update_document(%{api_key: xyz, host: ...}, %User{...}) - ExTypesense.update_document(OpenApiTypesense.Connection.new(), document) - ``` - """ - @doc since: "1.0.0" - @spec update_document(map() | Connection.t() | struct() | map(), struct() | map() | keyword()) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def update_document(document, opts) when is_list(opts) do - Connection.new() |> update_document(document, opts) - end + ## Options - def update_document(conn, document) do - update_document(conn, document, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [update_document/2](`update_document/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.update_document(document, conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.update_document(%User{...}, conn: conn) - ```elixir - ExTypesense.update_document(%{api_key: xyz, host: ...}, document, []) - ExTypesense.update_document(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [dirty_values: "reject", conn: conn] + iex> ExTypesense.update_document(document, opts) """ @doc since: "1.0.0" - @spec update_document(map() | Connection.t(), map() | struct(), keyword()) :: + @spec update_document(map() | struct(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def update_document(conn, record, opts) when is_struct(record) do + def update_document(record, opts) when is_struct(record) do coll_name = record.__struct__.__schema__(:source) field_name = coll_name <> "_id" id = Map.get(record, String.to_existing_atom(field_name)) opts = Keyword.put_new(opts, :filter_by, "#{field_name}:#{id}") body = record |> Map.from_struct() |> Map.drop([:id, :__meta__, :__struct__]) - update_documents_by_query(conn, coll_name, body, opts) + update_documents_by_query(coll_name, body, opts) end - def update_document(conn, document, opts) when is_map(document) do + def update_document(document, opts) when is_map(document) do coll_name = Map.get(document, "collection_name") || Map.get(document, :collection_name) doc_id = Map.get(document, "id") || Map.get(document, :id) document = Map.drop(document, ["collection_name", :collection_name]) - OpenApiTypesense.Documents.update_document(conn, coll_name, doc_id, document, opts) + + OpenApiTypesense.Documents.update_document(coll_name, doc_id, document, opts) end @doc """ @@ -489,6 +393,7 @@ defmodule ExTypesense.Document do ## Options + * `conn`: The custom connection map or struct you passed * `filter_by`: Filter results by a particular value(s) or logical expressions. multiple conditions with &&. * `action`: Additional action to perform @@ -498,41 +403,22 @@ defmodule ExTypesense.Document do ...> "tag" => "large", ...> } - iex> opts = [filter_by; "num_employees:>1000"] - + iex> conn = %{api_key: xyz, host: ...} + iex> opts = [filter_by: "num_employees:>1000", conn: conn] iex> ExTypesense.update_documents_by_query("companies", body, opts) - """ - @doc since: "1.0.0" - @spec update_documents_by_query(String.t() | module(), map(), keyword()) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def update_documents_by_query(collection_name, body, opts) do - Connection.new() |> update_documents_by_query(collection_name, body, opts) - end - @doc """ - Same as [update_documents_by_query/3](`update_documents_by_query/3`) but passes another connection. - - ```elixir - ExTypesense.update_documents_by_query(%{api_key: xyz, host: ...}, "companies", body, action: "upsert") - - ExTypesense.update_documents_by_query(OpenApiTypesense.Connection.new(), MyApp.Accounts.User, body, opts) - ``` + iex> ExTypesense.update_documents_by_query("companies", body, action: "upsert", conn: conn) """ @doc since: "1.0.0" - @spec update_documents_by_query( - map() | Connection.t(), - String.t() | module(), - map(), - keyword() - ) :: + @spec update_documents_by_query(String.t() | module(), map(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def update_documents_by_query(conn, module, body, opts) when is_atom(module) do + def update_documents_by_query(module, body, opts) when is_atom(module) do collection_name = module.__schema__(:source) - update_documents_by_query(conn, collection_name, body, opts) + update_documents_by_query(collection_name, body, opts) end - def update_documents_by_query(conn, collection_name, body, opts) do - OpenApiTypesense.Documents.update_documents(conn, collection_name, body, opts) + def update_documents_by_query(coll_name, body, opts) when is_binary(coll_name) do + OpenApiTypesense.Documents.update_documents(coll_name, body, opts) end @doc """ @@ -590,101 +476,78 @@ defmodule ExTypesense.Document do } """ @doc since: "1.0.0" - @spec delete_document(struct()) :: + @spec delete_document(map() | struct()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_document(record) when is_struct(record) do - delete_document(record, []) + def delete_document(document) do + delete_document(document, ignore_not_found: false) end @doc """ Same as [delete_document/1](`delete_document/1`). - ```elixir - ExTypesense.delete_document("persons", "88") - - ExTypesense.delete_document(%{api_key: xyz, host: ...}, struct) - - ExTypesense.delete_document(OpenApiTypesense.Connection.new(), struct) - - ExTypesense.delete_document(struct, ignore_not_found: true) - ``` - """ - @doc since: "1.0.0" - @spec delete_document( - map() | Connection.t() | String.t(), - struct() | String.t() | keyword() - ) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_document(document, opts) when is_list(opts) do - Connection.new() |> delete_document(document, opts) - end + ## Options - def delete_document(conn, document) do - delete_document(conn, document, ignore_not_found: false) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_document/2](`delete_document/2`). - - ```elixir - ExTypesense.delete_document("persons", "88", ignore_not_found: true) + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_document(document, conn: conn) - ExTypesense.delete_document(%{api_key: xyz, host: ...}, struct, ignore_not_found: false) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_document(struct, conn: conn) - ExTypesense.delete_document(OpenApiTypesense.Connection.new(), "personse", "88") - ``` + iex> opts = [ignore_not_found: true, conn: conn] + iex> ExTypesense.delete_document(struct, opts) """ @doc since: "1.0.0" @spec delete_document( map() | Connection.t() | String.t(), - struct() | String.t(), String.t() | keyword() ) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_document(coll_name, doc_id, opts) - when is_binary(coll_name) and is_list(opts) do - Connection.new() |> delete_document(coll_name, doc_id, opts) - end - - def delete_document(conn, record, opts) when is_struct(record) do + def delete_document(record, opts) when is_struct(record) do coll_name = record.__struct__.__schema__(:source) field_name = coll_name <> "_id" id = Map.get(record, String.to_existing_atom(field_name)) opts = Keyword.put_new(opts, :filter_by, "#{field_name}:#{id}") - delete_documents_by_query(conn, coll_name, opts) + delete_documents_by_query(coll_name, opts) end - def delete_document(conn, document, opts) when is_map(document) do + def delete_document(document, opts) when is_map(document) do coll_name = Map.get(document, "collection_name") || Map.get(document, :collection_name) field_name = coll_name <> "_id" id = Map.get(document, field_name) || Map.get(document, String.to_existing_atom(field_name)) opts = Keyword.put_new(opts, :filter_by, "#{field_name}:#{id}") - delete_documents_by_query(conn, coll_name, opts) + delete_documents_by_query(coll_name, opts) end - def delete_document(conn, coll_name, doc_id) do - delete_document(conn, coll_name, doc_id, ignore_not_found: false) + def delete_document(coll_name, doc_id) do + opts = [ignore_not_found: false] + OpenApiTypesense.Documents.delete_document(coll_name, doc_id, opts) end @doc """ - Same as [delete_document/3](`delete_document/3`) but passes another connection. + Same as [delete_document/2](`delete_document/2`). + + ## Options - ```elixir - ExTypesense.delete_document(%{api_key: xyz, host: ...}, coll_name, doc_id, []) + * `conn`: The custom connection map or struct you passed - ExTypesense.delete_document(OpenApiTypesense.Connection.new(), coll_name, doc_id, []) - ``` + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_document("persons", "88", conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_document("persons", "88", conn: conn) + + iex> opts = [ignore_not_found: true, conn: conn] + iex> ExTypesense.delete_document("persons", "88", opts) """ @doc since: "1.0.0" - @spec delete_document( - map() | Connection.t(), - String.t(), - String.t(), - keyword() - ) :: + @spec delete_document(String.t(), String.t(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_document(conn, coll_name, doc_id, opts) when is_list(opts) do - OpenApiTypesense.Documents.delete_document(conn, coll_name, doc_id, opts) + def delete_document(coll_name, doc_id, opts) when is_binary(coll_name) and is_binary(doc_id) do + OpenApiTypesense.Documents.delete_document(coll_name, doc_id, opts) end @doc """ @@ -706,50 +569,31 @@ defmodule ExTypesense.Document do @doc """ Same as [export_documents/1](`export_documents/1`). - ```elixir - ExTypesense.export_documents("persons", opts) - - ExTypesense.export_documents(MyModule.Accounts.Person, opts) - - ExTypesense.export_documents(%{api_key: xyz, host: ...}, "persons") - - ExTypesense.export_documents(OpenApiTypesense.Connection.new(), MyModule.Accounts.Person) - ``` - """ - @doc since: "1.0.0" - @spec export_documents(String.t() | module(), keyword()) :: - {:ok, String.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def export_documents(collection_name, opts) when is_list(opts) do - Connection.new() |> export_documents(collection_name, opts) - end + ## Options - def export_documents(conn, collection_name) do - export_documents(conn, collection_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [export_documents/2](`export_documents/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.export_documents("persons", conn: conn) + iex> ExTypesense.export_documents(MyModule.Accounts.Person, conn: conn) - ```elixir - ExTypesense.export_documents(%{api_key: xyz, host: ...}, "persons", opts) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.export_documents("persons", conn: conn) - ExTypesense.export_documents(OpenApiTypesense.Connection.new(), MyModule.Accounts.Person, opts) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.export_documents(MyModule.Accounts.Person, opts) """ @doc since: "1.0.0" - @spec export_documents( - map() | Connection.t(), - String.t() | module(), - keyword() - ) :: + @spec export_documents(String.t() | module(), keyword()) :: {:ok, String.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def export_documents(conn, module, opts) when is_atom(module) do + def export_documents(module, opts) when is_atom(module) do collection_name = module.__schema__(:source) - export_documents(conn, collection_name, opts) + export_documents(collection_name, opts) end - def export_documents(conn, collection_name, opts) do - OpenApiTypesense.Documents.export_documents(conn, collection_name, opts) + def export_documents(coll_name, opts) when is_binary(coll_name) do + OpenApiTypesense.Documents.export_documents(coll_name, opts) end @doc """ @@ -757,6 +601,7 @@ defmodule ExTypesense.Document do ## Options + * `conn`: The custom connection map or struct you passed * `batch_size`: Batch size parameter controls the number of documents that should be deleted at a time. A larger value will speed up deletions, but will impact performance of other operations running on the server. @@ -782,36 +627,21 @@ defmodule ExTypesense.Document do iex> query = [filter_by: "num_employees:>100", batch_size: 100] iex> ExTypesense.delete_documents_by_query(Employee, query) {:ok, [...]} + + iex> conn = %{api_key: xyz, host: ...} + iex> opts = Keyword.put(query, :conn, conn) + iex> ExTypesense.delete_documents_by_query(Employee, opts) """ @doc since: "1.0.0" @spec delete_documents_by_query(String.t() | module(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_documents_by_query(collection_name, opts) when is_list(opts) do - Connection.new() |> delete_documents_by_query(collection_name, opts) - end - - @doc """ - Same as [delete_documents_by_query/2](`delete_documents_by_query/2`) but passes another connection. - - ```elixir - ExTypesense.delete_documents_by_query(%{api_key: xyz, host: ...}, "persons", opts) - - ExTypesense.delete_documents_by_query(OpenApiTypesense.Connection.new(), MyModule.Accounts.Person, opts) - ``` - """ - @doc since: "1.0.0" - @spec delete_documents_by_query( - map() | Connection.t(), - String.t() | module(), - keyword() - ) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_documents_by_query(conn, module, opts) when is_atom(module) do + def delete_documents_by_query(module, opts) when is_atom(module) do collection_name = module.__schema__(:source) - delete_documents_by_query(conn, collection_name, opts) + delete_documents_by_query(collection_name, opts) end - def delete_documents_by_query(conn, collection_name, opts) do - OpenApiTypesense.Documents.delete_documents(conn, collection_name, opts) + def delete_documents_by_query(coll_name, opts) when is_binary(coll_name) do + OpenApiTypesense.Documents.delete_documents(coll_name, opts) end @doc """ @@ -833,51 +663,30 @@ defmodule ExTypesense.Document do @doc """ Same as [delete_all_documents/1](`delete_all_documents/1`). - ```elixir - ExTypesense.delete_all_documents("persons", []) - - ExTypesense.delete_all_documents(%{api_key: xyz, host: ...}, "persons") - - ExTypesense.delete_all_documents(OpenApiTypesense.Connection.new(), MyModule.Accounts.Person) - ``` - """ - @doc since: "1.0.0" - @spec delete_all_documents( - map() | Connection.t() | module() | String.t(), - module() | String.t() | keyword() - ) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_all_documents(coll_name, opts) when is_list(opts) do - Connection.new() |> delete_all_documents(coll_name, opts) - end + ## Options - def delete_all_documents(conn, collection_name) do - delete_all_documents(conn, collection_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_all_documents/2](`delete_all_documents/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_all_documents("persons", conn: conn) - ```elixir - ExTypesense.delete_all_documents(%{api_key: xyz, host: ...}, "persons", []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_all_documents("persons", conn: conn) - ExTypesense.delete_all_documents(OpenApiTypesense.Connection.new(), MyModule.Accounts.Person, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_all_documents(MyModule.Accounts.Person, opts) """ @doc since: "1.0.0" - @spec delete_all_documents( - map() | Connection.t(), - module() | String.t(), - keyword() - ) :: + @spec delete_all_documents(module() | String.t(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_all_documents(conn, module, opts) when is_atom(module) do + def delete_all_documents(module, opts) when is_atom(module) do coll_name = module.__schema__(:source) - delete_all_documents(conn, coll_name, opts) + delete_all_documents(coll_name, opts) end - def delete_all_documents(conn, collection_name, opts) do + def delete_all_documents(coll_name, opts) when is_binary(coll_name) do opts = Keyword.put_new(opts, :filter_by, "id:!=''") - delete_documents_by_query(conn, collection_name, opts) + delete_documents_by_query(coll_name, opts) end end diff --git a/lib/ex_typesense/key.ex b/lib/ex_typesense/key.ex index 4525905..be41dd7 100644 --- a/lib/ex_typesense/key.ex +++ b/lib/ex_typesense/key.ex @@ -9,8 +9,6 @@ defmodule ExTypesense.Key do More here: https://typesense.org/docs/latest/api/api-keys.html """ - alias OpenApiTypesense.Connection - @doc """ Retrieve (metadata about) all keys. """ @@ -24,36 +22,25 @@ defmodule ExTypesense.Key do @doc """ Same as [get_key/1](`get_key/1`) - ```elixir - ExTypesense.get_key(6, []) - ExTypesense.get_key(%{api_key: xyz, host: ...}, 7) - ExTypesense.get_key(OpenApiTypesense.Connection.new(), 8) - ``` - """ - @doc since: "1.0.0" - @spec get_key(map() | Connection.t() | integer(), integer() | keyword()) :: - {:ok, OpenApiTypesense.ApiKey.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_key(key_id, opts) when is_list(opts) do - Connection.new() |> get_key(key_id, opts) - end + ## Options - def get_key(conn, key_id) do - get_key(conn, key_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_key/2](`get_key/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_key(6, conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_key(7, conn: conn) - ```elixir - ExTypesense.get_key(%{api_key: xyz, host: ...}, 7, []) - ExTypesense.get_key(OpenApiTypesense.Connection.new(), 8, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_key(8, opts) """ @doc since: "1.0.0" - @spec get_key(map() | Connection.t(), integer(), keyword()) :: + @spec get_key(integer(), keyword()) :: {:ok, OpenApiTypesense.ApiKey.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_key(conn, key_id, opts) do - OpenApiTypesense.Keys.get_key(conn, key_id, opts) + def get_key(key_id, opts) do + OpenApiTypesense.Keys.get_key(key_id, opts) end @doc """ @@ -70,38 +57,26 @@ defmodule ExTypesense.Key do @doc """ Same as [delete_key/1](`delete_key/1`) - ```elixir - ExTypesense.delete_key(6, []) - ExTypesense.delete_key(%{api_key: xyz, host: ...}, 7) - ExTypesense.delete_key(OpenApiTypesense.Connection.new(), 8) - ``` - """ - @doc since: "1.0.0" - @spec delete_key(map() | Connection.t() | integer(), integer() | keyword()) :: - {:ok, OpenApiTypesense.ApiKeyDeleteResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_key(key_id, opts) when is_list(opts) do - Connection.new() |> delete_key(key_id, opts) - end + ## Options - def delete_key(conn, key_id) do - delete_key(conn, key_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_key/2](`delete_key/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_key(6, conn: conn) - ```elixir - ExTypesense.delete_key(%{api_key: xyz, host: ...}, 7, []) - ExTypesense.delete_key(OpenApiTypesense.Connection.new(), 8, []) - ``` + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_key(7, conn: conn) + + iex> opts = [conn: conn] + iex> ExTypesense.delete_key(8, opts) """ @doc since: "1.0.0" - @spec delete_key(map() | Connection.t(), integer(), keyword()) :: + @spec delete_key(integer(), keyword()) :: {:ok, OpenApiTypesense.ApiKeyDeleteResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_key(conn, key_id, opts) do - OpenApiTypesense.Keys.delete_key(conn, key_id, opts) + def delete_key(key_id, opts) do + OpenApiTypesense.Keys.delete_key(key_id, opts) end @doc """ @@ -128,36 +103,25 @@ defmodule ExTypesense.Key do @doc """ Same as [create_key/1](`create_key/1`) - ```elixir - ExTypesense.create_key(body, []) - ExTypesense.create_key(%{api_key: xyz, host: ...}, body) - ExTypesense.create_key(OpenApiTypesense.Connection.new(), body) - ``` - """ - @doc since: "1.0.0" - @spec create_key(map() | Connection.t(), map() | keyword()) :: - {:ok, OpenApiTypesense.ApiKey.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def create_key(body, opts) when is_list(opts) do - Connection.new() |> create_key(body, opts) - end + ## Options - def create_key(conn, body) do - create_key(conn, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [create_key/2](`create_key/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.create_key(body, conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.create_key(body, conn: conn) - ```elixir - ExTypesense.create_key(%{api_key: xyz, host: ...}, body, []) - ExTypesense.create_key(OpenApiTypesense.Connection.new(), body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.create_key(body, opts) """ @doc since: "1.0.0" - @spec create_key(map() | Connection.t(), map(), keyword()) :: + @spec create_key(map(), keyword()) :: {:ok, OpenApiTypesense.ApiKey.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def create_key(conn, body, opts) do - OpenApiTypesense.Keys.create_key(conn, body, opts) + def create_key(body, opts) do + OpenApiTypesense.Keys.create_key(body, opts) end @doc """ @@ -172,35 +136,24 @@ defmodule ExTypesense.Key do @doc """ Same as [list_keys/0](`list_keys/0`) - ```elixir - ExTypesense.list_keys([]) - ExTypesense.list_keys(%{api_key: xyz, host: ...}) - ExTypesense.list_keys(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec list_keys(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.ApiKeysResponse.t()} | :error - def list_keys(opts) when is_list(opts) do - Connection.new() |> list_keys(opts) - end + ## Options - def list_keys(conn) do - list_keys(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_keys/1](`list_keys/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_keys(conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_keys(conn: conn) - ```elixir - ExTypesense.list_keys(%{api_key: xyz, host: ...}, []) - ExTypesense.list_keys(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.list_keys(opts) """ @doc since: "1.0.0" - @spec list_keys(map() | Connection.t() | keyword()) :: + @spec list_keys(keyword()) :: {:ok, OpenApiTypesense.ApiKeysResponse.t()} | :error - def list_keys(conn, opts) do - OpenApiTypesense.Keys.get_keys(conn, opts) + def list_keys(opts) do + OpenApiTypesense.Keys.get_keys(opts) end end diff --git a/lib/ex_typesense/preset.ex b/lib/ex_typesense/preset.ex index 6471a41..72286f7 100644 --- a/lib/ex_typesense/preset.ex +++ b/lib/ex_typesense/preset.ex @@ -29,36 +29,25 @@ defmodule ExTypesense.Preset do @doc """ Same as [get_preset/1](`get_preset/1`) - ```elixir - ExTypesense.get_preset("listing_view", []) - ExTypesense.get_preset(%{api_key: xyz, host: ...}, "listing_view") - ExTypesense.get_preset(OpenApiTypesense.Connection.new(), "listing_view") - ``` - """ - @doc since: "1.0.0" - @spec get_preset(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.PresetSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_preset(preset_id, opts) when is_list(opts) do - Connection.new() |> get_preset(preset_id, opts) - end + ## Options - def get_preset(conn, preset_id) do - get_preset(conn, preset_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_preset/2](`get_preset/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_preset("listing_view", conn: conn) - ```elixir - ExTypesense.get_preset(%{api_key: xyz, host: ...}, "listing_view", []) - ExTypesense.get_preset(OpenApiTypesense.Connection.new(), "listing_view", []) - ``` + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_preset("listing_view", conn: conn) + + iex> opts = [conn: conn] + iex> ExTypesense.get_preset("listing_view", opts) """ @doc since: "1.0.0" - @spec get_preset(map() | Connection.t(), String.t(), keyword()) :: + @spec get_preset(String.t(), keyword()) :: {:ok, OpenApiTypesense.PresetSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_preset(conn, preset_id, opts) do - OpenApiTypesense.Presets.retrieve_preset(conn, preset_id, opts) + def get_preset(preset_id, opts) do + OpenApiTypesense.Presets.retrieve_preset(preset_id, opts) end @doc """ @@ -84,40 +73,25 @@ defmodule ExTypesense.Preset do @doc """ Same as [upsert_preset/2](`upsert_preset/2`) - ```elixir - ExTypesense.upsert_preset("listing_view", body, []) - ExTypesense.upsert_preset(%{api_key: xyz, host: ...}, "listing_view", body) - ExTypesense.upsert_preset(OpenApiTypesense.Connection.new(), "listing_view", body) - ``` - """ - @doc since: "1.0.0" - @spec upsert_preset( - map() | Connection.t() | String.t(), - String.t() | map(), - map() | keyword() - ) :: - {:ok, OpenApiTypesense.PresetSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_preset(preset_id, body, opts) when is_list(opts) do - Connection.new() |> upsert_preset(preset_id, body, opts) - end + ## Options - def upsert_preset(conn, preset_id, body) do - upsert_preset(conn, preset_id, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [upsert_preset/3](`upsert_preset/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.upsert_preset("listing_view", body, conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.upsert_preset("listing_view", body, conn: conn) - ```elixir - ExTypesense.upsert_preset(%{api_key: xyz, host: ...}, "listing_view", body, []) - ExTypesense.upsert_preset(OpenApiTypesense.Connection.new(), "listing_view", body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.upsert_preset("listing_view", body, opts) """ @doc since: "1.0.0" - @spec upsert_preset(map() | Connection.t(), String.t(), map(), keyword()) :: + @spec upsert_preset(String.t(), map(), keyword()) :: {:ok, OpenApiTypesense.PresetSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_preset(conn, preset_id, body, opts) do - OpenApiTypesense.Presets.upsert_preset(conn, preset_id, body, opts) + def upsert_preset(preset_id, body, opts) do + OpenApiTypesense.Presets.upsert_preset(preset_id, body, opts) end @doc """ @@ -134,38 +108,26 @@ defmodule ExTypesense.Preset do @doc """ Same as [delete_preset/1](`delete_preset/1`) - ```elixir - ExTypesense.delete_preset("listing_view", []) - ExTypesense.delete_preset(%{api_key: xyz, host: ...}, "listing_view") - ExTypesense.delete_preset(OpenApiTypesense.Connection.new(), "listing_view") - ``` - """ - @doc since: "1.0.0" - @spec delete_preset(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.PresetDeleteSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_preset(preset_id, opts) when is_list(opts) do - Connection.new() |> delete_preset(preset_id, opts) - end + ## Options - def delete_preset(conn, preset_id) do - delete_preset(conn, preset_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_preset/2](`delete_preset/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_preset("listing_view", conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_preset("listing_view", conn: conn) - ```elixir - ExTypesense.delete_preset(%{api_key: xyz, host: ...}, "listing_view", []) - ExTypesense.delete_preset(OpenApiTypesense.Connection.new(), "listing_view", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_preset("listing_view", opts) """ @doc since: "1.0.0" - @spec delete_preset(map() | Connection.t(), String.t(), keyword()) :: + @spec delete_preset(String.t(), keyword()) :: {:ok, OpenApiTypesense.PresetDeleteSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_preset(conn, preset_id, opts) do - OpenApiTypesense.Presets.delete_preset(conn, preset_id, opts) + def delete_preset(preset_id, opts) do + OpenApiTypesense.Presets.delete_preset(preset_id, opts) end @doc """ @@ -180,35 +142,24 @@ defmodule ExTypesense.Preset do @doc """ Same as [list_presets/0](`list_presets/0`) - ```elixir - ExTypesense.list_presets([]) - ExTypesense.list_presets(%{api_key: xyz, host: ...}) - ExTypesense.list_presets(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec list_presets(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.PresetsRetrieveSchema.t()} | :error - def list_presets(opts) when is_list(opts) do - Connection.new() |> list_presets(opts) - end + ## Options - def list_presets(conn) do - list_presets(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_presets/1](`list_presets/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_presets(conn: conn) - ```elixir - ExTypesense.list_presets(%{api_key: xyz, host: ...}, []) - ExTypesense.list_presets(OpenApiTypesense.Connection.new(), []) - ``` + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_presets(conn: conn) + + iex> opts = [conn: conn] + iex> ExTypesense.list_presets(opts) """ @doc since: "1.0.0" - @spec list_presets(map() | Connection.t(), keyword()) :: + @spec list_presets(map() | Connection.t() | keyword()) :: {:ok, OpenApiTypesense.PresetsRetrieveSchema.t()} | :error - def list_presets(conn, opts) do - OpenApiTypesense.Presets.retrieve_all_presets(conn, opts) + def list_presets(opts) do + OpenApiTypesense.Presets.retrieve_all_presets(opts) end end diff --git a/lib/ex_typesense/search.ex b/lib/ex_typesense/search.ex index f637f7c..5082964 100644 --- a/lib/ex_typesense/search.ex +++ b/lib/ex_typesense/search.ex @@ -6,7 +6,6 @@ defmodule ExTypesense.Search do More here: https://typesense.org/docs/latest/api/search.html """ - alias OpenApiTypesense.Connection alias OpenApiTypesense.MultiSearchResult alias OpenApiTypesense.SearchResult @@ -14,10 +13,14 @@ defmodule ExTypesense.Search do @doc """ Search from a document or Ecto Schema. - Search params can be found [here](https://typesense.org/docs/latest/api/search.html#search-parameters). + + ## Options + + * `conn`: The custom connection map or struct you passed + * Search params can be found [here](https://typesense.org/docs/latest/api/search.html#search-parameters). ## Examples - iex> params = %{q: "umbrella", query_by: "title,description"} + iex> params = [q: "umbrella", query_by: "title,description"] iex> ExTypesense.search(Catalog, params) {:ok, %OpenApiTypesense.SearchResult{ @@ -63,68 +66,54 @@ defmodule ExTypesense.Search do } } - """ - @doc since: "1.0.0" - @spec search(String.t() | module(), keyword()) :: - {:ok, OpenApiTypesense.SearchResult.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def search(coll_name, opts) do - Connection.new() |> search(coll_name, opts) - end - - @doc """ - Same as [search/2](`search/2`) but passes another connection. + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.search("companies", conn: conn) - ```elixir - ExTypesense.search(%{api_key: xyz, host: ...}, "companies", opts) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.search("companies", conn: conn) - ExTypesense.search(OpenApiTypesense.Connection.new(), "companies", opts) - ``` + iex> opts = [conn: conn, q: "hat", ...] + iex> ExTypesense.search("companies", opts) """ @doc since: "1.0.0" - @spec search(map() | Connection.t(), String.t() | module(), keyword()) :: + @spec search(String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.SearchResult.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def search(conn, module, opts) when is_atom(module) do + def search(module, opts) when is_atom(module) do coll_name = module.__schema__(:source) - search(conn, coll_name, opts) + search(coll_name, opts) end - def search(conn, coll_name, opts) do - OpenApiTypesense.Documents.search_collection(conn, coll_name, opts) + def search(coll_name, opts) when is_binary(coll_name) do + OpenApiTypesense.Documents.search_collection(coll_name, opts) end @doc """ Same as [search/2](`search/2`) but matches Ecto record(s) and returns struct(s). - ```elixir - ExTypesense.search_ecto("companies", opts) - ``` - """ - @doc since: "1.0.0" - @spec search_ecto(String.t() | module(), keyword()) :: - Ecto.Query.t() | {:error, OpenApiTypesense.ApiResponse.t()} - def search_ecto(coll_name, opts) do - Connection.new() |> search_ecto(coll_name, opts) - end + ## Options - @doc """ - Same as [search_ecto/2](`search_ecto/2`) but passes another connection. + * `conn`: The custom connection map or struct you passed + + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.search_ecto("companies", conn: conn) - ```elixir - ExTypesense.search_ecto(%{api_key: xyz, host: ...}, "companies", opts) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.search_ecto("companies", conn: conn) - ExTypesense.search_ecto(OpenApiTypesense.Connection.new(), "companies", opts) - ``` + iex> opts = [conn: conn, ...] + iex> ExTypesense.search_ecto("companies", opts) """ @doc since: "1.0.0" - @spec search_ecto(map() | Connection.t(), String.t() | module(), keyword()) :: + @spec search_ecto(String.t() | module(), keyword()) :: Ecto.Query.t() | {:error, OpenApiTypesense.ApiResponse.t()} - def search_ecto(conn, module, opts) when is_atom(module) do + def search_ecto(module, opts) when is_atom(module) do coll_name = module.__schema__(:source) - search_ecto(conn, coll_name, opts) + search_ecto(coll_name, opts) end - def search_ecto(conn, coll_name, opts) do - case search(conn, coll_name, opts) do + def search_ecto(coll_name, opts) when is_binary(coll_name) do + case search(coll_name, opts) do {:ok, %SearchResult{} = result} -> hits_to_query(result.hits, coll_name) @@ -158,6 +147,7 @@ defmodule ExTypesense.Search do ## Options + * `conn`: The custom connection map or struct you passed * `limit_multi_searches`: Max number of search requests that can be sent in a multi-search request. Default 50 * `x-typesense-api-key`: You can embed a separate search API key for each search @@ -238,43 +228,22 @@ defmodule ExTypesense.Search do @doc """ Same as [multi_search/1](`multi_search/1`) - ```elixir - ExTypesense.multi_search(searches, opts) - - ExTypesense.multi_search(%{api_key: xyz, host: ...}, searches) - - ExTypesense.multi_search(OpenApiTypesense.Connection.new(), searches) - ``` - """ - @doc since: "1.0.0" - @spec multi_search( - map() | Connection.t() | list(map()), - list(map()) | keyword() - ) :: - {:ok, OpenApiTypesense.MultiSearchResult.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def multi_search(searches, opts) when is_list(opts) and is_list(searches) do - Connection.new() |> multi_search(searches, opts) - end - - def multi_search(conn, searches) do - multi_search(conn, searches, []) - end + ## Options - @doc """ - Same as [multi_search/2](`multi_search/2`) but passes another connection. + * `conn`: The custom connection map or struct you passed - ```elixir - ExTypesense.multi_search(%{api_key: xyz, host: ...}, searches, opts) + ## Examples + iex> opts = [conn: %{api_key: xyz, host: ...}, ...] + iex> ExTypesense.multi_search(searches, opts) - ExTypesense.multi_search(OpenApiTypesense.Connection.new(), searches, opts) - ``` + iex> opts = [conn: OpenApiTypesense.Connection.new(), ...] + iex> ExTypesense.multi_search(searches, opts) """ @doc since: "1.0.0" - @spec multi_search(map() | Connection.t(), list(map()), keyword()) :: + @spec multi_search(list(map()), keyword()) :: {:ok, OpenApiTypesense.MultiSearchResult.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def multi_search(conn, searches, opts) do + def multi_search(searches, opts) do union = Keyword.get(opts, :union) === true searches = @@ -300,7 +269,7 @@ defmodule ExTypesense.Search do end end) - OpenApiTypesense.Documents.multi_search(conn, %{union: union, searches: searches}, opts) + OpenApiTypesense.Documents.multi_search(%{union: union, searches: searches}, opts) end @doc """ @@ -332,42 +301,22 @@ defmodule ExTypesense.Search do @doc """ Same as [multi_search_ecto/1](`multi_search_ecto/1`) - ```elixir - ExTypesense.multi_search_ecto(searches, opts) - - ExTypesense.multi_search_ecto(%{api_key: xyz, host: ...}, searches) - - ExTypesense.multi_search_ecto(OpenApiTypesense.Connection.new(), searches) - ``` - """ - @doc since: "1.0.0" - @spec multi_search_ecto( - map() | Connection.t() | list(map()), - list(map()) | keyword() - ) :: - list(Ecto.Query.t()) | list({:error, OpenApiTypesense.MultiSearchResult.t()}) - def multi_search_ecto(searches, opts) when is_list(opts) and is_list(searches) do - Connection.new() |> multi_search_ecto(searches, opts) - end - - def multi_search_ecto(conn, searches) do - multi_search_ecto(conn, searches, []) - end + ## Options - @doc """ - Same as [multi_search_ecto/2](`multi_search_ecto/2`) but passes another connection. + * `conn`: The custom connection map or struct you passed - ```elixir - ExTypesense.multi_search_ecto(%{api_key: xyz, host: ...}, searches, opts) + ## Examples + iex> opts = [conn: %{api_key: xyz, host: ...}, ...] + iex> ExTypesense.multi_search_ecto(searches, opts) - ExTypesense.multi_search_ecto(OpenApiTypesense.Connection.new(), searches, opts) - ``` + iex> opts = [conn: OpenApiTypesense.Connection.new(), ...] + iex> ExTypesense.multi_search_ecto(searches, opts) """ @doc since: "1.0.0" - @spec multi_search_ecto(map() | Connection.t(), list(map()), keyword()) :: - list(Ecto.Query.t()) | list({:error, OpenApiTypesense.ApiResponse.t()}) - def multi_search_ecto(conn, searches, opts) do - {:ok, %MultiSearchResult{results: results}} = multi_search(conn, searches, opts) + @spec multi_search_ecto(list(map()), keyword()) :: + list(Ecto.Query.t()) | list({:error, OpenApiTypesense.MultiSearchResult.t()}) + def multi_search_ecto(searches, opts) do + {:ok, %MultiSearchResult{results: results}} = multi_search(searches, opts) Enum.map(results, fn result -> case result do diff --git a/lib/ex_typesense/stemming.ex b/lib/ex_typesense/stemming.ex index 0f73bfe..98f3afa 100644 --- a/lib/ex_typesense/stemming.ex +++ b/lib/ex_typesense/stemming.ex @@ -7,8 +7,6 @@ defmodule ExTypesense.Stemming do More here: https://typesense.org/docs/latest/api/stemming.html """ - alias OpenApiTypesense.Connection - @doc """ Retrieve a stemming dictionary @@ -25,41 +23,26 @@ defmodule ExTypesense.Stemming do @doc """ Same as [get_stemming_dictionary/1](`get_stemming_dictionary/1`) - ```elixir - ExTypesense.get_stemming_dictionary(dictionary_id, []) - - ExTypesense.get_stemming_dictionary(%{api_key: xyz, host: ...}, dictionary_id) - - ExTypesense.get_stemming_dictionary(OpenApiTypesense.Connection.new(), dictionary_id) - ``` - """ - @doc since: "1.2.0" - @spec get_stemming_dictionary(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.StemmingDictionary.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def get_stemming_dictionary(dictionary_id, opts) when is_list(opts) do - get_stemming_dictionary(Connection.new(), dictionary_id, opts) - end + ## Options - def get_stemming_dictionary(conn, dictionary_id) do - get_stemming_dictionary(conn, dictionary_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_stemming_dictionary/2](`get_stemming_dictionary/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_stemming_dictionary(dictionary_id, conn: conn) - ```elixir - ExTypesense.get_stemming_dictionary(%{api_key: xyz, host: ...}, dictionary_id, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_stemming_dictionary(dictionary_id, conn: conn) - ExTypesense.get_stemming_dictionary(OpenApiTypesense.Connection.new(), dictionary_id, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_stemming_dictionary(dictionary_id, opts) """ @doc since: "1.2.0" - @spec get_stemming_dictionary(map() | Connection.t(), String.t(), keyword()) :: + @spec get_stemming_dictionary(String.t(), keyword()) :: {:ok, OpenApiTypesense.StemmingDictionary.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_stemming_dictionary(conn, dictionary_id, opts) do - OpenApiTypesense.Stemming.get_stemming_dictionary(conn, dictionary_id, opts) + def get_stemming_dictionary(dictionary_id, opts) do + OpenApiTypesense.Stemming.get_stemming_dictionary(dictionary_id, opts) end @doc """ @@ -67,6 +50,7 @@ defmodule ExTypesense.Stemming do ## Options + * `conn`: The custom connection map or struct you passed * `id`: The ID to assign to the dictionary ## Example @@ -76,26 +60,21 @@ defmodule ExTypesense.Stemming do ...> %{"word" => "geese", "root" => "goose"} ...> ] iex> ExTypesense.import_stemming_dictionary(body, id: "irregular-plurals") - """ - @doc since: "1.2.0" - @spec import_stemming_dictionary(list(map()), keyword()) :: - {:ok, String.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def import_stemming_dictionary(body, opts) when is_list(opts) do - Connection.new() |> import_stemming_dictionary(body, opts) - end - @doc """ - Same as [import_stemming_dictionary/2](`import_stemming_dictionary/2`) but passes another connection. + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.import_stemming_dictionary(body, id: "irregular-plurals", conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.import_stemming_dictionary(body, id: "irregular-plurals", conn: conn) - Either one of: - - `import_stemming_dictionary(%{api_key: xyz, host: ...}, body, id: "something")` - - `import_stemming_dictionary(dictionary_id, Connection.new(), body, id: "some-id")` + iex> opts = [id: "irregular-plurals", conn: conn] + iex> ExTypesense.import_stemming_dictionary(body, opts) """ @doc since: "1.2.0" - @spec import_stemming_dictionary(map() | Connection.t(), list(map()), keyword()) :: + @spec import_stemming_dictionary(list(map()), keyword()) :: {:ok, String.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def import_stemming_dictionary(conn, body, opts) do - OpenApiTypesense.Stemming.import_stemming_dictionary(conn, body, opts) + def import_stemming_dictionary(body, opts) do + OpenApiTypesense.Stemming.import_stemming_dictionary(body, opts) end @doc """ @@ -111,38 +90,24 @@ defmodule ExTypesense.Stemming do @doc """ Same as [list_stemming_dictionaries/0](`list_stemming_dictionaries/0`) - ```elixir - ExTypesense.list_stemming_dictionaries([]) - - ExTypesense.list_stemming_dictionaries(%{api_key: xyz, host: ...}) - - ExTypesense.list_stemming_dictionaries(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.2.0" - @spec list_stemming_dictionaries(map() | Connection.t() | keyword()) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def list_stemming_dictionaries(opts) when is_list(opts) do - list_stemming_dictionaries(Connection.new(), opts) - end + ## Options - def list_stemming_dictionaries(conn) do - list_stemming_dictionaries(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_stemming_dictionaries/1](`list_stemming_dictionaries/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_stemming_dictionaries(conn: conn) - ```elixir - ExTypesense.list_stemming_dictionaries(%{api_key: xyz, host: ...}, []) + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_stemming_dictionaries(conn: conn) - ExTypesense.list_stemming_dictionaries(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.list_stemming_dictionaries(opts) """ @doc since: "1.2.0" - @spec list_stemming_dictionaries(map() | Connection.t(), keyword()) :: + @spec list_stemming_dictionaries(keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def list_stemming_dictionaries(conn, opts) do - OpenApiTypesense.Stemming.list_stemming_dictionaries(conn, opts) + def list_stemming_dictionaries(opts) do + OpenApiTypesense.Stemming.list_stemming_dictionaries(opts) end end diff --git a/lib/ex_typesense/stopwords.ex b/lib/ex_typesense/stopwords.ex index f2065b6..fa1c4f7 100644 --- a/lib/ex_typesense/stopwords.ex +++ b/lib/ex_typesense/stopwords.ex @@ -12,8 +12,6 @@ defmodule ExTypesense.Stopwords do More here: https://typesense.org/docs/latest/api/stopwords.html """ - alias OpenApiTypesense.Connection - @doc """ Retrieve the details of a stopwords set, given it's name. """ @@ -28,38 +26,26 @@ defmodule ExTypesense.Stopwords do @doc """ Same as [get_stopword/1](`get_stopword/1`) - ```elixir - ExTypesense.get_stopword("stopword_set_countries", []) - ExTypesense.get_stopword(%{api_key: xyz, host: ...}, "stopword_set_countries") - ExTypesense.get_stopword(OpenApiTypesense.Connection.new(), "stopword_set_countries") - ``` - """ - @doc since: "1.0.0" - @spec get_stopword(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, OpenApiTypesense.StopwordsSetRetrieveSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def get_stopword(stop_id, opts) when is_list(opts) do - Connection.new() |> get_stopword(stop_id, opts) - end + ## Options - def get_stopword(conn, stop_id) do - get_stopword(conn, stop_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_stopword/2](`get_stopword/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_stopword("stopword_set_countries", conn: conn) - ```elixir - ExTypesense.get_stopword(%{api_key: xyz, host: ...}, "stopword_set_countries", []) - ExTypesense.get_stopword(OpenApiTypesense.Connection.new(), "stopword_set_countries", []) - ``` + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_stopword("stopword_set_countries", conn: conn) + + iex> opts = [conn: conn] + iex> ExTypesense.get_stopword("stopword_set_countries", opts) """ @doc since: "1.0.0" - @spec get_stopword(map() | Connection.t(), String.t(), keyword()) :: + @spec get_stopword(String.t(), keyword()) :: {:ok, OpenApiTypesense.StopwordsSetRetrieveSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_stopword(conn, stop_id, opts) do - OpenApiTypesense.Stopwords.retrieve_stopwords_set(conn, stop_id, opts) + def get_stopword(stop_id, opts) do + OpenApiTypesense.Stopwords.retrieve_stopwords_set(stop_id, opts) end @doc """ @@ -88,42 +74,26 @@ defmodule ExTypesense.Stopwords do @doc """ Same as [upsert_stopword/2](`upsert_stopword/2`) - ```elixir - ExTypesense.upsert_stopword("stopword_set_countries", body, []) - ExTypesense.upsert_stopword(%{api_key: xyz, host: ...}, "stopword_set_countries", body) - ExTypesense.upsert_stopword(OpenApiTypesense.Connection.new(), "stopword_set_countries", body) - ``` - """ - @doc since: "1.0.0" - @spec upsert_stopword( - map() | Connection.t() | String.t(), - String.t() | map(), - map() | keyword() - ) :: - {:ok, OpenApiTypesense.StopwordsSetSchema.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_stopword(stop_id, body, opts) when is_list(opts) do - Connection.new() |> upsert_stopword(stop_id, body, opts) - end + ## Options - def upsert_stopword(conn, stop_id, body) do - upsert_stopword(conn, stop_id, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [upsert_stopword/3](`upsert_stopword/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.upsert_stopword("stopword_set_countries", body, conn: conn) - ```elixir - ExTypesense.upsert_stopword(%{api_key: xyz, host: ...}, "stopword_set_countries", body, []) - ExTypesense.upsert_stopword(OpenApiTypesense.Connection.new(), "stopword_set_countries", body, []) - ``` + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.upsert_stopword("stopword_set_countries", body, conn: conn) + + iex> opts = [conn: conn] + iex> ExTypesense.upsert_stopword("stopword_set_countries", body, opts) """ @doc since: "1.0.0" - @spec upsert_stopword(map() | Connection.t(), String.t(), map(), keyword()) :: + @spec upsert_stopword(String.t(), map(), keyword()) :: {:ok, OpenApiTypesense.StopwordsSetSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_stopword(conn, stop_id, body, opts) do - OpenApiTypesense.Stopwords.upsert_stopwords_set(conn, stop_id, body, opts) + def upsert_stopword(stop_id, body, opts) do + OpenApiTypesense.Stopwords.upsert_stopwords_set(stop_id, body, opts) end @doc """ @@ -138,36 +108,25 @@ defmodule ExTypesense.Stopwords do @doc """ Same as [list_stopwords/0](`list_stopwords/0`) - ```elixir - ExTypesense.list_stopwords([]) - ExTypesense.list_stopwords(%{api_key: xyz, host: ...}) - ExTypesense.list_stopwords(OpenApiTypesense.Connection.new()) - ``` - """ - @doc since: "1.0.0" - @spec list_stopwords(map() | Connection.t() | keyword()) :: - {:ok, OpenApiTypesense.StopwordsSetsRetrieveAllSchema.t()} | :error - def list_stopwords(opts) when is_list(opts) do - Connection.new() |> list_stopwords(opts) - end + ## Options - def list_stopwords(conn) do - list_stopwords(conn, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_stopwords/1](`list_stopwords/1`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_stopwords(conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_stopwords(conn: conn) - ```elixir - ExTypesense.list_stopwords(%{api_key: xyz, host: ...}, []) - ExTypesense.list_stopwords(OpenApiTypesense.Connection.new(), []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.list_stopwords(opts) """ @doc since: "1.0.0" - @spec list_stopwords(map() | Connection.t(), keyword()) :: + @spec list_stopwords(keyword()) :: {:ok, OpenApiTypesense.StopwordsSetsRetrieveAllSchema.t()} | :error - def list_stopwords(conn, opts) do - OpenApiTypesense.Stopwords.retrieve_stopwords_sets(conn, opts) + def list_stopwords(opts) do + OpenApiTypesense.Stopwords.retrieve_stopwords_sets(opts) end @doc """ @@ -183,35 +142,24 @@ defmodule ExTypesense.Stopwords do @doc """ Same as [delete_stopword/1](`delete_stopword/1`) - ```elixir - ExTypesense.delete_stopword("stopword_set_countries", []) - ExTypesense.delete_stopword(%{api_key: xyz, host: ...}, "stopword_set_countries") - ExTypesense.delete_stopword(OpenApiTypesense.Connection.new(), "stopword_set_countries") - ``` - """ - @doc since: "1.0.0" - @spec delete_stopword(map() | Connection.t() | String.t(), String.t() | keyword()) :: - {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_stopword(stop_id, opts) when is_list(opts) do - Connection.new() |> delete_stopword(stop_id, opts) - end + ## Options - def delete_stopword(conn, stop_id) do - delete_stopword(conn, stop_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_stopword/2](`delete_stopword/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_stopword("stopword_set_countries", conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_stopword("stopword_set_countries", conn: conn) - ```elixir - ExTypesense.delete_stopword(%{api_key: xyz, host: ...}, "stopword_set_countries", []) - ExTypesense.delete_stopword(OpenApiTypesense.Connection.new(), "stopword_set_countries", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_stopword("stopword_set_countries", opts) """ @doc since: "1.0.0" - @spec delete_stopword(map() | Connection.t(), String.t(), keyword()) :: + @spec delete_stopword(String.t(), keyword()) :: {:ok, map} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_stopword(conn, stop_id, opts) do - OpenApiTypesense.Stopwords.delete_stopwords_set(conn, stop_id, opts) + def delete_stopword(stop_id, opts) do + OpenApiTypesense.Stopwords.delete_stopwords_set(stop_id, opts) end end diff --git a/lib/ex_typesense/synonym.ex b/lib/ex_typesense/synonym.ex index 011b8f8..f5be8e5 100644 --- a/lib/ex_typesense/synonym.ex +++ b/lib/ex_typesense/synonym.ex @@ -10,8 +10,6 @@ defmodule ExTypesense.Synonym do More here: https://typesense.org/docs/latest/api/synonyms.html """ - alias OpenApiTypesense.Connection - @doc """ List all synonyms associated with a given collection. @@ -31,52 +29,37 @@ defmodule ExTypesense.Synonym do {:ok, OpenApiTypesense.SearchSynonymsResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} def list_synonyms(collection_name) do - Connection.new() |> list_synonyms(collection_name) + list_synonyms(collection_name, []) end @doc """ Same as [list_synonyms/1](`list_synonyms/1`). - ```elixir - ExTypesense.list_synonyms("persons", []) - ExTypesense.list_synonyms(%{api_key: xyz, host: ...}, "persons") - ExTypesense.list_synonyms(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person) - ``` - """ - @doc since: "1.0.0" - @spec list_synonyms( - map() | Connection.t() | String.t() | module(), - String.t() | module() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchSynonymsResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def list_synonyms(coll_name, opts) when is_list(opts) do - Connection.new() |> list_synonyms(coll_name, opts) - end + ## Options - def list_synonyms(conn, coll_name) do - list_synonyms(conn, coll_name, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [list_synonyms/2](`list_synonyms/2`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.list_synonyms("persons", conn: conn) - ```elixir - ExTypesense.list_synonyms(%{api_key: xyz, host: ...}, "persons", limit: 10) - ExTypesense.list_synonyms(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person, []) - ``` + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.list_synonyms("persons", conn: conn) + + iex> opts = [conn: conn] + iex> ExTypesense.list_synonyms(MyApp.Accounts.Person, opts) """ @doc since: "1.0.0" - @spec list_synonyms(map() | Connection.t(), String.t() | module(), keyword()) :: + @spec list_synonyms(String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.SearchSynonymsResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def list_synonyms(conn, module, opts) when is_atom(module) do + def list_synonyms(module, opts) when is_atom(module) do coll_name = module.__schema__(:source) - list_synonyms(conn, coll_name, opts) + list_synonyms(coll_name, opts) end - def list_synonyms(conn, coll_name, opts) do - OpenApiTypesense.Synonyms.get_search_synonyms(conn, coll_name, opts) + def list_synonyms(coll_name, opts) when is_binary(coll_name) do + OpenApiTypesense.Synonyms.get_search_synonyms(coll_name, opts) end @doc """ @@ -92,45 +75,30 @@ defmodule ExTypesense.Synonym do @doc """ Same as [get_synonym/2](`get_synonym/2`). - ```elixir - ExTypesense.get_synonym("cars", "sedan-synonym", []) - ExTypesense.get_synonym(%{api_key: xyz, host: ...}, "cars", "sedan-synonym") - ExTypesense.get_synonym(OpenApiTypesense.Connection.new(), MyApp.Vehicle.Car, "sedan-synonym") - ``` - """ - @doc since: "1.0.0" - @spec get_synonym( - map() | Connection.t() | String.t() | module(), - String.t(), - String.t() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchSynonym.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_synonym(coll_name, syn_id, opts) when is_list(opts) do - Connection.new() |> get_synonym(coll_name, syn_id, opts) - end + ## Options - def get_synonym(conn, coll_name, syn_id) do - get_synonym(conn, coll_name, syn_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [get_synonym/3](`get_synonym/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.get_synonym("cars", "sedan-synonym", conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.get_synonym("cars", "sedan-synonym", conn: conn) - ```elixir - ExTypesense.get_synonym(%{api_key: xyz, host: ...}, "cars", "sedan-synonym", []) - ExTypesense.get_synonym(OpenApiTypesense.Connection.new(), MyApp.Vehicle.Car, "sedan-synonym", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.get_synonym(MyApp.Vehicle.Car, "sedan-synonym", opts) """ @doc since: "1.0.0" - @spec get_synonym(map() | Connection.t(), String.t() | module(), String.t(), keyword()) :: + @spec get_synonym(String.t() | module(), String.t(), keyword()) :: {:ok, OpenApiTypesense.SearchSynonym.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def get_synonym(conn, module, syn_id, opts) when is_atom(module) do + def get_synonym(module, syn_id, opts) when is_atom(module) do coll_name = module.__schema__(:source) - get_synonym(conn, coll_name, syn_id, opts) + get_synonym(coll_name, syn_id, opts) end - def get_synonym(conn, coll_name, syn_id, opts) do - OpenApiTypesense.Synonyms.get_search_synonym(conn, coll_name, syn_id, opts) + def get_synonym(coll_name, syn_id, opts) when is_binary(coll_name) do + OpenApiTypesense.Synonyms.get_search_synonym(coll_name, syn_id, opts) end @doc """ @@ -147,47 +115,31 @@ defmodule ExTypesense.Synonym do @doc """ Same as [delete_synonym/2](`delete_synonym/2`). - ```elixir - ExTypesense.delete_synonym("cars", "sedan-synonym", []) - ExTypesense.delete_synonym(%{api_key: xyz, host: ...}, "cars", "sedan-synonym") - ExTypesense.delete_synonym(OpenApiTypesense.Connection.new(), MyApp.Vehicle.Car, "sedan-synonym") - ``` - """ - @doc since: "1.0.0" - @spec delete_synonym( - map() | Connection.t() | String.t() | module(), - String.t(), - String.t() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchSynonymDeleteResponse.t()} - | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_synonym(coll_name, syn_id, opts) when is_list(opts) do - Connection.new() |> delete_synonym(coll_name, syn_id, opts) - end + ## Options - def delete_synonym(conn, coll_name, syn_id) do - delete_synonym(conn, coll_name, syn_id, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [delete_synonym/3](`delete_synonym/3`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.delete_synonym("cars", "sedan-synonym", conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.delete_synonym("cars", "sedan-synonym", conn: conn) - ```elixir - ExTypesense.delete_synonym(%{api_key: xyz, host: ...}, "cars", "sedan-synonym", []) - ExTypesense.delete_synonym(OpenApiTypesense.Connection.new(), MyApp.Vehicle.Car, "sedan-synonym", []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.delete_synonym(MyApp.Vehicle.Car, "sedan-synonym", opts) """ @doc since: "1.0.0" - @spec delete_synonym(map() | Connection.t(), String.t() | module(), String.t(), keyword()) :: + @spec delete_synonym(String.t() | module(), String.t(), keyword()) :: {:ok, OpenApiTypesense.SearchSynonymDeleteResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def delete_synonym(conn, module, syn_id, opts) when is_atom(module) do + def delete_synonym(module, syn_id, opts) when is_atom(module) do coll_name = module.__schema__(:source) - delete_synonym(conn, coll_name, syn_id, opts) + delete_synonym(coll_name, syn_id, opts) end - def delete_synonym(conn, coll_name, syn_id, opts) do - OpenApiTypesense.Synonyms.delete_search_synonym(conn, coll_name, syn_id, opts) + def delete_synonym(coll_name, syn_id, opts) when is_binary(coll_name) do + OpenApiTypesense.Synonyms.delete_search_synonym(coll_name, syn_id, opts) end @doc """ @@ -204,57 +156,35 @@ defmodule ExTypesense.Synonym do @spec upsert_synonym(String.t() | module(), String.t(), map()) :: {:ok, OpenApiTypesense.SearchSynonym.t()} | {:error, OpenApiTypesense.ApiResponse.t()} def upsert_synonym(coll_name, syn_id, body) do - Connection.new() |> upsert_synonym(coll_name, syn_id, body) + upsert_synonym(coll_name, syn_id, body, []) end @doc """ Same as [upsert_synonym/3](`upsert_synonym/3`). - ```elixir - ExTypesense.upsert_synonym("persons", "coat-synonyms", body, []) - ExTypesense.upsert_synonym(%{api_key: xyz, host: ...}, "persons", "coat-synonyms", body) - ExTypesense.upsert_synonym(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person, "coat-synonyms", body) - ``` - """ - @doc since: "1.0.0" - @spec upsert_synonym( - map() | Connection.t() | String.t() | module(), - String.t() | module(), - String.t() | map(), - map() | keyword() - ) :: - {:ok, OpenApiTypesense.SearchSynonym.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_synonym(coll_name, syn_id, body, opts) when is_list(opts) do - Connection.new() |> upsert_synonym(coll_name, syn_id, body, opts) - end + ## Options - def upsert_synonym(conn, coll_name, syn_id, body) do - upsert_synonym(conn, coll_name, syn_id, body, []) - end + * `conn`: The custom connection map or struct you passed - @doc """ - Same as [upsert_synonym/4](`upsert_synonym/4`) but passes another connection. + ## Examples + iex> conn = %{api_key: xyz, host: ...} + iex> ExTypesense.upsert_synonym("persons", "coat-synonyms", body, conn: conn) + + iex> conn = OpenApiTypesense.Connection.new() + iex> ExTypesense.upsert_synonym("persons", "coat-synonyms", body, conn: conn) - ```elixir - ExTypesense.upsert_synonym(%{api_key: xyz, host: ...}, "persons", "coat-synonyms", body, []) - ExTypesense.upsert_synonym(OpenApiTypesense.Connection.new(), MyApp.Accounts.Person, "coat-synonyms", body, []) - ``` + iex> opts = [conn: conn] + iex> ExTypesense.upsert_synonym(MyApp.Accounts.Person, "coat-synonyms", body, opts) """ @doc since: "1.0.0" - @spec upsert_synonym( - map() | Connection.t(), - String.t() | module(), - String.t(), - map(), - keyword() - ) :: + @spec upsert_synonym(String.t() | module(), String.t(), map(), keyword()) :: {:ok, OpenApiTypesense.SearchSynonym.t()} | {:error, OpenApiTypesense.ApiResponse.t()} - def upsert_synonym(conn, module, syn_id, body, opts) when is_atom(module) do + def upsert_synonym(module, syn_id, body, opts) when is_atom(module) do coll_name = module.__schema__(:source) - upsert_synonym(conn, coll_name, syn_id, body, opts) + upsert_synonym(coll_name, syn_id, body, opts) end - def upsert_synonym(conn, coll_name, syn_id, body, opts) do - OpenApiTypesense.Synonyms.upsert_search_synonym(conn, coll_name, syn_id, body, opts) + def upsert_synonym(coll_name, syn_id, body, opts) when is_binary(coll_name) do + OpenApiTypesense.Synonyms.upsert_search_synonym(coll_name, syn_id, body, opts) end end diff --git a/mix.exs b/mix.exs index 983ddea..8e4ffa2 100644 --- a/mix.exs +++ b/mix.exs @@ -42,7 +42,7 @@ defmodule ExTypesense.MixProject do {:ecto, "~> 3.12"}, {:excoveralls, "~> 0.18", only: :test, runtime: false}, {:mix_audit, "~> 2.1", only: :test, runtime: false}, - {:open_api_typesense, "~> 0.7"} + {:open_api_typesense, "~> 1.0"} ] end diff --git a/mix.lock b/mix.lock index 209b038..3c67e52 100644 --- a/mix.lock +++ b/mix.lock @@ -4,7 +4,7 @@ "decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"}, "earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"}, "ecto": {:hex, :ecto, "3.12.5", "4a312960ce612e17337e7cefcf9be45b95a3be6b36b6f94dfb3d8c361d631866", [:mix], [{:decimal, "~> 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", "6eb18e80bef8bb57e17f5a7f068a1719fbda384d40fc37acb8eb8aeca493b6ea"}, - "ex_doc": {:hex, :ex_doc, "0.38.0", "0ab17291b71f9b2c479c0b92404107ac5005214872c3b43f845f6f644ba14f56", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "dee6d6485ef501384fbfc7c90cb0fe621636078bebc0f7a1fd2ddcc20b185013"}, + "ex_doc": {:hex, :ex_doc, "0.38.2", "504d25eef296b4dec3b8e33e810bc8b5344d565998cd83914ffe1b8503737c02", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "732f2d972e42c116a70802f9898c51b54916e542cc50968ac6980512ec90f42b"}, "excoveralls": {:hex, :excoveralls, "0.18.5", "e229d0a65982613332ec30f07940038fe451a2e5b29bce2a5022165f0c9b157e", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "523fe8a15603f86d64852aab2abe8ddbd78e68579c8525ae765facc5eae01562"}, "file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"}, "finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"}, @@ -13,13 +13,13 @@ "makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"}, "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"}, "makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"}, - "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"}, + "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, "mix_audit": {:hex, :mix_audit, "2.1.4", "0a23d5b07350cdd69001c13882a4f5fb9f90fbd4cbf2ebc190a2ee0d187ea3e9", [:make, :mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.11", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "fd807653cc8c1cada2911129c7eb9e985e3cc76ebf26f4dd628bb25bbcaa7099"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"}, "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, - "open_api_typesense": {:hex, :open_api_typesense, "0.7.1", "81d005e58e92384baa2846eb8e9f44b784d2f71bc5a880311494f891711a6288", [:mix], [{:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}], "hexpm", "c0745a2d5b30ebe4313acb227ccf469db56275e44e8007d261e0ce326d6e363b"}, + "open_api_typesense": {:hex, :open_api_typesense, "1.0.0", "8535e764230016bc390753d78599b0975e118470aa7fd283e89d63dd54d21823", [:mix], [{:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}], "hexpm", "586a24349c223fb158d127ca547cb07ee69380dface72521c2de88085f8e9660"}, "req": {:hex, :req, "0.5.10", "a3a063eab8b7510785a467f03d30a8d95f66f5c3d9495be3474b61459c54376c", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "8a604815743f8a2d3b5de0659fa3137fa4b1cffd636ecb69b30b2b9b2c2559be"}, "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"}, diff --git a/test/analytics_test.exs b/test/analytics_test.exs index cfe5fe8..a8fa193 100644 --- a/test/analytics_test.exs +++ b/test/analytics_test.exs @@ -100,10 +100,8 @@ defmodule AnalyticsTest do assert {:error, %ApiResponse{message: _}} = ExTypesense.create_analytics_rule(body) assert {:error, _} = ExTypesense.create_analytics_rule(body, []) - assert {:error, _} = ExTypesense.create_analytics_rule(conn, body) - assert {:error, _} = ExTypesense.create_analytics_rule(conn, body, []) - assert {:error, _} = ExTypesense.create_analytics_rule(map_conn, body) - assert {:error, _} = ExTypesense.create_analytics_rule(map_conn, body, []) + assert {:error, _} = ExTypesense.create_analytics_rule(body, conn: conn) + assert {:error, _} = ExTypesense.create_analytics_rule(body, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -131,16 +129,10 @@ defmodule AnalyticsTest do ExTypesense.upsert_analytics_rule(name, body, []) assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.upsert_analytics_rule(conn, name, body) + ExTypesense.upsert_analytics_rule(name, body, conn: conn) assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.upsert_analytics_rule(map_conn, name, body) - - assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.upsert_analytics_rule(conn, name, body, []) - - assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.upsert_analytics_rule(map_conn, name, body, []) + ExTypesense.upsert_analytics_rule(name, body, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -180,16 +172,10 @@ defmodule AnalyticsTest do ExTypesense.list_analytics_rules([]) assert {:ok, %AnalyticsRulesRetrieveSchema{rules: _}} = - ExTypesense.list_analytics_rules(conn) + ExTypesense.list_analytics_rules(conn: conn) assert {:ok, %AnalyticsRulesRetrieveSchema{rules: _}} = - ExTypesense.list_analytics_rules(map_conn) - - assert {:ok, %AnalyticsRulesRetrieveSchema{rules: _}} = - ExTypesense.list_analytics_rules(conn, []) - - assert {:ok, %AnalyticsRulesRetrieveSchema{rules: _}} = - ExTypesense.list_analytics_rules(map_conn, []) + ExTypesense.list_analytics_rules(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": false] @@ -223,16 +209,10 @@ defmodule AnalyticsTest do ExTypesense.get_analytics_rule(name, []) assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.get_analytics_rule(conn, name) - - assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.get_analytics_rule(conn, name, []) - - assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.get_analytics_rule(map_conn, name) + ExTypesense.get_analytics_rule(name, conn: conn) assert {:ok, %AnalyticsRuleSchema{name: ^name}} = - ExTypesense.get_analytics_rule(map_conn, name, []) + ExTypesense.get_analytics_rule(name, conn: map_conn) body = %{ @@ -256,26 +236,20 @@ defmodule AnalyticsTest do ExTypesense.create_analytics_event(body, []) assert {:ok, %AnalyticsEventCreateResponse{ok: true}} = - ExTypesense.create_analytics_event(conn, body) - - assert {:ok, %AnalyticsEventCreateResponse{ok: true}} = - ExTypesense.create_analytics_event(map_conn, body) + ExTypesense.create_analytics_event(body, conn: conn) assert {:ok, %AnalyticsEventCreateResponse{ok: true}} = - ExTypesense.create_analytics_event(conn, body, []) - - assert {:ok, %AnalyticsEventCreateResponse{ok: true}} = - ExTypesense.create_analytics_event(map_conn, body, []) + ExTypesense.create_analytics_event(body, conn: map_conn) assert {:ok, %AnalyticsRuleDeleteResponse{name: ^name}} = ExTypesense.delete_analytics_rule(name) assert {:error, %ApiResponse{message: _}} = ExTypesense.delete_analytics_rule(name, []) - assert {:error, %ApiResponse{message: _}} = ExTypesense.delete_analytics_rule(conn, name) - assert {:error, %ApiResponse{message: _}} = ExTypesense.delete_analytics_rule(map_conn, name) - assert {:error, %ApiResponse{message: _}} = ExTypesense.delete_analytics_rule(conn, name, []) assert {:error, %ApiResponse{message: _}} = - ExTypesense.delete_analytics_rule(map_conn, name, []) + ExTypesense.delete_analytics_rule(name, conn: conn) + + assert {:error, %ApiResponse{message: _}} = + ExTypesense.delete_analytics_rule(name, conn: map_conn) end end diff --git a/test/cluster_test.exs b/test/cluster_test.exs index 7113913..e77fb4f 100644 --- a/test/cluster_test.exs +++ b/test/cluster_test.exs @@ -3,7 +3,7 @@ defmodule ClusterTest do alias ExTypesense.TestSchema.Credential alias OpenApiTypesense.ApiResponse - alias OpenApiTypesense.ApiStatsResponse + alias OpenApiTypesense.APIStatsResponse alias OpenApiTypesense.Connection alias OpenApiTypesense.HealthStatus alias OpenApiTypesense.SuccessStatus @@ -25,7 +25,7 @@ defmodule ClusterTest do conn = %{api_key: nil, host: nil, port: nil, scheme: nil} assert_raise FunctionClauseError, fn -> - ExTypesense.health(conn) + ExTypesense.health(conn: conn) end end @@ -53,14 +53,14 @@ defmodule ClusterTest do test "error: health check, with incorrect port number" do conn = %{api_key: "xyz", host: "localhost", port: 8100, scheme: "http"} - assert {:error, "connection refused"} = ExTypesense.health(conn) + assert {:error, "connection refused"} = ExTypesense.health(conn: conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "error: health check, with incorrect host" do conn = %{api_key: "xyz", host: "my_test_host", port: 8108, scheme: "http"} - assert {:error, "non-existing domain"} = ExTypesense.health(conn) + assert {:error, "non-existing domain"} = ExTypesense.health(conn: conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -72,7 +72,7 @@ defmodule ClusterTest do scheme: "http" } - assert {:error, @forbidden} = ExTypesense.list_collections(conn) + assert {:error, @forbidden} = ExTypesense.list_collections(conn: conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -84,7 +84,7 @@ defmodule ClusterTest do scheme: "http" } - assert {:error, @forbidden} = ExTypesense.list_collections(conn) + assert {:error, @forbidden} = ExTypesense.list_collections(conn: conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -103,70 +103,72 @@ defmodule ClusterTest do |> Map.put(:host, conn.node) |> Map.put(:api_key, conn.secret_key) - assert {:ok, %HealthStatus{ok: true}} = ExTypesense.health(conn) + assert {:ok, %HealthStatus{ok: true}} = ExTypesense.health(conn: conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "health", %{conn: conn, map_conn: map_conn} do assert {:ok, %HealthStatus{ok: true}} = ExTypesense.health() assert {:ok, _} = ExTypesense.health([]) - assert {:ok, _} = ExTypesense.health(conn) - assert {:ok, _} = ExTypesense.health(map_conn) - assert {:ok, _} = ExTypesense.health(conn, []) - assert {:ok, _} = ExTypesense.health(map_conn, []) + assert {:ok, _} = ExTypesense.health(conn: conn) + assert {:ok, _} = ExTypesense.health(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "api status", %{conn: conn, map_conn: map_conn} do - assert {:ok, %ApiStatsResponse{}} = ExTypesense.api_stats() + assert {:ok, %APIStatsResponse{}} = ExTypesense.api_stats() assert {:ok, _} = ExTypesense.api_stats([]) - assert {:ok, _} = ExTypesense.api_stats(conn) - assert {:ok, _} = ExTypesense.api_stats(map_conn) - assert {:ok, _} = ExTypesense.api_stats(conn, []) - assert {:ok, _} = ExTypesense.api_stats(map_conn, []) + assert {:ok, _} = ExTypesense.api_stats(conn: conn) + assert {:ok, _} = ExTypesense.api_stats(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "cluster metrics", %{conn: conn, map_conn: map_conn} do assert {:ok, %{}} = ExTypesense.cluster_metrics() assert {:ok, _} = ExTypesense.cluster_metrics([]) - assert {:ok, _} = ExTypesense.cluster_metrics(conn) - assert {:ok, _} = ExTypesense.cluster_metrics(map_conn) - assert {:ok, _} = ExTypesense.cluster_metrics(conn, []) - assert {:ok, _} = ExTypesense.cluster_metrics(map_conn, []) + assert {:ok, _} = ExTypesense.cluster_metrics(conn: conn) + assert {:ok, _} = ExTypesense.cluster_metrics(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "create snapshot", %{conn: conn, map_conn: map_conn} do - opts = [snapshot_path: "/tmp/typesense-data-snapshot"] + path = "/tmp/typesense-data-snapshot" - assert {:ok, %SuccessStatus{success: true}} = ExTypesense.create_snapshot(opts) + assert {:ok, %SuccessStatus{success: true}} = ExTypesense.create_snapshot(snapshot_path: path) Process.sleep(@rate_limit) - assert {:ok, %SuccessStatus{success: true}} = ExTypesense.create_snapshot(conn, opts) + + assert {:ok, %SuccessStatus{success: true}} = + ExTypesense.create_snapshot(snapshot_path: path, conn: conn) + + Process.sleep(@rate_limit) + + assert {:ok, %SuccessStatus{success: true}} = + ExTypesense.create_snapshot(snapshot_path: path, conn: map_conn) Process.sleep(@rate_limit) - assert {:ok, %SuccessStatus{success: true}} = ExTypesense.create_snapshot(map_conn, opts) + opts = [snapshot_path: path, conn: conn] + assert {:ok, %SuccessStatus{success: true}} = ExTypesense.create_snapshot(opts) + + Process.sleep(@rate_limit) + opts = [snapshot_path: path, conn: map_conn] + assert {:ok, %SuccessStatus{success: true}} = ExTypesense.create_snapshot(opts) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "compact DB", %{conn: conn, map_conn: map_conn} do assert {:ok, %SuccessStatus{success: true}} = ExTypesense.compact_db() assert {:ok, _} = ExTypesense.compact_db([]) - assert {:ok, _} = ExTypesense.compact_db(conn) - assert {:ok, _} = ExTypesense.compact_db(map_conn) - assert {:ok, _} = ExTypesense.compact_db(conn, []) - assert {:ok, _} = ExTypesense.compact_db(map_conn, []) + assert {:ok, _} = ExTypesense.compact_db(conn: conn) + assert {:ok, _} = ExTypesense.compact_db(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "clear cache", %{conn: conn, map_conn: map_conn} do assert {:ok, %SuccessStatus{success: true}} = ExTypesense.clear_cache() assert {:ok, _} = ExTypesense.clear_cache([]) - assert {:ok, _} = ExTypesense.clear_cache(conn) - assert {:ok, _} = ExTypesense.clear_cache(map_conn) - assert {:ok, _} = ExTypesense.clear_cache(conn, []) - assert {:ok, _} = ExTypesense.clear_cache(map_conn, []) + assert {:ok, _} = ExTypesense.clear_cache(conn: conn) + assert {:ok, _} = ExTypesense.clear_cache(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -174,20 +176,16 @@ defmodule ClusterTest do config = %{"log_slow_requests_time_ms" => 2_000} assert {:ok, %SuccessStatus{success: true}} = ExTypesense.toggle_slow_request_log(config) assert {:ok, _} = ExTypesense.toggle_slow_request_log(config, []) - assert {:ok, _} = ExTypesense.toggle_slow_request_log(conn, config) - assert {:ok, _} = ExTypesense.toggle_slow_request_log(map_conn, config) - assert {:ok, _} = ExTypesense.toggle_slow_request_log(conn, config, []) - assert {:ok, _} = ExTypesense.toggle_slow_request_log(map_conn, config, []) + assert {:ok, _} = ExTypesense.toggle_slow_request_log(config, conn: conn) + assert {:ok, _} = ExTypesense.toggle_slow_request_log(config, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "re-elect leader (vote)", %{conn: conn, map_conn: map_conn} do assert {:ok, %SuccessStatus{success: false}} = ExTypesense.vote() assert {:ok, _} = ExTypesense.vote([]) - assert {:ok, _} = ExTypesense.vote(conn) - assert {:ok, _} = ExTypesense.vote(map_conn) - assert {:ok, _} = ExTypesense.vote(conn, []) - assert {:ok, _} = ExTypesense.vote(map_conn, []) + assert {:ok, _} = ExTypesense.vote(conn: conn) + assert {:ok, _} = ExTypesense.vote(conn: map_conn) end @tag ["28.0": true, "27.1": false, "27.0": false, "26.0": false] @@ -196,9 +194,7 @@ defmodule ClusterTest do assert length(schemas) >= 0 assert {:ok, _} = ExTypesense.get_schema_changes([]) - assert {:ok, _} = ExTypesense.get_schema_changes(conn) - assert {:ok, _} = ExTypesense.get_schema_changes(map_conn) - assert {:ok, _} = ExTypesense.get_schema_changes(conn, []) - assert {:ok, _} = ExTypesense.get_schema_changes(map_conn, []) + assert {:ok, _} = ExTypesense.get_schema_changes(conn: conn) + assert {:ok, _} = ExTypesense.get_schema_changes(conn: map_conn) end end diff --git a/test/collection_test.exs b/test/collection_test.exs index 731419a..d6990ee 100644 --- a/test/collection_test.exs +++ b/test/collection_test.exs @@ -51,16 +51,10 @@ defmodule CollectionTest do ExTypesense.create_collection(schema, []) assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(conn, schema) + ExTypesense.create_collection(schema, conn: conn) assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(map_conn, schema) - - assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(conn, schema, []) - - assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(map_conn, schema, []) + ExTypesense.create_collection(schema, conn: map_conn) assert {:ok, %CollectionResponse{name: ^prod_name}} = ExTypesense.create_collection(Product) @@ -68,16 +62,10 @@ defmodule CollectionTest do ExTypesense.create_collection(Product, []) assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(conn, Product) - - assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(map_conn, Product) + ExTypesense.create_collection(Product, conn: conn) assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(conn, Product, []) - - assert {:error, %ApiResponse{message: _already_exist}} = - ExTypesense.create_collection(map_conn, Product, []) + ExTypesense.create_collection(Product, conn: map_conn) assert {:ok, %CollectionResponse{name: ^name}} = ExTypesense.get_collection(name) assert {:ok, %CollectionResponse{name: ^prod_name}} = ExTypesense.get_collection(Product) @@ -87,10 +75,10 @@ defmodule CollectionTest do test "success: list all collections", %{conn: conn, map_conn: map_conn} do assert {:ok, _} = ExTypesense.list_collections() assert {:ok, _} = ExTypesense.list_collections(exclude_fields: "fields") - assert {:ok, _} = ExTypesense.list_collections(conn) - assert {:ok, _} = ExTypesense.list_collections(map_conn) - assert {:ok, _} = ExTypesense.list_collections(conn, []) - assert {:ok, _} = ExTypesense.list_collections(map_conn, []) + assert {:ok, _} = ExTypesense.list_collections(conn: conn) + assert {:ok, _} = ExTypesense.list_collections(conn: map_conn) + assert {:ok, _} = ExTypesense.list_collections(conn: conn, exclude_fields: "fields") + assert {:ok, _} = ExTypesense.list_collections(conn: map_conn, exclude_fields: "fields") end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -107,16 +95,10 @@ defmodule CollectionTest do ExTypesense.clone_collection(name, "new_v", []) assert {:ok, %CollectionResponse{name: "new_w"}} = - ExTypesense.clone_collection(conn, name, "new_w") + ExTypesense.clone_collection(name, "new_w", conn: conn) assert {:ok, %CollectionResponse{name: "new_x"}} = - ExTypesense.clone_collection(map_conn, name, "new_x") - - assert {:ok, %CollectionResponse{name: "new_y"}} = - ExTypesense.clone_collection(conn, name, "new_y", []) - - assert {:ok, %CollectionResponse{name: "new_z"}} = - ExTypesense.clone_collection(map_conn, name, "new_z", []) + ExTypesense.clone_collection(name, "new_x", conn: map_conn) assert {:ok, %CollectionResponse{name: "prod_u"}} = ExTypesense.clone_collection(Product, "prod_u") @@ -125,16 +107,10 @@ defmodule CollectionTest do ExTypesense.clone_collection(Product, "prod_v", []) assert {:ok, %CollectionResponse{name: "prod_w"}} = - ExTypesense.clone_collection(conn, Product, "prod_w") + ExTypesense.clone_collection(Product, "prod_w", conn: conn) assert {:ok, %CollectionResponse{name: "prod_x"}} = - ExTypesense.clone_collection(map_conn, Product, "prod_x") - - assert {:ok, %CollectionResponse{name: "prod_y"}} = - ExTypesense.clone_collection(conn, Product, "prod_y", []) - - assert {:ok, %CollectionResponse{name: "prod_z"}} = - ExTypesense.clone_collection(map_conn, Product, "prod_z", []) + ExTypesense.clone_collection(Product, "prod_x", conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -151,12 +127,13 @@ defmodule CollectionTest do assert {:ok, %CollectionResponse{name: p_coll_name}} = ExTypesense.create_collection_with_alias(Product) - assert {:error, %ApiResponse{}} = ExTypesense.create_collection_with_alias(conn, Product) - assert {:error, %ApiResponse{}} = ExTypesense.create_collection_with_alias(map_conn, Product) - assert {:error, %ApiResponse{}} = ExTypesense.create_collection_with_alias(conn, Product, []) + assert {:error, %ApiResponse{}} = ExTypesense.create_collection_with_alias(Product, []) assert {:error, %ApiResponse{}} = - ExTypesense.create_collection_with_alias(map_conn, Product, []) + ExTypesense.create_collection_with_alias(Product, conn: conn) + + assert {:error, %ApiResponse{}} = + ExTypesense.create_collection_with_alias(Product, conn: map_conn) assert {:ok, %CollectionResponse{name: ^p_coll_name}} = ExTypesense.get_collection(Product) @@ -184,10 +161,8 @@ defmodule CollectionTest do }} = ExTypesense.upsert_collection_alias(name <> "_alias", name) assert {:ok, _} = ExTypesense.upsert_collection_alias(name <> "_alias", name, []) - assert {:ok, _} = ExTypesense.upsert_collection_alias(conn, name <> "_alias", name) - assert {:ok, _} = ExTypesense.upsert_collection_alias(map_conn, name <> "_alias", name) - assert {:ok, _} = ExTypesense.upsert_collection_alias(conn, name <> "_alias", name, []) - assert {:ok, _} = ExTypesense.upsert_collection_alias(map_conn, name <> "_alias", name, []) + assert {:ok, _} = ExTypesense.upsert_collection_alias(name <> "_alias", name, conn: conn) + assert {:ok, _} = ExTypesense.upsert_collection_alias(name <> "_alias", name, conn: map_conn) assert {:ok, %CollectionAlias{ @@ -203,28 +178,26 @@ defmodule CollectionTest do assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(alias_name) assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(alias_name, []) - assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(conn, alias_name) - assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(map_conn, alias_name) - assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(conn, alias_name, []) - assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(map_conn, alias_name, []) + assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(alias_name, conn: conn) + + assert {:ok, %CollectionAlias{}} = + ExTypesense.get_collection_alias(alias_name, conn: map_conn) assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(alias_prod_name) assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(alias_prod_name, []) - assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(conn, alias_prod_name) - assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(map_conn, alias_prod_name) - assert {:ok, %CollectionAlias{}} = ExTypesense.get_collection_alias(conn, alias_prod_name, []) assert {:ok, %CollectionAlias{}} = - ExTypesense.get_collection_alias(map_conn, alias_prod_name, []) + ExTypesense.get_collection_alias(alias_prod_name, conn: conn) + + assert {:ok, %CollectionAlias{}} = + ExTypesense.get_collection_alias(alias_prod_name, conn: map_conn) assert {:ok, %CollectionAliasesResponse{aliases: aliases}} = ExTypesense.list_collection_aliases() assert {:ok, _} = ExTypesense.list_collection_aliases([]) - assert {:ok, _} = ExTypesense.list_collection_aliases(conn) - assert {:ok, _} = ExTypesense.list_collection_aliases(map_conn) - assert {:ok, _} = ExTypesense.list_collection_aliases(conn, []) - assert {:ok, _} = ExTypesense.list_collection_aliases(map_conn, []) + assert {:ok, _} = ExTypesense.list_collection_aliases(conn: conn) + assert {:ok, _} = ExTypesense.list_collection_aliases(conn: map_conn) assert aliases >= 0 end @@ -236,34 +209,32 @@ defmodule CollectionTest do assert {:error, %ApiResponse{message: ^message}} = ExTypesense.drop_collection(coll_name) assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(coll_name, []) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(conn, coll_name) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(map_conn, coll_name) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(conn, coll_name, []) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(map_conn, coll_name, []) + assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(coll_name, conn: conn) + assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(coll_name, conn: map_conn) assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(Product) assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(Product, []) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(conn, Product) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(map_conn, Product) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(conn, Product, []) - assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(map_conn, Product, []) + assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(Product, conn: conn) + assert {:error, %ApiResponse{}} = ExTypesense.drop_collection(Product, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "error: get unknown collection", %{conn: conn, map_conn: map_conn} do assert {:error, %ApiResponse{message: "Not Found"}} = ExTypesense.get_collection("xyz") - assert {:error, %ApiResponse{message: "Not Found"}} = ExTypesense.get_collection(conn, "xyz") assert {:error, %ApiResponse{message: "Not Found"}} = - ExTypesense.get_collection(map_conn, "xyz") + ExTypesense.get_collection("xyz", conn: conn) + + assert {:error, %ApiResponse{message: "Not Found"}} = + ExTypesense.get_collection("xyz", conn: map_conn) assert {:error, %ApiResponse{message: "Not Found"}} = ExTypesense.get_collection(Product) assert {:error, %ApiResponse{message: "Not Found"}} = - ExTypesense.get_collection(conn, Product) + ExTypesense.get_collection(Product, conn: conn) assert {:error, %ApiResponse{message: "Not Found"}} = - ExTypesense.get_collection(map_conn, Product) + ExTypesense.get_collection(Product, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -300,40 +271,29 @@ defmodule CollectionTest do ExTypesense.update_collection_fields(schema.name, fields, []) assert {:error, %ApiResponse{}} = - ExTypesense.update_collection_fields(conn, schema.name, fields) - - assert {:error, %ApiResponse{}} = - ExTypesense.update_collection_fields(map_conn, schema.name, fields) - - assert {:error, %ApiResponse{}} = - ExTypesense.update_collection_fields(conn, schema.name, fields, []) + ExTypesense.update_collection_fields(schema.name, fields, conn: conn) assert {:error, %ApiResponse{}} = - ExTypesense.update_collection_fields(map_conn, schema.name, fields, []) + ExTypesense.update_collection_fields(schema.name, fields, conn: map_conn) assert {:error, %ApiResponse{}} = ExTypesense.update_collection_fields(Product, fields) assert {:error, %ApiResponse{}} = ExTypesense.update_collection_fields(Product, fields, []) - assert {:error, %ApiResponse{}} = ExTypesense.update_collection_fields(conn, Product, fields) assert {:error, %ApiResponse{}} = - ExTypesense.update_collection_fields(map_conn, Product, fields) + ExTypesense.update_collection_fields(Product, fields, conn: conn) assert {:error, %ApiResponse{}} = - ExTypesense.update_collection_fields(map_conn, Product, fields) + ExTypesense.update_collection_fields(Product, fields, conn: map_conn) assert {:ok, collection} = ExTypesense.get_collection(schema.name) assert {:ok, _} = ExTypesense.get_collection(schema.name, []) - assert {:ok, _} = ExTypesense.get_collection(conn, schema.name) - assert {:ok, _} = ExTypesense.get_collection(map_conn, schema.name) - assert {:ok, _} = ExTypesense.get_collection(conn, schema.name, []) - assert {:ok, _} = ExTypesense.get_collection(map_conn, schema.name, []) + assert {:ok, _} = ExTypesense.get_collection(schema.name, conn: conn) + assert {:ok, _} = ExTypesense.get_collection(schema.name, conn: map_conn) assert {:error, _} = ExTypesense.get_collection(Product) assert {:error, _} = ExTypesense.get_collection(Product, []) - assert {:error, _} = ExTypesense.get_collection(conn, Product) - assert {:error, _} = ExTypesense.get_collection(map_conn, Product) - assert {:error, _} = ExTypesense.get_collection(conn, Product, []) - assert {:error, _} = ExTypesense.get_collection(map_conn, Product, []) + assert {:error, _} = ExTypesense.get_collection(Product, conn: conn) + assert {:error, _} = ExTypesense.get_collection(Product, conn: map_conn) test = Enum.find(collection.fields, fn map -> map.name === "test" end) @@ -352,10 +312,8 @@ defmodule CollectionTest do assert {:error, %ApiResponse{message: "Not Found"}} = ExTypesense.get_collection_alias("xyz") assert {:ok, _} = ExTypesense.get_collection_alias(alias_name) assert {:ok, _} = ExTypesense.get_collection_alias(alias_name, []) - assert {:ok, _} = ExTypesense.get_collection_alias(conn, alias_name) - assert {:ok, _} = ExTypesense.get_collection_alias(map_conn, alias_name) - assert {:ok, _} = ExTypesense.get_collection_alias(conn, alias_name, []) - assert {:ok, _} = ExTypesense.get_collection_alias(map_conn, alias_name, []) + assert {:ok, _} = ExTypesense.get_collection_alias(alias_name, conn: conn) + assert {:ok, _} = ExTypesense.get_collection_alias(alias_name, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -371,12 +329,10 @@ defmodule CollectionTest do assert {:ok, %CollectionAlias{}} = ExTypesense.delete_collection_alias(alias_name) assert {:error, %ApiResponse{}} = ExTypesense.delete_collection_alias(alias_name, []) - assert {:error, %ApiResponse{}} = ExTypesense.delete_collection_alias(conn, alias_name) - assert {:error, %ApiResponse{}} = ExTypesense.delete_collection_alias(map_conn, alias_name) - assert {:error, %ApiResponse{}} = ExTypesense.delete_collection_alias(conn, alias_name, []) + assert {:error, %ApiResponse{}} = ExTypesense.delete_collection_alias(alias_name, conn: conn) assert {:error, %ApiResponse{}} = - ExTypesense.delete_collection_alias(map_conn, alias_name, []) + ExTypesense.delete_collection_alias(alias_name, conn: map_conn) assert {:error, %ApiResponse{message: "Not Found"}} === ExTypesense.get_collection_alias(alias_name) diff --git a/test/conversation_test.exs b/test/conversation_test.exs index bc6e847..2b4cfe1 100644 --- a/test/conversation_test.exs +++ b/test/conversation_test.exs @@ -37,10 +37,8 @@ defmodule ConversationTest do assert {:ok, models} = ExTypesense.list_models() assert length(models) >= 0 assert {:ok, _} = ExTypesense.list_models([]) - assert {:ok, _} = ExTypesense.list_models(conn) - assert {:ok, _} = ExTypesense.list_models(map_conn) - assert {:ok, _} = ExTypesense.list_models(conn, []) - assert {:ok, _} = ExTypesense.list_models(map_conn, []) + assert {:ok, _} = ExTypesense.list_models(conn: conn) + assert {:ok, _} = ExTypesense.list_models(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -49,10 +47,8 @@ defmodule ConversationTest do ExTypesense.get_model("non-existent") assert {:error, _} = ExTypesense.get_model("xyz", []) - assert {:error, _} = ExTypesense.get_model(conn, "xyz") - assert {:error, _} = ExTypesense.get_model(map_conn, "xyz") - assert {:error, _} = ExTypesense.get_model(conn, "xyz", []) - assert {:error, _} = ExTypesense.get_model(map_conn, "xyz", []) + assert {:error, _} = ExTypesense.get_model("xyz", conn: conn) + assert {:error, _} = ExTypesense.get_model("xyz", conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -61,10 +57,8 @@ defmodule ConversationTest do ExTypesense.delete_model("non-existent") assert {:error, _} = ExTypesense.delete_model("xyz", []) - assert {:error, _} = ExTypesense.delete_model(conn, "xyz") - assert {:error, _} = ExTypesense.delete_model(map_conn, "xyz") - assert {:error, _} = ExTypesense.delete_model(conn, "xyz", []) - assert {:error, _} = ExTypesense.delete_model(map_conn, "xyz", []) + assert {:error, _} = ExTypesense.delete_model("xyz", conn: conn) + assert {:error, _} = ExTypesense.delete_model("xyz", conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -94,10 +88,8 @@ defmodule ConversationTest do ]) === true assert {:error, _} = ExTypesense.create_model(body, []) - assert {:error, _} = ExTypesense.create_model(conn, body) - assert {:error, _} = ExTypesense.create_model(map_conn, body) - assert {:error, _} = ExTypesense.create_model(conn, body, []) - assert {:error, _} = ExTypesense.create_model(map_conn, body, []) + assert {:error, _} = ExTypesense.create_model(body, conn: conn) + assert {:error, _} = ExTypesense.create_model(body, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -121,9 +113,7 @@ defmodule ConversationTest do assert {:error, %ApiResponse{message: _}} = ExTypesense.update_model(model_id, body) assert {:error, _} = ExTypesense.update_model(model_id, body) assert {:error, _} = ExTypesense.update_model(model_id, body, []) - assert {:error, _} = ExTypesense.update_model(conn, model_id, body) - assert {:error, _} = ExTypesense.update_model(map_conn, model_id, body) - assert {:error, _} = ExTypesense.update_model(conn, model_id, body, []) - assert {:error, _} = ExTypesense.update_model(map_conn, model_id, body, []) + assert {:error, _} = ExTypesense.update_model(model_id, body, conn: conn) + assert {:error, _} = ExTypesense.update_model(model_id, body, conn: map_conn) end end diff --git a/test/curation_test.exs b/test/curation_test.exs index d710d96..db98565 100644 --- a/test/curation_test.exs +++ b/test/curation_test.exs @@ -56,50 +56,38 @@ defmodule CurationTest do ExTypesense.upsert_override(schema.name, name, body) assert {:ok, _} = ExTypesense.upsert_override(schema.name, name, body, []) - assert {:ok, _} = ExTypesense.upsert_override(conn, schema.name, name, body) - assert {:ok, _} = ExTypesense.upsert_override(map_conn, schema.name, name, body) - assert {:ok, _} = ExTypesense.upsert_override(conn, schema.name, name, body, []) - assert {:ok, _} = ExTypesense.upsert_override(map_conn, schema.name, name, body, []) + assert {:ok, _} = ExTypesense.upsert_override(schema.name, name, body, conn: conn) + assert {:ok, _} = ExTypesense.upsert_override(schema.name, name, body, conn: map_conn) assert {:ok, %SearchOverride{id: ^name}} = ExTypesense.upsert_override(House, name, body) assert {:ok, _} = ExTypesense.upsert_override(House, name, body, []) - assert {:ok, _} = ExTypesense.upsert_override(conn, House, name, body) - assert {:ok, _} = ExTypesense.upsert_override(map_conn, House, name, body) - assert {:ok, _} = ExTypesense.upsert_override(conn, House, name, body, []) - assert {:ok, _} = ExTypesense.upsert_override(map_conn, House, name, body, []) + assert {:ok, _} = ExTypesense.upsert_override(House, name, body, conn: conn) + assert {:ok, _} = ExTypesense.upsert_override(House, name, body, conn: map_conn) assert {:ok, %SearchOverride{id: ^name}} = ExTypesense.get_override(schema.name, name) assert {:ok, _} = ExTypesense.get_override(schema.name, name, []) - assert {:ok, _} = ExTypesense.get_override(conn, schema.name, name) - assert {:ok, _} = ExTypesense.get_override(map_conn, schema.name, name) - assert {:ok, _} = ExTypesense.get_override(conn, schema.name, name, []) - assert {:ok, _} = ExTypesense.get_override(map_conn, schema.name, name, []) + assert {:ok, _} = ExTypesense.get_override(schema.name, name, conn: conn) + assert {:ok, _} = ExTypesense.get_override(schema.name, name, conn: map_conn) assert {:ok, %SearchOverride{id: ^name}} = ExTypesense.get_override(House, name) assert {:ok, _} = ExTypesense.get_override(House, name, []) - assert {:ok, _} = ExTypesense.get_override(conn, House, name) - assert {:ok, _} = ExTypesense.get_override(map_conn, House, name) - assert {:ok, _} = ExTypesense.get_override(conn, House, name, []) - assert {:ok, _} = ExTypesense.get_override(map_conn, House, name, []) + assert {:ok, _} = ExTypesense.get_override(House, name, conn: conn) + assert {:ok, _} = ExTypesense.get_override(House, name, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "success: list all overrides", %{schema: schema, conn: conn, map_conn: map_conn} do assert {:ok, %SearchOverridesResponse{}} = ExTypesense.list_overrides(schema.name) assert {:ok, _} = ExTypesense.list_overrides(schema.name, []) - assert {:ok, _} = ExTypesense.list_overrides(conn, schema.name) - assert {:ok, _} = ExTypesense.list_overrides(map_conn, schema.name) - assert {:ok, _} = ExTypesense.list_overrides(conn, schema.name, []) - assert {:ok, _} = ExTypesense.list_overrides(map_conn, schema.name, []) + assert {:ok, _} = ExTypesense.list_overrides(schema.name, conn: conn) + assert {:ok, _} = ExTypesense.list_overrides(schema.name, conn: map_conn) assert {:ok, %SearchOverridesResponse{}} = ExTypesense.list_overrides(House) assert {:ok, _} = ExTypesense.list_overrides(House, []) - assert {:ok, _} = ExTypesense.list_overrides(conn, House) - assert {:ok, _} = ExTypesense.list_overrides(map_conn, House) - assert {:ok, _} = ExTypesense.list_overrides(conn, House, []) - assert {:ok, _} = ExTypesense.list_overrides(map_conn, House, []) + assert {:ok, _} = ExTypesense.list_overrides(House, conn: conn) + assert {:ok, _} = ExTypesense.list_overrides(House, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -130,10 +118,8 @@ defmodule CurationTest do assert {:error, %ApiResponse{message: "Could not find that `id`."}} = ExTypesense.delete_override(schema.name, name, []) - assert {:error, _} = ExTypesense.delete_override(conn, schema.name, name) - assert {:error, _} = ExTypesense.delete_override(map_conn, schema.name, name) - assert {:error, _} = ExTypesense.delete_override(conn, schema.name, name, []) - assert {:error, _} = ExTypesense.delete_override(map_conn, schema.name, name, []) + assert {:error, _} = ExTypesense.delete_override(schema.name, name, conn: conn) + assert {:error, _} = ExTypesense.delete_override(schema.name, name, conn: map_conn) assert {:ok, %SearchOverride{id: ^name}} = ExTypesense.upsert_override(House, name, body) @@ -144,9 +130,7 @@ defmodule CurationTest do assert {:error, %ApiResponse{message: "Could not find that `id`."}} = ExTypesense.delete_override(House, name, []) - assert {:error, _} = ExTypesense.delete_override(conn, House, name) - assert {:error, _} = ExTypesense.delete_override(map_conn, House, name) - assert {:error, _} = ExTypesense.delete_override(conn, House, name, []) - assert {:error, _} = ExTypesense.delete_override(map_conn, House, name, []) + assert {:error, _} = ExTypesense.delete_override(House, name, conn: conn) + assert {:error, _} = ExTypesense.delete_override(House, name, conn: map_conn) end end diff --git a/test/debug_test.exs b/test/debug_test.exs index 41b60b4..4a0c3dd 100644 --- a/test/debug_test.exs +++ b/test/debug_test.exs @@ -15,9 +15,7 @@ defmodule DebugTest do test "debug", %{conn: conn, map_conn: map_conn} do assert {:ok, %Debug{version: _}} = ExTypesense.debug() assert {:ok, _} = ExTypesense.debug([]) - assert {:ok, _} = ExTypesense.debug(conn) - assert {:ok, _} = ExTypesense.debug(map_conn) - assert {:ok, _} = ExTypesense.debug(conn, []) - assert {:ok, _} = ExTypesense.debug(map_conn, []) + assert {:ok, _} = ExTypesense.debug(conn: conn) + assert {:ok, _} = ExTypesense.debug(conn: map_conn) end end diff --git a/test/document_test.exs b/test/document_test.exs index 56eb1d8..7af213d 100644 --- a/test/document_test.exs +++ b/test/document_test.exs @@ -84,28 +84,16 @@ defmodule DocumentTest do ExTypesense.get_document(schema.name, unknown_id, []) assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(conn, Person, unknown_id) + ExTypesense.get_document(Person, unknown_id, conn: conn) assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(conn, schema.name, unknown_id) + ExTypesense.get_document(schema.name, unknown_id, conn: conn) assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(map_conn, Person, unknown_id) + ExTypesense.get_document(Person, unknown_id, conn: map_conn) assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(map_conn, schema.name, unknown_id) - - assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(conn, Person, unknown_id, []) - - assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(conn, schema.name, unknown_id, []) - - assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(map_conn, Person, unknown_id, []) - - assert {:error, %ApiResponse{message: ^message}} = - ExTypesense.get_document(map_conn, schema.name, unknown_id, []) + ExTypesense.get_document(schema.name, unknown_id, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -125,20 +113,15 @@ defmodule DocumentTest do assert {:ok, %{id: id, company_name: company_name}} = ExTypesense.index_document(document) assert {:ok, _} = ExTypesense.index_document(coll_name, document) assert {:ok, _} = ExTypesense.index_document(document, []) - assert {:ok, _} = ExTypesense.index_document(conn, document) - assert {:ok, _} = ExTypesense.index_document(conn, coll_name, document) - assert {:ok, _} = ExTypesense.index_document(map_conn, document) - assert {:ok, _} = ExTypesense.index_document(map_conn, coll_name, document) - assert {:ok, _} = ExTypesense.index_document(conn, document, []) - assert {:ok, _} = ExTypesense.index_document(conn, coll_name, document, []) - assert {:ok, _} = ExTypesense.index_document(map_conn, coll_name, document, []) + assert {:ok, _} = ExTypesense.index_document(document, conn: conn) + assert {:ok, _} = ExTypesense.index_document(coll_name, document, conn: conn) + assert {:ok, _} = ExTypesense.index_document(document, conn: map_conn) + assert {:ok, _} = ExTypesense.index_document(coll_name, document, conn: map_conn) assert {:ok, %{id: _}} = ExTypesense.index_document(person) assert {:ok, _} = ExTypesense.index_document(person, []) - assert {:ok, _} = ExTypesense.index_document(conn, person) - assert {:ok, _} = ExTypesense.index_document(map_conn, person) - assert {:ok, _} = ExTypesense.index_document(conn, person, []) - assert {:ok, _} = ExTypesense.index_document(map_conn, person, []) + assert {:ok, _} = ExTypesense.index_document(person, conn: conn) + assert {:ok, _} = ExTypesense.index_document(person, conn: map_conn) assert {:ok, %{company_name: ^company_name}} = ExTypesense.get_document(coll_name, id) end @@ -210,10 +193,8 @@ defmodule DocumentTest do ExTypesense.update_document(updated_document) assert {:ok, _} = ExTypesense.update_document(updated_document, []) - assert {:ok, _} = ExTypesense.update_document(conn, updated_document) - assert {:ok, _} = ExTypesense.update_document(map_conn, updated_document) - assert {:ok, _} = ExTypesense.update_document(conn, updated_document, []) - assert {:ok, _} = ExTypesense.update_document(map_conn, updated_document, []) + assert {:ok, _} = ExTypesense.update_document(updated_document, conn: conn) + assert {:ok, _} = ExTypesense.update_document(updated_document, conn: map_conn) person = %Person{name: "Glark Cable", country: "SZ", persons_id: 233} @@ -229,8 +210,8 @@ defmodule DocumentTest do filter_by: "persons_id:#{person.persons_id}" ) - assert {:ok, _} = ExTypesense.update_document(conn, updated_struct) - assert {:ok, _} = ExTypesense.update_document(map_conn, updated_struct) + assert {:ok, _} = ExTypesense.update_document(updated_struct, conn: conn) + assert {:ok, _} = ExTypesense.update_document(updated_struct, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -250,17 +231,13 @@ defmodule DocumentTest do assert {:ok, _} = ExTypesense.export_documents(schema.name) assert {:ok, _} = ExTypesense.export_documents(schema.name, []) - assert {:ok, _} = ExTypesense.export_documents(conn, schema.name) - assert {:ok, _} = ExTypesense.export_documents(map_conn, schema.name) - assert {:ok, _} = ExTypesense.export_documents(conn, schema.name, []) - assert {:ok, _} = ExTypesense.export_documents(map_conn, schema.name, []) + assert {:ok, _} = ExTypesense.export_documents(schema.name, conn: conn) + assert {:ok, _} = ExTypesense.export_documents(schema.name, conn: map_conn) assert {:ok, _} = ExTypesense.export_documents(Person) assert {:ok, _} = ExTypesense.export_documents(Person, []) - assert {:ok, _} = ExTypesense.export_documents(conn, Person) - assert {:ok, _} = ExTypesense.export_documents(map_conn, Person) - assert {:ok, _} = ExTypesense.export_documents(conn, Person, []) - assert {:ok, _} = ExTypesense.export_documents(map_conn, Person, []) + assert {:ok, _} = ExTypesense.export_documents(Person, conn: conn) + assert {:ok, _} = ExTypesense.export_documents(Person, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -278,16 +255,20 @@ defmodule DocumentTest do ExTypesense.delete_document(document, []) assert {:ok, %OpenApiTypesense.Documents{num_deleted: 0}} = - ExTypesense.delete_document(conn, document, []) + ExTypesense.delete_document(document, conn: conn) assert {:ok, %OpenApiTypesense.Documents{num_deleted: 0}} = - ExTypesense.delete_document(map_conn, document, []) + ExTypesense.delete_document(document, conn: map_conn) assert {:error, _} = ExTypesense.delete_document(schema.name, id, ignore_not_found: false) - assert {:error, _} = ExTypesense.delete_document(conn, schema.name, id) - assert {:error, _} = ExTypesense.delete_document(map_conn, schema.name, id) - assert {:error, _} = ExTypesense.delete_document(conn, schema.name, id, []) - assert {:error, _} = ExTypesense.delete_document(map_conn, schema.name, id, []) + assert {:error, _} = ExTypesense.delete_document(schema.name, id, conn: conn) + assert {:error, _} = ExTypesense.delete_document(schema.name, id, conn: map_conn) + + opts = [conn: conn, ignore_not_found: false] + assert {:error, _} = ExTypesense.delete_document(schema.name, id, opts) + + opts = [conn: map_conn, ignore_not_found: false] + assert {:error, _} = ExTypesense.delete_document(schema.name, id, opts) person = %Person{name: "John Doe", persons_id: 1_111, country: "Scotland"} @@ -299,10 +280,9 @@ defmodule DocumentTest do assert {:ok, %OpenApiTypesense.Documents{num_deleted: 0}} = ExTypesense.delete_document(person, []) - assert {:ok, _} = ExTypesense.delete_document(conn, person) - assert {:ok, _} = ExTypesense.delete_document(map_conn, person) - assert {:ok, _} = ExTypesense.delete_document(conn, person, ignore_not_found: true) - assert {:ok, _} = ExTypesense.delete_document(map_conn, person, []) + assert {:ok, _} = ExTypesense.delete_document(person, conn: conn) + assert {:ok, _} = ExTypesense.delete_document(person, conn: map_conn) + assert {:ok, _} = ExTypesense.delete_document(person, ignore_not_found: true) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -316,11 +296,9 @@ defmodule DocumentTest do ExTypesense.delete_document(person) assert {:ok, %OpenApiTypesense.Documents{num_deleted: 0}} = - ExTypesense.delete_document(conn, person) + ExTypesense.delete_document(person, conn: conn) - assert {:ok, _} = ExTypesense.delete_document(map_conn, person) - assert {:ok, _} = ExTypesense.delete_document(conn, person, []) - assert {:ok, _} = ExTypesense.delete_document(map_conn, person, []) + assert {:ok, _} = ExTypesense.delete_document(person, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -337,16 +315,10 @@ defmodule DocumentTest do ExTypesense.import_documents(schema.name, multiple_documents, []) assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(conn, schema.name, multiple_documents) - - assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(map_conn, schema.name, multiple_documents) - - assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(conn, schema.name, multiple_documents, []) + ExTypesense.import_documents(schema.name, multiple_documents, conn: conn) assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(map_conn, schema.name, multiple_documents, []) + ExTypesense.import_documents(schema.name, multiple_documents, conn: map_conn) persons = [ %Person{name: "Chackie Jan", country: "BE", persons_id: 1_099}, @@ -360,16 +332,10 @@ defmodule DocumentTest do ExTypesense.import_documents(Person, persons, []) assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(conn, Person, persons) + ExTypesense.import_documents(Person, persons, conn: conn) assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(map_conn, Person, persons) - - assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(conn, Person, persons, []) - - assert {:ok, [%{"success" => true}, %{"success" => true}]} = - ExTypesense.import_documents(map_conn, Person, persons, []) + ExTypesense.import_documents(Person, persons, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -409,8 +375,8 @@ defmodule DocumentTest do assert {:ok, %OpenApiTypesense.Documents{num_deleted: 1, num_updated: nil}} = ExTypesense.delete_all_documents(Person) - assert {:ok, _} = ExTypesense.delete_all_documents(conn, Person) - assert {:ok, _} = ExTypesense.delete_all_documents(map_conn, Person) + assert {:ok, _} = ExTypesense.delete_all_documents(Person, conn: conn) + assert {:ok, _} = ExTypesense.delete_all_documents(Person, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -438,11 +404,8 @@ defmodule DocumentTest do assert {:ok, %{num_deleted: documents_deleted}} = ExTypesense.delete_all_documents(schema.name) - assert {:ok, _} = ExTypesense.delete_all_documents(conn, schema.name) - assert {:ok, _} = ExTypesense.delete_all_documents(map_conn, schema.name) - - assert {:ok, _} = ExTypesense.delete_all_documents(conn, schema.name, []) - assert {:ok, _} = ExTypesense.delete_all_documents(map_conn, schema.name, []) + assert {:ok, _} = ExTypesense.delete_all_documents(schema.name, conn: conn) + assert {:ok, _} = ExTypesense.delete_all_documents(schema.name, conn: map_conn) assert documents_deleted > 0 @@ -465,8 +428,11 @@ defmodule DocumentTest do assert {:ok, %OpenApiTypesense.Documents{num_updated: 2}} = ExTypesense.update_documents_by_query(schema.name, body, opts) - assert {:ok, _} = ExTypesense.update_documents_by_query(conn, schema.name, body, opts) - assert {:ok, _} = ExTypesense.update_documents_by_query(map_conn, schema.name, body, opts) + opts = Keyword.put(opts, :conn, conn) + assert {:ok, _} = ExTypesense.update_documents_by_query(schema.name, body, opts) + + opts = Keyword.put(opts, :conn, map_conn) + assert {:ok, _} = ExTypesense.update_documents_by_query(schema.name, body, opts) persons = [ %Person{name: "Laniel Lay Dewis", country: "GY", persons_id: 466}, @@ -480,8 +446,8 @@ defmodule DocumentTest do assert {:ok, %OpenApiTypesense.Documents{num_updated: 2}} = ExTypesense.update_documents_by_query(Person, body, opts) - assert {:ok, _} = ExTypesense.update_documents_by_query(conn, Person, body, opts) - assert {:ok, _} = ExTypesense.update_documents_by_query(map_conn, Person, body, opts) + assert {:ok, _} = ExTypesense.update_documents_by_query(Person, body, opts) + assert {:ok, _} = ExTypesense.update_documents_by_query(Person, body, opts) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -499,10 +465,16 @@ defmodule DocumentTest do ExTypesense.delete_documents_by_query(Person, filter_by: "persons_id:>=0") assert {:ok, %OpenApiTypesense.Documents{num_deleted: 0}} = - ExTypesense.delete_documents_by_query(conn, Person, filter_by: "persons_id:>=0") + ExTypesense.delete_documents_by_query(Person, + filter_by: "persons_id:>=0", + conn: conn + ) assert {:ok, %OpenApiTypesense.Documents{num_deleted: 0}} = - ExTypesense.delete_documents_by_query(map_conn, Person, filter_by: "persons_id:>=0") + ExTypesense.delete_documents_by_query(Person, + filter_by: "persons_id:>=0", + conn: map_conn + ) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] diff --git a/test/key_test.exs b/test/key_test.exs index 3a256be..532cdd3 100644 --- a/test/key_test.exs +++ b/test/key_test.exs @@ -32,19 +32,15 @@ defmodule KeyTest do test "success: get keys", %{api_key_schema: api_key_schema, conn: conn, map_conn: map_conn} do assert {:ok, api_key} = ExTypesense.create_key(api_key_schema) assert {:ok, _} = ExTypesense.create_key(api_key_schema, []) - assert {:ok, _} = ExTypesense.create_key(conn, api_key_schema) - assert {:ok, _} = ExTypesense.create_key(map_conn, api_key_schema) - assert {:ok, _} = ExTypesense.create_key(conn, api_key_schema, []) - assert {:ok, _} = ExTypesense.create_key(map_conn, api_key_schema, []) + assert {:ok, _} = ExTypesense.create_key(api_key_schema, conn: conn) + assert {:ok, _} = ExTypesense.create_key(api_key_schema, conn: map_conn) key_id = api_key.id assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(key_id) assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(key_id, []) - assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(conn, key_id) - assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(map_conn, key_id) - assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(conn, key_id, []) - assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(map_conn, key_id, []) + assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(key_id, conn: conn) + assert {:ok, %ApiKey{id: ^key_id}} = ExTypesense.get_key(key_id, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -54,19 +50,15 @@ defmodule KeyTest do assert {:ok, %ApiKeyDeleteResponse{id: ^key_id}} = ExTypesense.delete_key(key_id) assert {:error, _} = ExTypesense.delete_key(key_id, []) - assert {:error, _} = ExTypesense.delete_key(conn, key_id) - assert {:error, _} = ExTypesense.delete_key(map_conn, key_id) - assert {:error, _} = ExTypesense.delete_key(conn, key_id, []) - assert {:error, _} = ExTypesense.delete_key(map_conn, key_id, []) + assert {:error, _} = ExTypesense.delete_key(key_id, conn: conn) + assert {:error, _} = ExTypesense.delete_key(key_id, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "success: list all keys", %{conn: conn, map_conn: map_conn} do assert {:ok, %ApiKeysResponse{}} = ExTypesense.list_keys() assert {:ok, _} = ExTypesense.list_keys([]) - assert {:ok, _} = ExTypesense.list_keys(conn) - assert {:ok, _} = ExTypesense.list_keys(map_conn) - assert {:ok, _} = ExTypesense.list_keys(conn, []) - assert {:ok, _} = ExTypesense.list_keys(map_conn, []) + assert {:ok, _} = ExTypesense.list_keys(conn: conn) + assert {:ok, _} = ExTypesense.list_keys(conn: map_conn) end end diff --git a/test/preset_test.exs b/test/preset_test.exs index 9bdc39d..6b53a87 100644 --- a/test/preset_test.exs +++ b/test/preset_test.exs @@ -29,17 +29,13 @@ defmodule PresetTest do assert {:ok, %PresetSchema{name: ^name}} = ExTypesense.upsert_preset(name, body) assert {:ok, _} = ExTypesense.upsert_preset(name, body, []) - assert {:ok, _} = ExTypesense.upsert_preset(conn, name, body) - assert {:ok, _} = ExTypesense.upsert_preset(map_conn, name, body) - assert {:ok, _} = ExTypesense.upsert_preset(conn, name, body, []) - assert {:ok, _} = ExTypesense.upsert_preset(map_conn, name, body, []) + assert {:ok, _} = ExTypesense.upsert_preset(name, body, conn: conn) + assert {:ok, _} = ExTypesense.upsert_preset(name, body, conn: map_conn) assert {:ok, %PresetSchema{name: ^name}} = ExTypesense.get_preset(name) assert {:ok, _} = ExTypesense.get_preset(name, []) - assert {:ok, _} = ExTypesense.get_preset(conn, name) - assert {:ok, _} = ExTypesense.get_preset(map_conn, name) - assert {:ok, _} = ExTypesense.get_preset(conn, name, []) - assert {:ok, _} = ExTypesense.get_preset(map_conn, name, []) + assert {:ok, _} = ExTypesense.get_preset(name, conn: conn) + assert {:ok, _} = ExTypesense.get_preset(name, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -59,19 +55,15 @@ defmodule PresetTest do assert {:ok, %PresetDeleteSchema{name: ^name}} = ExTypesense.delete_preset(name) assert {:error, %ApiResponse{message: "Not found."}} = ExTypesense.delete_preset(name, []) - assert {:error, _} = ExTypesense.delete_preset(conn, name) - assert {:error, _} = ExTypesense.delete_preset(map_conn, name) - assert {:error, _} = ExTypesense.delete_preset(conn, name, []) - assert {:error, _} = ExTypesense.delete_preset(map_conn, name, []) + assert {:error, _} = ExTypesense.delete_preset(name, conn: conn) + assert {:error, _} = ExTypesense.delete_preset(name, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "success: list all search presets", %{conn: conn, map_conn: map_conn} do assert {:ok, %PresetsRetrieveSchema{presets: _}} = ExTypesense.list_presets() assert {:ok, _} = ExTypesense.list_presets([]) - assert {:ok, _} = ExTypesense.list_presets(conn) - assert {:ok, _} = ExTypesense.list_presets(map_conn) - assert {:ok, _} = ExTypesense.list_presets(conn, []) - assert {:ok, _} = ExTypesense.list_presets(map_conn, []) + assert {:ok, _} = ExTypesense.list_presets(conn: conn) + assert {:ok, _} = ExTypesense.list_presets(conn: map_conn) end end diff --git a/test/search_test.exs b/test/search_test.exs index 51be6e7..f9bb0ba 100644 --- a/test/search_test.exs +++ b/test/search_test.exs @@ -91,10 +91,19 @@ defmodule SearchTest do ExTypesense.import_documents(coll_name, shoes) shoes_opts = [q: "sheepskin", query_by: "description", enable_analytics: false] - assert {:ok, %SearchResult{found: 2}} = ExTypesense.search(coll_name, shoes_opts) - assert {:ok, _} = ExTypesense.search(conn, coll_name, shoes_opts) - assert {:ok, _} = ExTypesense.search(map_conn, coll_name, shoes_opts) + + shoes_opts = [q: "sheepskin", query_by: "description", enable_analytics: false, conn: conn] + assert {:ok, _} = ExTypesense.search(coll_name, shoes_opts) + + shoes_opts = [ + q: "sheepskin", + query_by: "description", + enable_analytics: false, + conn: map_conn + ] + + assert {:ok, _} = ExTypesense.search(coll_name, shoes_opts) trucks = [ %Truck{name: "pickup", trucks_id: 902}, @@ -107,35 +116,37 @@ defmodule SearchTest do assert {:ok, _} = ExTypesense.import_documents(Truck, trucks) trucks_opts = [q: "pickup", query_by: "name", enable_analytics: false] + assert {:ok, %SearchResult{found: 2}} = ExTypesense.search(Truck, trucks_opts) + + trucks_opts = [q: "pickup", query_by: "name", enable_analytics: false, conn: conn] + assert {:ok, %SearchResult{found: 2}} = ExTypesense.search(Truck, trucks_opts) + trucks_opts = [q: "pickup", query_by: "name", enable_analytics: false, conn: map_conn] assert {:ok, %SearchResult{found: 2}} = ExTypesense.search(Truck, trucks_opts) - assert {:ok, %SearchResult{found: 2}} = ExTypesense.search(conn, Truck, trucks_opts) - assert {:ok, %SearchResult{found: 2}} = ExTypesense.search(map_conn, Truck, trucks_opts) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "success: search with empty result", %{coll_name: coll_name} do - params = %{ - q: "test", - query_by: "shoe_type" - } - - assert {:ok, %SearchResult{found: 0}} = ExTypesense.search(coll_name, params) + opts = [q: "test", query_by: "shoe_type"] + assert {:ok, %SearchResult{found: 0}} = ExTypesense.search(coll_name, opts) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "success: search with Ecto", %{catalog: catalog, conn: conn, map_conn: map_conn} do - params = [q: "duck", query_by: "name"] - catalog_coll_name = Catalog.__schema__(:source) assert %Ecto.Query{} = Catalog |> where([p], p.id in ^[catalog.catalogs_id]) + opts = [q: "duck", query_by: "name"] + assert %Ecto.Query{from: %Ecto.Query.FromExpr{source: {^catalog_coll_name, _}}} = - ExTypesense.search_ecto(Catalog, params) + ExTypesense.search_ecto(Catalog, opts) - assert %Ecto.Query{} = ExTypesense.search_ecto(conn, Catalog, params) - assert %Ecto.Query{} = ExTypesense.search_ecto(map_conn, Catalog, params) + opts = [q: "duck", query_by: "name", conn: conn] + assert %Ecto.Query{} = ExTypesense.search_ecto(Catalog, opts) + + opts = [q: "duck", query_by: "name", conn: map_conn] + assert %Ecto.Query{} = ExTypesense.search_ecto(Catalog, opts) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -147,10 +158,8 @@ defmodule SearchTest do assert [%Ecto.Query{}, %Ecto.Query{}] = ExTypesense.multi_search_ecto(searches) assert [%Ecto.Query{} | _] = ExTypesense.multi_search_ecto(searches, []) - assert [%Ecto.Query{} | _] = ExTypesense.multi_search_ecto(conn, searches) - assert [%Ecto.Query{} | _] = ExTypesense.multi_search_ecto(map_conn, searches) - assert [%Ecto.Query{} | _] = ExTypesense.multi_search_ecto(conn, searches, []) - assert [%Ecto.Query{} | _] = ExTypesense.multi_search_ecto(map_conn, searches, []) + assert [%Ecto.Query{} | _] = ExTypesense.multi_search_ecto(searches, conn: conn) + assert [%Ecto.Query{} | _] = ExTypesense.multi_search_ecto(searches, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -163,14 +172,14 @@ defmodule SearchTest do assert {:ok, _} = ExTypesense.index_document(catalog) - params = [q: "bulk", query_by: "name"] + opts = [q: "bulk", query_by: "name"] coll_name = Catalog.__schema__(:source) - assert {:ok, %SearchResult{found: 1}} = ExTypesense.search(Catalog, params) + assert {:ok, %SearchResult{found: 1}} = ExTypesense.search(Catalog, opts) assert %Ecto.Query{from: %Ecto.Query.FromExpr{source: {^coll_name, nil}}} = - ExTypesense.search_ecto(Catalog, params) + ExTypesense.search_ecto(Catalog, opts) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -257,13 +266,14 @@ defmodule SearchTest do assert {:ok, %MultiSearchResult{results: [%{found: 0}, %{found: 0}]}} = ExTypesense.multi_search(searches) - params = [enable_analytics: false] + opts = [enable_analytics: false] + assert {:ok, _} = ExTypesense.multi_search(searches, opts) + + opts = [enable_analytics: false, conn: conn] + assert {:ok, _} = ExTypesense.multi_search(searches, opts) - assert {:ok, _} = ExTypesense.multi_search(searches, params) - assert {:ok, _} = ExTypesense.multi_search(conn, searches) - assert {:ok, _} = ExTypesense.multi_search(map_conn, searches) - assert {:ok, _} = ExTypesense.multi_search(conn, searches, params) - assert {:ok, _} = ExTypesense.multi_search(map_conn, searches, params) + opts = [enable_analytics: false, conn: map_conn] + assert {:ok, _} = ExTypesense.multi_search(searches, opts) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -288,12 +298,11 @@ defmodule SearchTest do @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "error: search with non-existent collection" do - params = [q: "duck", query_by: "name"] - + opts = [q: "duck", query_by: "name"] message = "Not found." - assert {:error, %ApiResponse{message: ^message}} = ExTypesense.search("test", params) - assert {:error, %ApiResponse{message: ^message}} = ExTypesense.search_ecto("test", params) + assert {:error, %ApiResponse{message: ^message}} = ExTypesense.search("test", opts) + assert {:error, %ApiResponse{message: ^message}} = ExTypesense.search_ecto("test", opts) defmodule Test do use Ecto.Schema @@ -350,7 +359,7 @@ defmodule SearchTest do end @tag ["28.0": true, "27.1": false, "27.0": false, "26.0": false] - test "success: union multi_search", %{conn: conn, coll_name: coll_name} do + test "success: union multi_search", %{conn: conn, map_conn: map_conn, coll_name: coll_name} do shoes = [ %{ @@ -397,8 +406,11 @@ defmodule SearchTest do } ] + assert {:ok, %MultiSearchResult{results: _results}} = + ExTypesense.multi_search(searches, union: true, conn: conn) + assert {:ok, %MultiSearchResult{results: results}} = - ExTypesense.multi_search(conn, searches, union: true) + ExTypesense.multi_search(searches, union: true, conn: map_conn) assert [%{document: %{shoe_type: "hiking"}} | _rest] = results end diff --git a/test/stemming_test.exs b/test/stemming_test.exs index 052d4e2..d1652c4 100644 --- a/test/stemming_test.exs +++ b/test/stemming_test.exs @@ -52,26 +52,26 @@ defmodule StemmingTest do %{"root" => "person", "word" => "people"}, %{"root" => "child", "word" => "children"}, %{"root" => "goose", "word" => "geese"} - ]} = ExTypesense.import_stemming_dictionary(conn, body, id: id) + ]} = ExTypesense.import_stemming_dictionary(body, id: id, conn: conn) assert {:ok, [ %{"root" => "person", "word" => "people"}, %{"root" => "child", "word" => "children"}, %{"root" => "goose", "word" => "geese"} - ]} = ExTypesense.import_stemming_dictionary(map_conn, body, id: id) + ]} = ExTypesense.import_stemming_dictionary(body, id: id, conn: map_conn) end @tag ["28.0": true, "27.1": false, "27.0": false, "26.0": false] test "success: list stemming dictionaries", %{conn: conn, map_conn: map_conn} do assert {:ok, %OpenApiTypesense.Stemming{}} = ExTypesense.list_stemming_dictionaries() assert {:ok, %OpenApiTypesense.Stemming{}} = ExTypesense.list_stemming_dictionaries([]) - assert {:ok, %OpenApiTypesense.Stemming{}} = ExTypesense.list_stemming_dictionaries(conn) - assert {:ok, %OpenApiTypesense.Stemming{}} = ExTypesense.list_stemming_dictionaries(map_conn) - assert {:ok, %OpenApiTypesense.Stemming{}} = ExTypesense.list_stemming_dictionaries(conn, []) assert {:ok, %OpenApiTypesense.Stemming{}} = - ExTypesense.list_stemming_dictionaries(map_conn, []) + ExTypesense.list_stemming_dictionaries(conn: conn) + + assert {:ok, %OpenApiTypesense.Stemming{}} = + ExTypesense.list_stemming_dictionaries(conn: map_conn) end @tag ["28.0": true, "27.1": false, "27.0": false, "26.0": false] @@ -97,11 +97,11 @@ defmodule StemmingTest do assert {:ok, %StemmingDictionary{id: ^id}} = ExTypesense.get_stemming_dictionary(id) assert {:ok, %StemmingDictionary{id: ^id}} = ExTypesense.get_stemming_dictionary(id, []) - assert {:ok, %StemmingDictionary{id: ^id}} = ExTypesense.get_stemming_dictionary(conn, id) - assert {:ok, %StemmingDictionary{id: ^id}} = ExTypesense.get_stemming_dictionary(map_conn, id) - assert {:ok, %StemmingDictionary{id: ^id}} = ExTypesense.get_stemming_dictionary(conn, id, []) assert {:ok, %StemmingDictionary{id: ^id}} = - ExTypesense.get_stemming_dictionary(map_conn, id, []) + ExTypesense.get_stemming_dictionary(id, conn: conn) + + assert {:ok, %StemmingDictionary{id: ^id}} = + ExTypesense.get_stemming_dictionary(id, conn: map_conn) end end diff --git a/test/stopwords_test.exs b/test/stopwords_test.exs index 556321d..0e29720 100644 --- a/test/stopwords_test.exs +++ b/test/stopwords_test.exs @@ -26,30 +26,24 @@ defmodule StopwordsTest do assert {:ok, %StopwordsSetSchema{id: ^stop_id}} = ExTypesense.upsert_stopword(stop_id, body) assert {:ok, _} = ExTypesense.upsert_stopword(stop_id, body, []) - assert {:ok, _} = ExTypesense.upsert_stopword(conn, stop_id, body) - assert {:ok, _} = ExTypesense.upsert_stopword(map_conn, stop_id, body) - assert {:ok, _} = ExTypesense.upsert_stopword(conn, stop_id, body, []) - assert {:ok, _} = ExTypesense.upsert_stopword(map_conn, stop_id, body, []) + assert {:ok, _} = ExTypesense.upsert_stopword(stop_id, body, conn: conn) + assert {:ok, _} = ExTypesense.upsert_stopword(stop_id, body, conn: map_conn) assert {:ok, %StopwordsSetRetrieveSchema{stopwords: %{id: ^stop_id}}} = ExTypesense.get_stopword(stop_id) assert {:ok, _} = ExTypesense.get_stopword(stop_id) assert {:ok, _} = ExTypesense.get_stopword(stop_id, []) - assert {:ok, _} = ExTypesense.get_stopword(conn, stop_id) - assert {:ok, _} = ExTypesense.get_stopword(map_conn, stop_id) - assert {:ok, _} = ExTypesense.get_stopword(conn, stop_id, []) - assert {:ok, _} = ExTypesense.get_stopword(map_conn, stop_id, []) + assert {:ok, _} = ExTypesense.get_stopword(stop_id, conn: conn) + assert {:ok, _} = ExTypesense.get_stopword(stop_id, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] test "success: list all stopwords", %{conn: conn, map_conn: map_conn} do assert {:ok, %StopwordsSetsRetrieveAllSchema{}} = ExTypesense.list_stopwords() assert {:ok, _} = ExTypesense.list_stopwords([]) - assert {:ok, _} = ExTypesense.list_stopwords(conn) - assert {:ok, _} = ExTypesense.list_stopwords(map_conn) - assert {:ok, _} = ExTypesense.list_stopwords(conn, []) - assert {:ok, _} = ExTypesense.list_stopwords(map_conn, []) + assert {:ok, _} = ExTypesense.list_stopwords(conn: conn) + assert {:ok, _} = ExTypesense.list_stopwords(conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -68,9 +62,7 @@ defmodule StopwordsTest do assert {:error, %ApiResponse{message: "Stopword `stopword_set_countries` not found."}} = ExTypesense.delete_stopword(stop_id, []) - assert {:error, _} = ExTypesense.delete_stopword(conn, stop_id) - assert {:error, _} = ExTypesense.delete_stopword(map_conn, stop_id) - assert {:error, _} = ExTypesense.delete_stopword(conn, stop_id, []) - assert {:error, _} = ExTypesense.delete_stopword(map_conn, stop_id, []) + assert {:error, _} = ExTypesense.delete_stopword(stop_id, conn: conn) + assert {:error, _} = ExTypesense.delete_stopword(stop_id, conn: map_conn) end end diff --git a/test/synonym_test.exs b/test/synonym_test.exs index dfcabb6..ac8eba3 100644 --- a/test/synonym_test.exs +++ b/test/synonym_test.exs @@ -45,10 +45,8 @@ defmodule SynonymTest do assert {:ok, %SearchSynonym{id: ^synonym_id}} = ExTypesense.upsert_synonym(coll_name, synonym_id, body) - assert {:ok, _} = ExTypesense.upsert_synonym(conn, coll_name, synonym_id, body) - assert {:ok, _} = ExTypesense.upsert_synonym(map_conn, coll_name, synonym_id, body) - assert {:ok, _} = ExTypesense.upsert_synonym(conn, coll_name, synonym_id, body, []) - assert {:ok, _} = ExTypesense.upsert_synonym(map_conn, coll_name, synonym_id, body, []) + assert {:ok, _} = ExTypesense.upsert_synonym(coll_name, synonym_id, body, conn: conn) + assert {:ok, _} = ExTypesense.upsert_synonym(coll_name, synonym_id, body, conn: map_conn) body = %{ "root" => "sedan", @@ -61,24 +59,18 @@ defmodule SynonymTest do ExTypesense.upsert_synonym(Car, synonym_id, body) assert {:ok, _} = ExTypesense.upsert_synonym(Car, synonym_id, body, []) - assert {:ok, _} = ExTypesense.upsert_synonym(conn, Car, synonym_id, body) - assert {:ok, _} = ExTypesense.upsert_synonym(map_conn, Car, synonym_id, body) - assert {:ok, _} = ExTypesense.upsert_synonym(conn, Car, synonym_id, body, []) - assert {:ok, _} = ExTypesense.upsert_synonym(map_conn, Car, synonym_id, body, []) + assert {:ok, _} = ExTypesense.upsert_synonym(Car, synonym_id, body, conn: conn) + assert {:ok, _} = ExTypesense.upsert_synonym(Car, synonym_id, body, conn: map_conn) assert {:ok, %SearchSynonymsResponse{}} = ExTypesense.list_synonyms(coll_name) assert {:ok, _} = ExTypesense.list_synonyms(coll_name, []) - assert {:ok, _} = ExTypesense.list_synonyms(conn, coll_name) - assert {:ok, _} = ExTypesense.list_synonyms(map_conn, coll_name) - assert {:ok, _} = ExTypesense.list_synonyms(conn, coll_name, []) - assert {:ok, _} = ExTypesense.list_synonyms(map_conn, coll_name, []) + assert {:ok, _} = ExTypesense.list_synonyms(coll_name, conn: conn) + assert {:ok, _} = ExTypesense.list_synonyms(coll_name, conn: map_conn) assert {:ok, %SearchSynonymsResponse{}} = ExTypesense.list_synonyms(Car) assert {:ok, _} = ExTypesense.list_synonyms(Car, []) - assert {:ok, _} = ExTypesense.list_synonyms(conn, Car) - assert {:ok, _} = ExTypesense.list_synonyms(map_conn, Car) - assert {:ok, _} = ExTypesense.list_synonyms(conn, Car, []) - assert {:ok, _} = ExTypesense.list_synonyms(map_conn, Car, []) + assert {:ok, _} = ExTypesense.list_synonyms(Car, conn: conn) + assert {:ok, _} = ExTypesense.list_synonyms(Car, conn: map_conn) end @tag ["28.0": true, "27.1": true, "27.0": true, "26.0": true] @@ -95,19 +87,17 @@ defmodule SynonymTest do assert {:ok, %SearchSynonym{id: ^syn_id}} = ExTypesense.get_synonym(coll_name, syn_id) assert {:ok, _} = ExTypesense.get_synonym(coll_name, syn_id, []) - assert {:ok, _} = ExTypesense.get_synonym(conn, coll_name, syn_id) - assert {:ok, _} = ExTypesense.get_synonym(map_conn, coll_name, syn_id) - assert {:ok, _} = ExTypesense.get_synonym(conn, coll_name, syn_id, []) - assert {:ok, _} = ExTypesense.get_synonym(map_conn, coll_name, syn_id, []) + assert {:ok, _} = ExTypesense.get_synonym(coll_name, syn_id, conn: conn) + assert {:ok, _} = ExTypesense.get_synonym(coll_name, syn_id, conn: map_conn) assert {:ok, %SearchSynonymDeleteResponse{id: ^syn_id}} = ExTypesense.delete_synonym(coll_name, syn_id) assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(coll_name, syn_id, []) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(conn, coll_name, syn_id) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(map_conn, coll_name, syn_id) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(conn, coll_name, syn_id, []) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(map_conn, coll_name, syn_id, []) + assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(coll_name, syn_id, conn: conn) + + assert {:error, %ApiResponse{}} = + ExTypesense.delete_synonym(coll_name, syn_id, conn: map_conn) body = %{ "root" => "sedan", @@ -119,18 +109,14 @@ defmodule SynonymTest do assert {:ok, %SearchSynonym{id: ^syn_id}} = ExTypesense.upsert_synonym(Car, syn_id, body) assert {:ok, %SearchSynonym{id: ^syn_id}} = ExTypesense.get_synonym(Car, syn_id) assert {:ok, _} = ExTypesense.get_synonym(Car, syn_id, []) - assert {:ok, _} = ExTypesense.get_synonym(conn, Car, syn_id) - assert {:ok, _} = ExTypesense.get_synonym(map_conn, Car, syn_id) - assert {:ok, _} = ExTypesense.get_synonym(conn, Car, syn_id, []) - assert {:ok, _} = ExTypesense.get_synonym(map_conn, Car, syn_id, []) + assert {:ok, _} = ExTypesense.get_synonym(Car, syn_id, conn: conn) + assert {:ok, _} = ExTypesense.get_synonym(Car, syn_id, conn: map_conn) assert {:ok, %SearchSynonymDeleteResponse{id: ^syn_id}} = ExTypesense.delete_synonym(Car, syn_id) assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(Car, syn_id, []) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(conn, Car, syn_id) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(map_conn, Car, syn_id) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(conn, Car, syn_id, []) - assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(map_conn, Car, syn_id, []) + assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(Car, syn_id, conn: conn) + assert {:error, %ApiResponse{}} = ExTypesense.delete_synonym(Car, syn_id, conn: map_conn) end end From ae41bedc1b87b8c5f6bc9eeb6bbe461e5096b47c Mon Sep 17 00:00:00 2001 From: jaeyson Date: Sun, 1 Jun 2025 20:40:56 +0800 Subject: [PATCH 2/4] README and CHANGELOG [skip ci] --- CHANGELOG.md | 10 ++++++++++ README.md | 12 +++++------- mix.exs | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 451a402..3afd2a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## major.minor.patch (yyyy.mm.dd) +## 2.0.0 (2025.06.01) + +### Changed + +* Passing `conn` as part of `opts` when calling a function, as this reduces code duplication. [PR #82](https://github.com/jaeyson/ex_typesense/pull/82) + +### Chore + +* Bumped dev dependencies + ## 1.2.1 (2025.05.11) ### Fixed diff --git a/README.md b/README.md index 193f0bd..74e0155 100644 --- a/README.md +++ b/README.md @@ -88,25 +88,23 @@ > #### Upgrading to v2 {: .warning} > -> Purpose of v2 is to reduce code duplication and to streamline +> Purpose of v2 is to reduce code duplication (from v1) and to streamline > passing of options (including `conn`). The breaking change here > is `conn` is now part of `opts`. > when calling functions, see > example below: ```elixir -# pre-v1 +# pre-v2 Collections.get_collections(conn, opts) -# v1 +# v2 Collections.get_collections(conn: conn) -# another way (v1) +# another way (v2) opts = [limit: 1, conn: conn] Collections.get_collections(opts) ``` -> #### upgrading to `1.0.0` contains **LOTS** of breaking changes. {: .warning} - ## Installation ExTypesense requires Elixir `~> 1.14.x`. Read the [Changelog](CHANGELOG.md) for all available @@ -119,7 +117,7 @@ Add `:ex_typesense` to your list of dependencies in the Elixir project config fi def deps do [ # From default Hex package manager - {:ex_typesense, "~> 1.2"} + {:ex_typesense, "~> 2.0"} # Or from GitHub repository, if you want the latest greatest from main branch {:ex_typesense, git: "https://github.com/jaeyson/ex_typesense.git"} diff --git a/mix.exs b/mix.exs index 8e4ffa2..3c65b09 100644 --- a/mix.exs +++ b/mix.exs @@ -2,7 +2,7 @@ defmodule ExTypesense.MixProject do use Mix.Project @source_url "https://github.com/jaeyson/ex_typesense" - @version "1.2.1" + @version "2.0.0" def project do [ From cb4c48c9f705d2e0f56e8e1550bbb2d00bec85dd Mon Sep 17 00:00:00 2001 From: jaeyson Date: Sun, 1 Jun 2025 20:47:26 +0800 Subject: [PATCH 3/4] update docs [skip ci] --- README.md | 6 +++--- lib/ex_typesense/cluster.ex | 1 - lib/ex_typesense/document.ex | 7 ++++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 74e0155..380a3a1 100644 --- a/README.md +++ b/README.md @@ -95,14 +95,14 @@ ```elixir # pre-v2 -Collections.get_collections(conn, opts) +ExTypesense.list_collections(conn, opts) # v2 -Collections.get_collections(conn: conn) +ExTypesense.list_collections(conn: conn) # another way (v2) opts = [limit: 1, conn: conn] -Collections.get_collections(opts) +ExTypesense.list_collections(opts) ``` ## Installation diff --git a/lib/ex_typesense/cluster.ex b/lib/ex_typesense/cluster.ex index 62d1ba0..b85c8dc 100644 --- a/lib/ex_typesense/cluster.ex +++ b/lib/ex_typesense/cluster.ex @@ -348,7 +348,6 @@ defmodule ExTypesense.Cluster do iex> opts = [conn: conn] iex> ExTypesense.vote(opts) - ``` """ @spec vote(keyword()) :: {:ok, OpenApiTypesense.SuccessStatus.t()} | :error def vote(opts) do diff --git a/lib/ex_typesense/document.ex b/lib/ex_typesense/document.ex index a2e57d8..3cd156f 100644 --- a/lib/ex_typesense/document.ex +++ b/lib/ex_typesense/document.ex @@ -180,6 +180,11 @@ defmodule ExTypesense.Document do > when using maps as documents using [`index_document/1`](`index_document/1`), > you should pass a key named `collection_name`. + > #### on using struct {: .info} + > + > Please refer on this [page](`ExTypesense`) for more info on how to + > setup with Ecto Schema. + ## Options * `action`: "create" (default), "upsert", "update", "emplace" @@ -651,7 +656,7 @@ defmodule ExTypesense.Document do > > As of this writing (v0.5.0), there's no built-in way of deleting > all documents via [Typesense docs](https://github.com/typesense/typesense/issues/1613#issuecomment-1994986258). - > This function uses [`delete_documents_by_query/3`](`delete_documents_by_query/3`) under the hood. + > This function uses [`delete_documents_by_query/2`](`delete_documents_by_query/2`) under the hood. """ @doc since: "1.0.0" @spec delete_all_documents(module() | String.t()) :: From a0def5f54f1cf3b4965ba54e419cb4a74d914175 Mon Sep 17 00:00:00 2001 From: jaeyson Date: Sun, 1 Jun 2025 20:59:47 +0800 Subject: [PATCH 4/4] update README [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 380a3a1..adb9887 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ > > Purpose of v2 is to reduce code duplication (from v1) and to streamline > passing of options (including `conn`). The breaking change here -> is `conn` is now part of `opts`. > when calling functions, see +> is that `conn` is now part of `opts`. > when calling functions, see > example below: ```elixir