Skip to content

Commit

Permalink
fix: merging adapter options using Opts middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
yordis committed Sep 10, 2023
1 parent 7d5c53e commit c6df8f7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
12 changes: 11 additions & 1 deletion lib/tesla/middleware/core.ex
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,16 @@ defmodule Tesla.Middleware.Opts do

@impl Tesla.Middleware
def call(env, next, opts) do
Tesla.run(%{env | opts: env.opts ++ opts}, next)
adapter =
env.opts
|> Keyword.get(:adapter, [])
|> Keyword.merge(opts[:adapter] || [])

opts =
env.opts
|> Keyword.merge(opts)
|> Keyword.merge(adapter: adapter)

Tesla.run(%{env | opts: opts}, next)
end
end
15 changes: 15 additions & 0 deletions test/tesla/middleware/opts_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@ defmodule Tesla.Middleware.OptsTest do
adapter fn env -> env end
end

defmodule MergeAdapterOptsClient do
use Tesla

plug Tesla.Middleware.Opts, adapter: [first_opt: "1"]
plug Tesla.Middleware.Opts, adapter: [second_opt: "2"]

adapter fn env -> env end
end

test "merge adapter opts" do
env = MergeAdapterOptsClient.get("/")

assert env.opts == [adapter: [first_opt: "1", second_opt: "2"]]
end

test "apply middleware options" do
env = Client.get("/")

Expand Down

0 comments on commit c6df8f7

Please sign in to comment.