Skip to content

Commit

Permalink
KeepRequest middleware #156
Browse files Browse the repository at this point in the history
  • Loading branch information
teamon committed Mar 30, 2018
1 parent 363ce3a commit 6f09697
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ This is very similar to how [Plug Router](https://github.com/elixir-plug/plug#th
- [`Tesla.Middleware.FollowRedirects`](https://hexdocs.pm/tesla/Tesla.Middleware.FollowRedirects.html) - follow 3xx redirects
- [`Tesla.Middleware.MethodOverride`](https://hexdocs.pm/tesla/Tesla.Middleware.MethodOverride.html) - set X-Http-Method-Override
- [`Tesla.Middleware.Logger`](https://hexdocs.pm/tesla/Tesla.Middleware.Logger.html) - log requests (method, url, status, time)
- [`Tesla.Middleware.KeepRequest`](https://hexdocs.pm/tesla/Tesla.Middleware.KeepRequest.html) - keep request body & headers

#### Formats
- [`Tesla.Middleware.FormUrlencoded`](https://hexdocs.pm/tesla/Tesla.Middleware.FormUrlencoded.html) - urlencode POST body parameter, useful for POSTing a map/keyword list
Expand Down
26 changes: 26 additions & 0 deletions lib/tesla/middleware/keep_request.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
defmodule Tesla.Middleware.KeepRequest do
@behaviour Tesla.Middleware

@moduledoc """
Store request body & headers into opts.
### Example
```
defmodule MyClient do
use Tesla
plug Tesla.Middleware.KeepRequest
end
{:ok, env} = MyClient.post("/", "request-data")
env.body # => "response-data"
env.opts[:req_body] # => "request-data"
```
"""
def call(env, next, _opts) do
env
|> Tesla.put_opt(:req_body, env.body)
|> Tesla.put_opt(:req_headers, env.headers)
|> Tesla.run(next)
end
end
12 changes: 12 additions & 0 deletions test/tesla/middleware/keep_request_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
defmodule Tesla.Middleware.KeepRequestTest do
use ExUnit.Case

@middleware Tesla.Middleware.KeepRequest

test "put request body & headers into opts" do
env = %Tesla.Env{body: "reqbody", headers: [{"x-request", "header"}]}
assert {:ok, env} = @middleware.call(env, [], [])
assert env.opts[:req_body] == "reqbody"
assert env.opts[:req_headers] == [{"x-request", "header"}]
end
end

0 comments on commit 6f09697

Please sign in to comment.