@@ -23,23 +23,24 @@ defmodule OpenApiTypesense.Client do
2323
2424 @ doc since: "0.2.0"
2525 @ spec get_host :: String . t ( ) | nil
26+ @ deprecated "Use OpenApiTypesense.Connection.config(:host) instead"
2627 def get_host , do: Application . get_env ( :open_api_typesense , :host )
2728
2829 @ doc since: "0.2.0"
2930 @ spec get_scheme :: String . t ( ) | nil
31+ @ deprecated "Use OpenApiTypesense.Connection.config(:scheme) instead"
3032 def get_scheme , do: Application . get_env ( :open_api_typesense , :scheme )
3133
3234 @ doc since: "0.2.0"
3335 @ spec get_port :: non_neg_integer ( ) | nil
36+ @ deprecated "Use OpenApiTypesense.Connection.config(:port) instead"
3437 def get_port , do: Application . get_env ( :open_api_typesense , :port )
3538
3639 @ doc since: "0.5.0"
3740 @ spec get_client :: keyword ( ) | nil
41+ @ deprecated "Use OpenApiTypesense.Connection.config(:client) instead"
3842 def get_client , do: Application . get_env ( :open_api_typesense , :client )
3943
40- defp test_max_retries , do: Application . get_env ( :open_api_typesense , :max_retries )
41- defp test_retry , do: Application . get_env ( :open_api_typesense , :retry )
42-
4344 @ doc """
4445 Returns the Typesense's API key
4546
@@ -90,40 +91,42 @@ defmodule OpenApiTypesense.Client do
9091 if client do
9192 client . request ( conn , opts )
9293 else
93- default_client ( conn , opts )
94+ req_client = build_req_client ( conn , opts )
95+ req_request ( req_client , opts )
9496 end
9597 end
9698
97- defp default_client ( conn , opts ) do
98- # Req.Request.append_error_steps and its retry option are used here.
99- # options like retry, max_retries, etc. can be found in:
100- # https://hexdocs.pm/req/Req.Steps.html#retry/1
101- # NOTE: look at source code in Github
99+ def build_req_client ( conn , opts ) do
100+ # Default request options. These can be overridden in this hierarchy:
101+ # 1. Via the `:options` key in `config.exs`.
102+ # 2. By passing `:req` key to `opts` arg to request/2.
103+ req_options =
104+ conn
105+ |> Map . get ( :options , [ ] )
106+ |> Keyword . merge ( Access . get ( opts , :req , [ ] ) )
107+
102108 url =
103109 % URI {
104110 scheme: conn . scheme ,
105111 host: conn . host ,
106112 port: conn . port ,
107- path: opts [ :url ] ,
108- query: URI . encode_query ( opts [ :query ] || [ ] )
113+ path: Access . get ( opts , :url ) ,
114+ query: URI . encode_query ( Access . get ( opts , :query , [ ] ) )
109115 }
110116
111- { _req , resp } =
112- [
113- method: opts [ :method ] || :get ,
114- body: encode_body ( opts ) ,
115- url: url ,
116- max_retries: test_max_retries ( ) || opts [ :req ] [ :max_retries ] || 3 ,
117- retry: test_retry ( ) || opts [ :req ] [ :retry ] || :safe_transient ,
118- compress_body: opts [ :req ] [ :compress ] || false ,
119- cache: opts [ :req ] [ :cache ] || false ,
120- decode_json: [ keys: :atoms ]
121- ]
122- |> Req . new ( )
123- |> Req.Request . merge_options ( Map . to_list ( Map . get ( conn , :options , % { } ) ) )
124- |> Req.Request . put_header ( "x-typesense-api-key" , Map . get ( conn , :api_key ) )
125- |> Req.Request . run_request ( )
117+ [
118+ method: Access . get ( opts , :method , :get ) ,
119+ body: encode_body ( opts ) ,
120+ url: url ,
121+ decode_json: [ keys: :atoms ]
122+ ]
123+ |> Req . new ( )
124+ |> Req.Request . merge_options ( req_options )
125+ |> Req.Request . put_header ( "x-typesense-api-key" , Map . get ( conn , :api_key ) )
126+ end
126127
128+ defp req_request ( req_client , opts ) do
129+ { _req , resp } = Req.Request . run_request ( req_client )
127130 parse_resp ( resp , opts [ :response ] )
128131 end
129132
0 commit comments