Skip to content

Commit 12ec1a1

Browse files
committed
allow to use custom client
1 parent 4ab3b06 commit 12ec1a1

File tree

5 files changed

+100
-3
lines changed

5 files changed

+100
-3
lines changed

.env.dev

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export SUPABASE_URL=http://127.0.0.1:54321
2+
export SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU

config/config.exs

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Config
2+
3+
if config_env() == :dev do
4+
config :supabase_potion,
5+
supabase_base_url: System.get_env("SUPABASE_URL"),
6+
supabase_api_key: System.get_env("SUPABASE_KEY")
7+
end

lib/supabase/postgrest.ex

+88
Original file line numberDiff line numberDiff line change
@@ -942,4 +942,92 @@ defmodule Supabase.PostgREST do
942942
defp success_resp?(status) do
943943
Kernel.in(status, 200..399)
944944
end
945+
946+
defmacrop wrap_postgrest_functions do
947+
quote unquote: false, bind_quoted: [module: __MODULE__] do
948+
for {fun, arity} <- module.__info__(:functions) do
949+
cond do
950+
fun == :from ->
951+
quote do
952+
@doc """
953+
Check `Supabase.PostgREST.#{unquote(fun)}/#{unquote(arity)}`
954+
"""
955+
def unquote(fun)(schema) do
956+
apply(unquote(module), unquote(fun), [@client, schema])
957+
end
958+
end
959+
960+
arity == 1 ->
961+
quote do
962+
@doc """
963+
Check `Supabase.PostgREST.#{unquote(fun)}/#{unquote(arity)}`
964+
"""
965+
def unquote(fun)(data) do
966+
apply(unquote(module), unquote(fun), [data])
967+
end
968+
end
969+
970+
true ->
971+
args = for idx <- 1..arity, do: Macro.var(:"arg#{idx}", module)
972+
973+
quote do
974+
@doc """
975+
Check `Supabase.PostgREST.#{unquote(fun)}/#{unquote(arity)}`
976+
"""
977+
def unquote(fun)(unquote_splicing(args)) do
978+
args = [unquote_splicing(args)]
979+
apply(unquote(module), unquote(fun), args)
980+
end
981+
end
982+
end
983+
end
984+
end
985+
end
986+
987+
defmacro __using__([{:client, client} | opts]) do
988+
config = Macro.escape(Keyword.get(opts, :config, %{}))
989+
990+
quote location: :keep do
991+
@client unquote(client)
992+
993+
def child_spec(opts) do
994+
%{
995+
id: __MODULE__,
996+
start: {__MODULE__, :start_link, [opts]},
997+
type: :supervisor
998+
}
999+
end
1000+
1001+
def start_link(opts \\ []) do
1002+
manage_clients? = Application.get_env(:supabase_potion, :manage_clients, true)
1003+
1004+
if manage_clients? do
1005+
Supabase.init_client(unquote(client), unquote(config))
1006+
else
1007+
base_url =
1008+
Application.get_env(:supabase_potion, :supabase_base_url) ||
1009+
raise Supabase.MissingSupabaseConfig, :url
1010+
1011+
api_key =
1012+
Application.get_env(:supabase_potion, :supabase_api_key) ||
1013+
raise Supabase.MissingSupabaseConfig, :key
1014+
1015+
config =
1016+
unquote(config)
1017+
|> Map.put(:conn, %{base_url: base_url, api_key: api_key})
1018+
|> Map.put(:name, unquote(client))
1019+
1020+
opts = [name: unquote(client), client_info: config]
1021+
Supabase.Client.start_link(opts)
1022+
end
1023+
|> then(fn
1024+
{:ok, pid} -> {:ok, pid}
1025+
{:error, {:already_started, pid}} -> {:ok, pid}
1026+
err -> err
1027+
end)
1028+
end
1029+
1030+
unquote(wrap_postgrest_functions())
1031+
end
1032+
end
9451033
end

mix.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule PostgREST.MixProject do
66
def project do
77
[
88
app: :supabase_postgrest,
9-
version: "0.1.0",
9+
version: "0.1.1",
1010
elixir: "~> 1.15",
1111
start_permanent: Mix.env() == :prod,
1212
deps: deps(),

mix.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
%{
2-
"castore": {:hex, :castore, "1.0.6", "ffc42f110ebfdafab0ea159cd43d31365fa0af0ce4a02ecebf1707ae619ee727", [:mix], [], "hexpm", "374c6e7ca752296be3d6780a6d5b922854ffcc74123da90f2f328996b962d33a"},
2+
"castore": {:hex, :castore, "1.0.7", "b651241514e5f6956028147fe6637f7ac13802537e895a724f90bf3e36ddd1dd", [:mix], [], "hexpm", "da7785a4b0d2a021cd1292a60875a784b6caef71e76bf4917bdee1f390455cf5"},
33
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
44
"earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"},
55
"ecto": {:hex, :ecto, "3.11.2", "e1d26be989db350a633667c5cda9c3d115ae779b66da567c68c80cfb26a8c9ee", [: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", "3c38bca2c6f8d8023f2145326cc8a80100c3ffe4dcbd9842ff867f7fc6156c65"},
@@ -15,6 +15,6 @@
1515
"nimble_options": {:hex, :nimble_options, "1.1.0", "3b31a57ede9cb1502071fade751ab0c7b8dbe75a9a4c2b5bbb0943a690b63172", [:mix], [], "hexpm", "8bbbb3941af3ca9acc7835f5655ea062111c9c27bcac53e004460dfd19008a99"},
1616
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
1717
"nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"},
18-
"supabase_potion": {:hex, :supabase_potion, "0.3.1", "2cf8561eeeaddb1bbfe4d9d9b7cad28c9162efefa4cdfb4ec6ab633030d47bc1", [:mix], [{:ecto, "~> 3.10", [hex: :ecto, repo: "hexpm", optional: false]}, {:ex_doc, ">= 0.0.0", [hex: :ex_doc, repo: "hexpm", optional: false]}, {:finch, "~> 0.16", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "a3342793167a18b8987ce1313d52ad96a2d803c24d6e9470da8688d35f78bae0"},
18+
"supabase_potion": {:hex, :supabase_potion, "0.3.4", "0e9292bd27cc475b7209ba6f01b80b02d7876bb9af271c9c84444ab9078576c5", [:mix], [{:ecto, "~> 3.10", [hex: :ecto, repo: "hexpm", optional: false]}, {:ex_doc, ">= 0.0.0", [hex: :ex_doc, repo: "hexpm", optional: false]}, {:finch, "~> 0.16", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "669c9f443be3129b2eafcafcf7a62408cb3bdb4e5a1b645bb5827f2a5de1a57e"},
1919
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
2020
}

0 commit comments

Comments
 (0)