Skip to content

Commit a49ee26

Browse files
authored
chore: move modules to its own file (#615)
1 parent 798e105 commit a49ee26

File tree

5 files changed

+128
-131
lines changed

5 files changed

+128
-131
lines changed

lib/tesla/middleware/base_url.ex

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
defmodule Tesla.Middleware.BaseUrl do
2+
@moduledoc """
3+
Set base URL for all requests.
4+
5+
The base URL will be prepended to request path/URL only
6+
if it does not include http(s).
7+
8+
## Examples
9+
10+
```
11+
defmodule MyClient do
12+
use Tesla
13+
14+
plug Tesla.Middleware.BaseUrl, "https://example.com/foo"
15+
end
16+
17+
MyClient.get("/path") # equals to GET https://example.com/foo/path
18+
MyClient.get("path") # equals to GET https://example.com/foo/path
19+
MyClient.get("") # equals to GET https://example.com/foo
20+
MyClient.get("http://example.com/bar") # equals to GET http://example.com/bar
21+
```
22+
"""
23+
24+
@behaviour Tesla.Middleware
25+
26+
@impl Tesla.Middleware
27+
def call(env, next, base) do
28+
env
29+
|> apply_base(base)
30+
|> Tesla.run(next)
31+
end
32+
33+
defp apply_base(env, base) do
34+
if Regex.match?(~r/^https?:\/\//i, env.url) do
35+
# skip if url is already with scheme
36+
env
37+
else
38+
%{env | url: join(base, env.url)}
39+
end
40+
end
41+
42+
defp join(base, url) do
43+
case {String.last(to_string(base)), url} do
44+
{nil, url} -> url
45+
{"/", "/" <> rest} -> base <> rest
46+
{"/", rest} -> base <> rest
47+
{_, ""} -> base
48+
{_, "/" <> rest} -> base <> "/" <> rest
49+
{_, rest} -> base <> "/" <> rest
50+
end
51+
end
52+
end

lib/tesla/middleware/core.ex

Lines changed: 0 additions & 131 deletions
This file was deleted.

lib/tesla/middleware/headers.ex

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
defmodule Tesla.Middleware.Headers do
2+
@moduledoc """
3+
Set default headers for all requests
4+
5+
## Examples
6+
7+
```
8+
defmodule Myclient do
9+
use Tesla
10+
11+
plug Tesla.Middleware.Headers, [{"user-agent", "Tesla"}]
12+
end
13+
```
14+
"""
15+
16+
@behaviour Tesla.Middleware
17+
18+
@impl Tesla.Middleware
19+
def call(env, next, headers) do
20+
env
21+
|> Tesla.put_headers(headers)
22+
|> Tesla.run(next)
23+
end
24+
end

lib/tesla/middleware/opts.ex

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
defmodule Tesla.Middleware.Opts do
2+
@moduledoc """
3+
Set default opts for all requests.
4+
5+
## Examples
6+
7+
```
8+
defmodule Myclient do
9+
use Tesla
10+
11+
plug Tesla.Middleware.Opts, [some: "option"]
12+
end
13+
```
14+
"""
15+
16+
@behaviour Tesla.Middleware
17+
18+
@impl Tesla.Middleware
19+
def call(env, next, opts) do
20+
Tesla.run(%{env | opts: env.opts ++ opts}, next)
21+
end
22+
end

lib/tesla/middleware/query.ex

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
defmodule Tesla.Middleware.Query do
2+
@moduledoc """
3+
Set default query params for all requests
4+
5+
## Examples
6+
7+
```
8+
defmodule Myclient do
9+
use Tesla
10+
11+
plug Tesla.Middleware.Query, [token: "some-token"]
12+
end
13+
```
14+
"""
15+
16+
@behaviour Tesla.Middleware
17+
18+
@impl Tesla.Middleware
19+
def call(env, next, query) do
20+
env
21+
|> merge(query)
22+
|> Tesla.run(next)
23+
end
24+
25+
defp merge(env, nil), do: env
26+
27+
defp merge(env, query) do
28+
Map.update!(env, :query, &(&1 ++ query))
29+
end
30+
end

0 commit comments

Comments
 (0)