Page MenuHomePhorge

No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None
diff --git a/lib/tesla/middleware/path_params.ex b/lib/tesla/middleware/path_params.ex
new file mode 100644
index 0000000..d4ae223
--- /dev/null
+++ b/lib/tesla/middleware/path_params.ex
@@ -0,0 +1,14 @@
+defmodule Tesla.Middleware.PathParams do
+ @behaviour Tesla.Middleware
+
+ @impl true
+ def call(env, next, _) do
+ url = build_url(env.url, env.opts[:path_params])
+ Tesla.run(%{env | url: url}, next)
+ end
+
+ defp build_url(url, nil), do: url
+
+ defp build_url(url, params),
+ do: Enum.reduce(params, url, fn {k, v}, u -> String.replace(u, ":#{k}", to_string(v)) end)
+end
diff --git a/test/tesla/middleware/path_params_test.exs b/test/tesla/middleware/path_params_test.exs
new file mode 100644
index 0000000..ae4ac31
--- /dev/null
+++ b/test/tesla/middleware/path_params_test.exs
@@ -0,0 +1,17 @@
+defmodule Tesla.Middleware.PathParamsTest do
+ use ExUnit.Case, async: true
+ alias Tesla.Env
+
+ @middleware Tesla.Middleware.PathParams
+
+ test "no params" do
+ assert {:ok, env} = @middleware.call(%Env{url: "/users/:id"}, [], nil)
+ assert env.url == "/users/:id"
+ end
+
+ test "passed params" do
+ opts = [path_params: [id: 42]]
+ assert {:ok, env} = @middleware.call(%Env{url: "/users/:id", opts: opts}, [], nil)
+ assert env.url == "/users/42"
+ end
+end

File Metadata

Mime Type
text/x-diff
Expires
Sat, Sep 19, 1:59 AM (20 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1765236
Default Alt Text
(1 KB)

Event Timeline