Skip to content

Commit ab2524c

Browse files
committed
wip moarz tezt
1 parent 569e18d commit ab2524c

25 files changed

Lines changed: 688 additions & 182 deletions

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ jobs:
119119
if: ${{ matrix.lint }}
120120

121121
- name: Run tests
122-
run: mix test --only ${{ matrix.typesense }} --trace
122+
run: mix test --only ${{ matrix.typesense }}:true --trace
123123

124124
- name: Post test coverage to Coveralls
125125
run: mix coveralls.github

lib/open_api_typesense.ex

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,3 @@
11
defmodule OpenApiTypesense do
2-
@moduledoc """
3-
Documentation for `OpenApiTypesense`.
4-
"""
5-
6-
@doc """
7-
Hello world.
8-
9-
## Examples
10-
11-
iex> OpenApiTypesense.hello()
12-
:world
13-
14-
"""
15-
def hello do
16-
:world
17-
end
2+
@moduledoc false
183
end

lib/open_api_typesense/client.ex

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ defmodule OpenApiTypesense.Client do
55
"""
66

77
alias OpenApiTypesense.Connection
8+
alias OpenApiTypesense.ApiResponse
89

910
@typedoc since: "0.2.0"
1011
@type response() ::
1112
{:ok, any()}
12-
| {:error, OpenApiTypesense.ApiResponse.t()}
13+
| {:error, ApiResponse.t()}
1314
| {:error, String.t()}
1415
| :error
1516

@@ -107,13 +108,13 @@ defmodule OpenApiTypesense.Client do
107108
host: conn.host,
108109
port: conn.port,
109110
path: opts[:url],
110-
query: URI.encode_query(opts[:query] || %{})
111+
query: URI.encode_query(opts[:opts] || [])
111112
}
112113

113114
{_req, resp} =
114115
[
115116
method: opts[:method] || :get,
116-
body: Jason.encode!(opts[:body] || nil),
117+
body: opts[:body],
117118
url: url,
118119
retry: retry,
119120
max_retries: max_retries,
@@ -156,17 +157,36 @@ defmodule OpenApiTypesense.Client do
156157
resp =
157158
values
158159
|> Enum.map(fn {module, _func_name} ->
159-
if is_map(module),
160-
do: struct(body, module)
160+
if is_list(body) do
161+
Enum.map(body, fn single_body ->
162+
struct(module, single_body)
163+
end)
164+
else
165+
struct(module, body)
166+
end
161167
end)
162-
|> case do
163-
[nil] -> []
164-
resp -> resp
165-
end
168+
|> List.flatten()
166169

167170
{status, resp}
168171
end
169172

173+
defp parse_values(code, {module, _func_name} = _values, body) when module == :string do
174+
status = if code in 200..299, do: :ok, else: :error
175+
176+
case status do
177+
:ok ->
178+
resp =
179+
body
180+
|> String.splitter("\n")
181+
|> Enum.map(&Jason.decode!/1)
182+
183+
{status, resp}
184+
185+
:error ->
186+
{status, struct(ApiResponse, message: Jason.decode!(body)["error"])}
187+
end
188+
end
189+
170190
defp parse_values(code, {module, _func_name} = _values, body) do
171191
status = if code in 200..299, do: :ok, else: :error
172192

lib/open_api_typesense/operations/analytics.ex

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@ defmodule OpenApiTypesense.Analytics do
1212
1313
Sending events for analytics e.g rank search results based on popularity.
1414
"""
15-
@spec create_analytics_event(OpenApiTypesense.AnalyticsEventCreateSchema.t(), keyword) ::
15+
@spec create_analytics_event(
16+
Connection.t(),
17+
OpenApiTypesense.AnalyticsEventCreateSchema.t(),
18+
keyword
19+
) ::
1620
{:ok, OpenApiTypesense.AnalyticsEventCreateResponse.t()}
1721
| {:error, OpenApiTypesense.ApiResponse.t()}
18-
def create_analytics_event(body, opts \\ []) do
22+
def create_analytics_event(conn \\ Connection.new(), body, opts \\ []) do
1923
client = opts[:client] || @default_client
2024

21-
client.request(%{
25+
client.request(conn, %{
2226
args: [body: body],
2327
call: {OpenApiTypesense.Analytics, :create_analytics_event},
2428
url: "/analytics/events",
@@ -38,13 +42,13 @@ defmodule OpenApiTypesense.Analytics do
3842
3943
When an analytics rule is created, we give it a name and describe the type, the source collections and the destination collection.
4044
"""
41-
@spec create_analytics_rule(OpenApiTypesense.AnalyticsRuleSchema.t(), keyword) ::
45+
@spec create_analytics_rule(Connection.t(), OpenApiTypesense.AnalyticsRuleSchema.t(), keyword) ::
4246
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
4347
| {:error, OpenApiTypesense.ApiResponse.t()}
44-
def create_analytics_rule(body, opts \\ []) do
48+
def create_analytics_rule(conn \\ Connection.new(), body, opts \\ []) do
4549
client = opts[:client] || @default_client
4650

47-
client.request(%{
51+
client.request(conn, %{
4852
args: [body: body],
4953
call: {OpenApiTypesense.Analytics, :create_analytics_rule},
5054
url: "/analytics/rules",
@@ -132,13 +136,18 @@ defmodule OpenApiTypesense.Analytics do
132136
133137
Upserts an analytics rule with the given name.
134138
"""
135-
@spec upsert_analytics_rule(String.t(), OpenApiTypesense.AnalyticsRuleUpsertSchema.t(), keyword) ::
139+
@spec upsert_analytics_rule(
140+
Connection.t(),
141+
String.t(),
142+
OpenApiTypesense.AnalyticsRuleUpsertSchema.t(),
143+
keyword
144+
) ::
136145
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
137146
| {:error, OpenApiTypesense.ApiResponse.t()}
138-
def upsert_analytics_rule(ruleName, body, opts \\ []) do
147+
def upsert_analytics_rule(conn \\ Connection.new(), ruleName, body, opts \\ []) do
139148
client = opts[:client] || @default_client
140149

141-
client.request(%{
150+
client.request(conn, %{
142151
args: [ruleName: ruleName, body: body],
143152
call: {OpenApiTypesense.Analytics, :upsert_analytics_rule},
144153
url: "/analytics/rules/#{ruleName}",

lib/open_api_typesense/operations/conversations.ex

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ defmodule OpenApiTypesense.Conversations do
33
Provides API endpoints related to conversations
44
"""
55

6+
alias OpenApiTypesense.Connection
7+
68
@default_client OpenApiTypesense.Client
79

810
@doc """
@@ -36,17 +38,20 @@ defmodule OpenApiTypesense.Conversations do
3638
3739
Delete a conversation model
3840
"""
39-
@spec delete_conversation_model(String.t(), keyword) ::
41+
@spec delete_conversation_model(Connection.t(), String.t(), keyword) ::
4042
{:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
41-
def delete_conversation_model(modelId, opts \\ []) do
43+
def delete_conversation_model(conn \\ Connection.new(), modelId, opts \\ []) do
4244
client = opts[:client] || @default_client
4345

44-
client.request(%{
46+
client.request(conn, %{
4547
args: [modelId: modelId],
4648
call: {OpenApiTypesense.Conversations, :delete_conversation_model},
4749
url: "/conversations/models/#{modelId}",
4850
method: :delete,
49-
response: [{200, {OpenApiTypesense.ConversationModelSchema, :t}}],
51+
response: [
52+
{200, {OpenApiTypesense.ConversationModelSchema, :t}},
53+
{404, {OpenApiTypesense.ApiResponse, :t}}
54+
],
5055
opts: opts
5156
})
5257
end
@@ -56,12 +61,12 @@ defmodule OpenApiTypesense.Conversations do
5661
5762
Retrieve all conversation models
5863
"""
59-
@spec retrieve_all_conversation_models(keyword) ::
64+
@spec retrieve_all_conversation_models(Connection.t(), keyword) ::
6065
{:ok, [OpenApiTypesense.ConversationModelSchema.t()]} | :error
61-
def retrieve_all_conversation_models(opts \\ []) do
66+
def retrieve_all_conversation_models(conn \\ Connection.new(), opts \\ []) do
6267
client = opts[:client] || @default_client
6368

64-
client.request(%{
69+
client.request(conn, %{
6570
args: [],
6671
call: {OpenApiTypesense.Conversations, :retrieve_all_conversation_models},
6772
url: "/conversations/models",
@@ -76,17 +81,20 @@ defmodule OpenApiTypesense.Conversations do
7681
7782
Retrieve a conversation model
7883
"""
79-
@spec retrieve_conversation_model(String.t(), keyword) ::
84+
@spec retrieve_conversation_model(Connection.t(), String.t(), keyword) ::
8085
{:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
81-
def retrieve_conversation_model(modelId, opts \\ []) do
86+
def retrieve_conversation_model(conn \\ Connection.new(), modelId, opts \\ []) do
8287
client = opts[:client] || @default_client
8388

84-
client.request(%{
89+
client.request(conn, %{
8590
args: [modelId: modelId],
8691
call: {OpenApiTypesense.Conversations, :retrieve_conversation_model},
8792
url: "/conversations/models/#{modelId}",
8893
method: :get,
89-
response: [{200, {OpenApiTypesense.ConversationModelSchema, :t}}],
94+
response: [
95+
{200, {OpenApiTypesense.ConversationModelSchema, :t}},
96+
{404, {OpenApiTypesense.ApiResponse, :t}}
97+
],
9098
opts: opts
9199
})
92100
end
@@ -97,14 +105,15 @@ defmodule OpenApiTypesense.Conversations do
97105
Update a conversation model
98106
"""
99107
@spec update_conversation_model(
108+
Connection.t(),
100109
String.t(),
101110
OpenApiTypesense.ConversationModelUpdateSchema.t(),
102111
keyword
103112
) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
104-
def update_conversation_model(modelId, body, opts \\ []) do
113+
def update_conversation_model(conn \\ Connection.new(), modelId, body, opts \\ []) do
105114
client = opts[:client] || @default_client
106115

107-
client.request(%{
116+
client.request(conn, %{
108117
args: [modelId: modelId, body: body],
109118
call: {OpenApiTypesense.Conversations, :update_conversation_model},
110119
url: "/conversations/models/#{modelId}",

lib/open_api_typesense/operations/curation.ex

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ defmodule OpenApiTypesense.Curation do
1010
@doc """
1111
Delete an override associated with a collection
1212
"""
13-
@spec delete_search_override(String.t(), String.t(), keyword) ::
13+
@spec delete_search_override(Connection.t(), String.t(), String.t(), keyword) ::
1414
{:ok, OpenApiTypesense.SearchOverrideDeleteResponse.t()}
1515
| {:error, OpenApiTypesense.ApiResponse.t()}
16-
def delete_search_override(collectionName, overrideId, opts \\ []) do
16+
def delete_search_override(conn \\ Connection.new(), collectionName, overrideId, opts \\ []) do
1717
client = opts[:client] || @default_client
1818

19-
client.request(%{
19+
client.request(conn, %{
2020
args: [collectionName: collectionName, overrideId: overrideId],
2121
call: {OpenApiTypesense.Curation, :delete_search_override},
2222
url: "/collections/#{collectionName}/overrides/#{overrideId}",
@@ -53,16 +53,23 @@ defmodule OpenApiTypesense.Curation do
5353
Create or update an override to promote certain documents over others. Using overrides, you can include or exclude specific documents for a given query.
5454
"""
5555
@spec upsert_search_override(
56+
Connection.t(),
5657
String.t(),
5758
String.t(),
5859
OpenApiTypesense.SearchOverrideSchema.t(),
5960
keyword
6061
) ::
6162
{:ok, OpenApiTypesense.SearchOverride.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
62-
def upsert_search_override(collectionName, overrideId, body, opts \\ []) do
63+
def upsert_search_override(
64+
conn \\ Connection.new(),
65+
collectionName,
66+
overrideId,
67+
body,
68+
opts \\ []
69+
) do
6370
client = opts[:client] || @default_client
6471

65-
client.request(%{
72+
client.request(conn, %{
6673
args: [collectionName: collectionName, overrideId: overrideId, body: body],
6774
call: {OpenApiTypesense.Curation, :upsert_search_override},
6875
url: "/collections/#{collectionName}/overrides/#{overrideId}",

0 commit comments

Comments
 (0)