Skip to content

Commit 2edd596

Browse files
committed
haz moar test
1 parent f7c54ac commit 2edd596

20 files changed

Lines changed: 716 additions & 92 deletions

.github/workflows/ci.yml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ jobs:
5656
- name: Checkout repo
5757
uses: actions/checkout@v4
5858

59+
- name: Check for misspellings
60+
uses: codespell-project/actions-codespell@v2
61+
5962
- name: Start Typesense
6063
run: |
6164
docker run -d \
@@ -79,6 +82,15 @@ jobs:
7982
otp-version: ${{matrix.otp}}
8083
elixir-version: ${{matrix.elixir}}
8184

85+
- name: Install Dependencies
86+
run: |
87+
mix local.rebar --if-missing
88+
mix local.hex --if-missing
89+
mix deps.get
90+
91+
- name: Compile
92+
run: mix compile
93+
8294
- name: Cache dependencies/builds
8395
uses: actions/cache@v4
8496
with:
@@ -89,12 +101,6 @@ jobs:
89101
restore-keys: |
90102
${{ runner.os }}-typesense-${{ matrix.typesense}}-${{ matrix.otp }}-${{ matrix.elixir }}-mix-
91103
92-
- name: Install Dependencies
93-
run: |
94-
mix local.rebar --if-missing
95-
mix local.hex --if-missing
96-
mix deps.get
97-
98104
- name: Find unused dependencies
99105
run: mix deps.unlock --check-unused
100106
if: ${{ matrix.lint }}

README.md

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# OpenApiTypesense
22

3+
Restful client for Typesense with adherence to Open API spec 3 (formerly Swagger)
4+
35
[![Hex.pm](https://img.shields.io/hexpm/v/open_api_typesense)](https://hex.pm/packages/open_api_typesense)
46
[![Hexdocs.pm](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/open_api_typesense)
57
[![Hex.pm](https://img.shields.io/hexpm/l/open_api_typesense)](https://hexdocs.pm/open_api_typesense/license.html)
@@ -8,24 +10,6 @@
810

911
## TODO
1012
- Custom Http client adapter (currently [`Req`](https://hexdocs.pm/req))
11-
- Tests for each modules not completed yet.
12-
- Where to consume `opts`:
13-
```elixir
14-
def take_snapshot(conn \\ Connection.new(), opts \\ []) do
15-
client = opts[:client] || @default_client
16-
query = Keyword.take(opts, [:snapshot_path])
17-
18-
client.request(conn, %{
19-
args: [],
20-
call: {OpenApiTypesense.Operations, :take_snapshot},
21-
url: "/operations/snapshot",
22-
method: :post,
23-
query: query,
24-
response: [{201, {OpenApiTypesense.SuccessStatus, :t}}],
25-
opts: opts # <-- TODO
26-
})
27-
end
28-
```
2913

3014

3115
## Installation

lib/open_api_typesense/operations/analytics.ex

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,24 @@ defmodule OpenApiTypesense.Analytics do
1212
1313
Sending events for analytics e.g rank search results based on popularity.
1414
"""
15+
@spec create_analytics_event(
16+
OpenApiTypesense.AnalyticsEventCreateSchema.t(),
17+
keyword
18+
) ::
19+
{:ok, OpenApiTypesense.AnalyticsEventCreateResponse.t()}
20+
| {:error, OpenApiTypesense.ApiResponse.t()}
21+
def create_analytics_event(body, opts \\ []) do
22+
create_analytics_event(Connection.new(), body, opts)
23+
end
24+
1525
@spec create_analytics_event(
1626
Connection.t(),
1727
OpenApiTypesense.AnalyticsEventCreateSchema.t(),
1828
keyword
1929
) ::
2030
{:ok, OpenApiTypesense.AnalyticsEventCreateResponse.t()}
2131
| {:error, OpenApiTypesense.ApiResponse.t()}
22-
def create_analytics_event(conn \\ Connection.new(), body, opts \\ []) do
32+
def create_analytics_event(conn, body, opts) do
2333
client = opts[:client] || @default_client
2434

2535
client.request(conn, %{
@@ -42,10 +52,17 @@ defmodule OpenApiTypesense.Analytics do
4252
4353
When an analytics rule is created, we give it a name and describe the type, the source collections and the destination collection.
4454
"""
55+
@spec create_analytics_rule(OpenApiTypesense.AnalyticsRuleSchema.t(), keyword) ::
56+
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
57+
| {:error, OpenApiTypesense.ApiResponse.t()}
58+
def create_analytics_rule(body, opts \\ []) do
59+
create_analytics_rule(Connection.new(), body, opts)
60+
end
61+
4562
@spec create_analytics_rule(Connection.t(), OpenApiTypesense.AnalyticsRuleSchema.t(), keyword) ::
4663
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
4764
| {:error, OpenApiTypesense.ApiResponse.t()}
48-
def create_analytics_rule(conn \\ Connection.new(), body, opts \\ []) do
65+
def create_analytics_rule(conn, body, opts) do
4966
client = opts[:client] || @default_client
5067

5168
client.request(conn, %{
@@ -68,10 +85,17 @@ defmodule OpenApiTypesense.Analytics do
6885
6986
Permanently deletes an analytics rule, given it's name
7087
"""
88+
@spec delete_analytics_rule(String.t(), keyword) ::
89+
{:ok, OpenApiTypesense.AnalyticsRuleDeleteResponse.t()}
90+
| {:error, OpenApiTypesense.ApiResponse.t()}
91+
def delete_analytics_rule(ruleName, opts \\ []) do
92+
delete_analytics_rule(Connection.new(), ruleName, opts)
93+
end
94+
7195
@spec delete_analytics_rule(Connection.t(), String.t(), keyword) ::
7296
{:ok, OpenApiTypesense.AnalyticsRuleDeleteResponse.t()}
7397
| {:error, OpenApiTypesense.ApiResponse.t()}
74-
def delete_analytics_rule(conn \\ Connection.new(), ruleName, opts \\ []) do
98+
def delete_analytics_rule(conn, ruleName, opts) do
7599
client = opts[:client] || @default_client
76100

77101
client.request(conn, %{
@@ -92,10 +116,17 @@ defmodule OpenApiTypesense.Analytics do
92116
93117
Retrieve the details of an analytics rule, given it's name
94118
"""
119+
@spec retrieve_analytics_rule(String.t(), keyword) ::
120+
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
121+
| {:error, OpenApiTypesense.ApiResponse.t()}
122+
def retrieve_analytics_rule(ruleName, opts \\ []) do
123+
retrieve_analytics_rule(Connection.new(), ruleName, opts)
124+
end
125+
95126
@spec retrieve_analytics_rule(Connection.t(), String.t(), keyword) ::
96127
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
97128
| {:error, OpenApiTypesense.ApiResponse.t()}
98-
def retrieve_analytics_rule(conn \\ Connection.new(), ruleName, opts \\ []) do
129+
def retrieve_analytics_rule(conn, ruleName, opts) do
99130
client = opts[:client] || @default_client
100131

101132
client.request(conn, %{
@@ -116,9 +147,15 @@ defmodule OpenApiTypesense.Analytics do
116147
117148
Retrieve the details of all analytics rules
118149
"""
150+
@spec retrieve_analytics_rules(keyword) ::
151+
{:ok, OpenApiTypesense.AnalyticsRulesRetrieveSchema.t()} | :error
152+
def retrieve_analytics_rules(opts \\ []) do
153+
retrieve_analytics_rules(Connection.new(), opts)
154+
end
155+
119156
@spec retrieve_analytics_rules(Connection.t(), keyword) ::
120157
{:ok, OpenApiTypesense.AnalyticsRulesRetrieveSchema.t()} | :error
121-
def retrieve_analytics_rules(conn \\ Connection.new(), opts \\ []) do
158+
def retrieve_analytics_rules(conn, opts) do
122159
client = opts[:client] || @default_client
123160

124161
client.request(conn, %{
@@ -136,6 +173,17 @@ defmodule OpenApiTypesense.Analytics do
136173
137174
Upserts an analytics rule with the given name.
138175
"""
176+
@spec upsert_analytics_rule(
177+
String.t(),
178+
OpenApiTypesense.AnalyticsRuleUpsertSchema.t(),
179+
keyword
180+
) ::
181+
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
182+
| {:error, OpenApiTypesense.ApiResponse.t()}
183+
def upsert_analytics_rule(ruleName, body, opts \\ []) do
184+
upsert_analytics_rule(Connection.new(), ruleName, body, opts)
185+
end
186+
139187
@spec upsert_analytics_rule(
140188
Connection.t(),
141189
String.t(),
@@ -144,7 +192,7 @@ defmodule OpenApiTypesense.Analytics do
144192
) ::
145193
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
146194
| {:error, OpenApiTypesense.ApiResponse.t()}
147-
def upsert_analytics_rule(conn \\ Connection.new(), ruleName, body, opts \\ []) do
195+
def upsert_analytics_rule(conn, ruleName, body, opts) do
148196
client = opts[:client] || @default_client
149197

150198
client.request(conn, %{

lib/open_api_typesense/operations/collections.ex

Lines changed: 75 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,17 @@ defmodule OpenApiTypesense.Collections do
1212
1313
When a collection is created, we give it a name and describe the fields that will be indexed from the documents added to the collection.
1414
"""
15+
@spec create_collection(OpenApiTypesense.CollectionSchema.t(), keyword) ::
16+
{:ok, OpenApiTypesense.CollectionResponse.t()}
17+
| {:error, OpenApiTypesense.ApiResponse.t()}
18+
def create_collection(body, opts \\ []) do
19+
create_collection(Connection.new(), body, opts)
20+
end
21+
1522
@spec create_collection(Connection.t(), OpenApiTypesense.CollectionSchema.t(), keyword) ::
1623
{:ok, OpenApiTypesense.CollectionResponse.t()}
1724
| {:error, OpenApiTypesense.ApiResponse.t()}
18-
def create_collection(conn \\ Connection.new(), body, opts \\ []) do
25+
def create_collection(conn, body, opts) do
1926
client = opts[:client] || @default_client
2027

2128
client.request(conn, %{
@@ -37,9 +44,15 @@ defmodule OpenApiTypesense.Collections do
3744
@doc """
3845
Delete an alias
3946
"""
47+
@spec delete_alias(String.t(), keyword) ::
48+
{:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
49+
def delete_alias(aliasName, opts \\ []) do
50+
delete_alias(Connection.new(), aliasName, opts)
51+
end
52+
4053
@spec delete_alias(Connection.t(), String.t(), keyword) ::
4154
{:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
42-
def delete_alias(conn \\ Connection.new(), aliasName, opts \\ []) do
55+
def delete_alias(conn, aliasName, opts) do
4356
client = opts[:client] || @default_client
4457

4558
client.request(conn, %{
@@ -60,10 +73,17 @@ defmodule OpenApiTypesense.Collections do
6073
6174
Permanently drops a collection. This action cannot be undone. For large collections, this might have an impact on read latencies.
6275
"""
76+
@spec delete_collection(String.t(), keyword) ::
77+
{:ok, OpenApiTypesense.CollectionResponse.t()}
78+
| {:error, OpenApiTypesense.ApiResponse.t()}
79+
def delete_collection(collectionName, opts \\ []) do
80+
delete_collection(Connection.new(), collectionName, opts)
81+
end
82+
6383
@spec delete_collection(Connection.t(), String.t(), keyword) ::
6484
{:ok, OpenApiTypesense.CollectionResponse.t()}
6585
| {:error, OpenApiTypesense.ApiResponse.t()}
66-
def delete_collection(conn \\ Connection.new(), collectionName, opts \\ []) do
86+
def delete_collection(conn, collectionName, opts) do
6787
client = opts[:client] || @default_client
6888

6989
client.request(conn, %{
@@ -84,9 +104,15 @@ defmodule OpenApiTypesense.Collections do
84104
85105
Find out which collection an alias points to by fetching it
86106
"""
107+
@spec get_alias(String.t(), keyword) ::
108+
{:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
109+
def get_alias(aliasName, opts \\ []) do
110+
get_alias(Connection.new(), aliasName, opts)
111+
end
112+
87113
@spec get_alias(Connection.t(), String.t(), keyword) ::
88114
{:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
89-
def get_alias(conn \\ Connection.new(), aliasName, opts \\ []) do
115+
def get_alias(conn, aliasName, opts) do
90116
client = opts[:client] || @default_client
91117

92118
client.request(conn, %{
@@ -107,9 +133,15 @@ defmodule OpenApiTypesense.Collections do
107133
108134
List all aliases and the corresponding collections that they map to.
109135
"""
136+
@spec get_aliases(keyword) ::
137+
{:ok, OpenApiTypesense.CollectionAliasesResponse.t()} | :error
138+
def get_aliases(opts \\ []) do
139+
get_aliases(Connection.new(), opts)
140+
end
141+
110142
@spec get_aliases(Connection.t(), keyword) ::
111143
{:ok, OpenApiTypesense.CollectionAliasesResponse.t()} | :error
112-
def get_aliases(conn \\ Connection.new(), opts \\ []) do
144+
def get_aliases(conn, opts) do
113145
client = opts[:client] || @default_client
114146

115147
client.request(conn, %{
@@ -127,10 +159,17 @@ defmodule OpenApiTypesense.Collections do
127159
128160
Retrieve the details of a collection, given its name.
129161
"""
162+
@spec get_collection(String.t(), keyword) ::
163+
{:ok, OpenApiTypesense.CollectionResponse.t()}
164+
| {:error, OpenApiTypesense.ApiResponse.t()}
165+
def get_collection(collectionName, opts \\ []) do
166+
get_collection(Connection.new(), collectionName, opts)
167+
end
168+
130169
@spec get_collection(Connection.t(), String.t(), keyword) ::
131170
{:ok, OpenApiTypesense.CollectionResponse.t()}
132171
| {:error, OpenApiTypesense.ApiResponse.t()}
133-
def get_collection(conn \\ Connection.new(), collectionName, opts \\ []) do
172+
def get_collection(conn, collectionName, opts) do
134173
client = opts[:client] || @default_client
135174

136175
client.request(conn, %{
@@ -151,9 +190,15 @@ defmodule OpenApiTypesense.Collections do
151190
152191
Returns a summary of all your collections. The collections are returned sorted by creation date, with the most recent collections appearing first.
153192
"""
193+
@spec get_collections(keyword) ::
194+
{:ok, [OpenApiTypesense.CollectionResponse.t()]} | :error
195+
def get_collections(opts \\ []) do
196+
get_collections(Connection.new(), opts)
197+
end
198+
154199
@spec get_collections(Connection.t(), keyword) ::
155200
{:ok, [OpenApiTypesense.CollectionResponse.t()]} | :error
156-
def get_collections(conn \\ Connection.new(), opts \\ []) do
201+
def get_collections(conn, opts) do
157202
client = opts[:client] || @default_client
158203

159204
client.request(conn, %{
@@ -171,6 +216,17 @@ defmodule OpenApiTypesense.Collections do
171216
172217
Update a collection's schema to modify the fields and their types.
173218
"""
219+
@spec update_collection(
220+
String.t(),
221+
OpenApiTypesense.CollectionUpdateSchema.t(),
222+
keyword
223+
) ::
224+
{:ok, OpenApiTypesense.CollectionUpdateSchema.t()}
225+
| {:error, OpenApiTypesense.ApiResponse.t()}
226+
def update_collection(collectionName, body, opts \\ []) do
227+
update_collection(Connection.new(), collectionName, body, opts)
228+
end
229+
174230
@spec update_collection(
175231
Connection.t(),
176232
String.t(),
@@ -179,7 +235,7 @@ defmodule OpenApiTypesense.Collections do
179235
) ::
180236
{:ok, OpenApiTypesense.CollectionUpdateSchema.t()}
181237
| {:error, OpenApiTypesense.ApiResponse.t()}
182-
def update_collection(conn \\ Connection.new(), collectionName, body, opts \\ []) do
238+
def update_collection(conn, collectionName, body, opts) do
183239
client = opts[:client] || @default_client
184240

185241
client.request(conn, %{
@@ -203,14 +259,24 @@ defmodule OpenApiTypesense.Collections do
203259
204260
Create or update a collection alias. An alias is a virtual collection name that points to a real collection. If you're familiar with symbolic links on Linux, it's very similar to that. Aliases are useful when you want to reindex your data in the background on a new collection and switch your application to it without any changes to your code.
205261
"""
262+
@spec upsert_alias(
263+
String.t(),
264+
OpenApiTypesense.CollectionAliasSchema.t(),
265+
keyword
266+
) ::
267+
{:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
268+
def upsert_alias(aliasName, body, opts \\ []) do
269+
upsert_alias(Connection.new(), aliasName, body, opts)
270+
end
271+
206272
@spec upsert_alias(
207273
Connection.t(),
208274
String.t(),
209275
OpenApiTypesense.CollectionAliasSchema.t(),
210276
keyword
211277
) ::
212278
{:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
213-
def upsert_alias(conn \\ Connection.new(), aliasName, body, opts \\ []) do
279+
def upsert_alias(conn, aliasName, body, opts) do
214280
client = opts[:client] || @default_client
215281

216282
client.request(conn, %{

0 commit comments

Comments
 (0)