Skip to content

Commit

Permalink
make url<>path more elastic (#49)
Browse files Browse the repository at this point in the history
* make url<>path more elastic

* fixed test failed

* fixed when query == %{}

* using Path.join/1

* mend
  • Loading branch information
zhongwencool committed Feb 23, 2017
1 parent 1ba75d0 commit 83c98c2
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 50 deletions.
26 changes: 13 additions & 13 deletions lib/maxwell.ex
Expand Up @@ -2,16 +2,16 @@ defmodule Maxwell do
@moduledoc """
The maxwell specification.
There are two kind of usages: Basic Usage and Advanced Middleware Usage.
There are two kind of usages: basic usage and advanced middleware usage.
### Basic Usage
## Returns Origin IP, for example %{"origin" => "127.0.0.1"}
Maxwell.Conn.new
|> Maxwell.Conn.put_url("http://httpbin.org/ip")
|> Maxwell.get!
|> Maxwell.Conn.get_resp_body
|> Poison.decode!
"http://httpbin.org/ip"
|> Maxwell.Conn.new()
|> Maxwell.get!()
|> Maxwell.Conn.get_resp_body()
|> Poison.decode!()
Find all `get_*&put_*` helper functions by `h Maxwell.Conn.xxx`
Expand All @@ -22,23 +22,23 @@ defmodule Maxwell do
adapter Maxwell.Adapter.Ibrowse
middleware Maxwell.Middleware.BaseUrl, "http://httpbin.org"
middleware Maxwell.Middleware.Opts, [connect_timeout: 1000]
middleware Maxwell.Middleware.Headers, %{'User-Agent' => "zhongwencool"}
middleware Maxwell.Middleware.Opts, [connect_timeout: 5000]
middleware Maxwell.Middleware.Headers, %{"User-Agent" => "zhongwencool"}
middleware Maxwell.Middleware.Json
## Returns origin IP, for example "127.0.0.1"
def ip do
new()
|> put_path("ip")
def ip() do
"/ip"
|> new()
|> get!()
|> get_resp_body("origin")
end
## Generates n random bytes of binary data, accepts optional seed integer parameter
def get_random_bytes(size) do
"/bytes/\#\{size\}"
|> put_path
|> get!
|> new()
|> get!()
|> get_resp_body(&to_string/1)
end
end
Expand Down
6 changes: 4 additions & 2 deletions lib/maxwell/adapter/util.ex
Expand Up @@ -136,9 +136,11 @@ defmodule Maxwell.Adapter.Util do
end
defp multipart_body(:end), do: :eof

defp append_query_string(url, path, query)when query == %{}, do: url <> path
defp append_query_string(url, path, query)when query == %{}, do: Path.join(url, path)
defp append_query_string(url, path, query) do
query_string = URI.encode_query(query)
url <> path <> "?" <> query_string
Path.join(url, path) <> "?" <> query_string
end

end

2 changes: 1 addition & 1 deletion test/maxwell/adapter/adapter_test.exs
Expand Up @@ -87,7 +87,7 @@ defmodule MaxwellAdapterTest do

test "path + query" do
conn = new("http://example.com/foo?a=1&b=foo")
|> Client.get!
|> Client.get!
assert conn.url == "http://example.com"
assert conn.path == "/foo"
assert conn.query_string == %{"a" => "1", "b" => "foo"}
Expand Down
32 changes: 21 additions & 11 deletions test/maxwell/adapter/adapter_test_helper.exs
Expand Up @@ -14,71 +14,81 @@ defmodule Maxwell.Adapter.TestHelper do
middleware Maxwell.Middleware.Json

def get_ip_test() do
get!(new("/ip"))
"/ip" |> new() |> get!()
end

def encode_decode_json_test(body) do
new("/post")
"/post"
|> new()
|> put_req_body(body)
|> post!
|> get_resp_body("json")
end

def user_agent_test(user_agent) do
new("/user-agent")
"/user-agent"
|> new()
|> put_req_header("user-agent", user_agent)
|> get!
|> get_resp_body("user-agent")
end

def put_json_test(json) do
new("/put")
"/put"
|> new()
|> put_req_body(json)
|> put!
|> get_resp_body("data")
end

def delete_test() do
new("/delete")
"delete"
|> new()
|> delete!
|> get_resp_body("data")
end

def multipart_test() do
new("/post")
"/post"
|> new()
|> put_req_body({:multipart, [{:file, "test/maxwell/multipart_test_file.sh"}]})
|> post!
end
def multipart_with_extra_header_test() do
new("/post")
"/post"
|> new()
|> put_req_body({:multipart, [{:file, "test/maxwell/multipart_test_file.sh", [{"Content-Type", "image/jpeg"}]}]})
|> post!
end

def file_test(filepath) do
new("/post")
"/post"
|> new()
|> put_req_header("transfer-encoding", "chunked")
|> put_req_body({:file, filepath})
|> post!
end

def file_test(filepath, content_type) do
new("/post")
"/post"
|> new()
|> put_req_header("transfer-encoding", "Chunked")
|> put_req_body({:file, filepath})
|> put_req_header("content-type", content_type)
|> post!
end

def file_without_transfer_encoding_test(filepath, content_type) do
new("/post")
"/post"
|> new()
|> put_req_body({:file, filepath})
|> put_req_header("content-type", content_type)
|> post!
end

def stream_test() do
new("/post")
"/post"
|> new()
|> put_req_header("content-type", "application/vnd.lotus-1-2-3")
|> put_req_header("content-length", 6)
|> put_req_body(Stream.map(["1", "2", "3"], fn(x) -> List.duplicate(x, 2) end))
Expand Down
29 changes: 19 additions & 10 deletions test/maxwell/adapter/hackney_test.exs
Expand Up @@ -17,60 +17,69 @@ defmodule Maxwell.HackneyMockTest do
middleware Maxwell.Middleware.Json

def get_ip_test do
get!(new("/ip"))
"ip" |> new() |> get!()
end
def encode_decode_json_test(body) do
new("/post")
"/post"
|> new()
|> put_req_body(body)
|> post!
|> get_resp_body("json")
end

def user_agent_test(user_agent) do
new("/user-agent")
"/user-agent"
|> new()
|> put_req_header("user-agent", user_agent)
|> get!
|> get_resp_body("user-agent")
end

def put_json_test(json) do
new("/put")
"/put"
|> new()
|> put_req_body(json)
|> put!
|> get_resp_body("data")
end

def delete_test() do
new("/delete")
"/delete"
|> new()
|> delete!
|> get_resp_body("data")
end

def timeout_test() do
new("/delay/5")
"/delay/5"
|> new()
|> put_option(:recv_timeout, 1000)
|> Client.get
end

def multipart_test() do
new("/post")
"/post"
|> new()
|> put_req_body({:multipart, [{:file, "test/maxwell/multipart_test_file.sh"}]})
|> Client.post!
end
def multipart_with_extra_header_test() do
new("/post")
"/post"
|> new()
|> put_req_body({:multipart, [{:file, "test/maxwell/multipart_test_file.sh", [{"Content-Type", "image/jpeg"}]}]})
|> Client.post!
end

def file_test() do
new("/post")
"/post"
|> new()
|> put_req_body({:file, "test/maxwell/multipart_test_file.sh"})
|> Client.post!
end

def stream_test() do
new("/post")
"/post"
|> new()
|> put_req_body(Stream.map(["1", "2", "3"], fn(x) -> List.duplicate(x, 2) end))
|> Client.post!
end
Expand Down
37 changes: 24 additions & 13 deletions test/maxwell/adapter/ibrowse_test.exs
Expand Up @@ -11,79 +11,90 @@ defmodule Maxwell.IbrowseMockTest do
use Maxwell.Builder
adapter Maxwell.Adapter.Ibrowse

middleware Maxwell.Middleware.BaseUrl, "http://httpbin.org"
middleware Maxwell.Middleware.BaseUrl, "http://httpbin.org/"
middleware Maxwell.Middleware.Opts, [connect_timeout: 5000]
middleware Maxwell.Middleware.Json

def get_ip_test() do
new("/ip") |> Client.get!
"/ip" |> new() |> Client.get!
end

def encode_decode_json_test(body) do
new("/post")
"post"
|> new()
|> put_req_body(body)
|> post!
|> get_resp_body("json")
end

def user_agent_test(user_agent) do
new("/user-agent")
"/user-agent"
|> new()
|> put_req_header("user-agent", user_agent)
|> get!
|> get_resp_body("user-agent")
end

def put_json_test(json) do
new("/put")
"/put"
|> new()
|> put_req_body(json)
|> put!
|> get_resp_body("data")
end

def delete_test() do
new("/delete")
"/delete"
|> new()
|> delete!
|> get_resp_body("data")
end

def normalized_error_test() do
new("http://broken.local")
"http://broken.local"
|> new()
|> get
end

def timeout_test() do
new("/delay/5")
"/delay/5"
|> new()
|> put_query_string("foo", "bar")
|> put_option(:inactivity_timeout, 1000)
|> Client.get
end

def multipart_test() do
new("/post")
"/post"
|> new()
|> put_req_body({:multipart, [{:file, "test/maxwell/multipart_test_file.sh"}]})
|> Client.post!
end
def multipart_with_extra_header_test() do
new("/post")
"/post"
|> new()
|> put_req_body({:multipart, [{:file, "test/maxwell/multipart_test_file.sh", [{"Content-Type", "image/jpeg"}]}]})
|> Client.post!
end

def file_test(filepath) do
new("/post")
"/post"
|> new()
|> put_req_body({:file, filepath})
|> Client.post!
end

def file_test(filepath, content_type) do
new("/post")
"/post"
|> new()
|> put_req_body({:file, filepath})
|> put_req_header("content-type", content_type)
|> Client.post!
end

def stream_test() do
new("/post")
"/post"
|> new()
|> put_req_header("content-type", "application/vnd.lotus-1-2-3")
|> put_req_header("content-length", 6)
|> put_req_body(Stream.map(["1", "2", "3"], fn(x) -> List.duplicate(x, 2) end))
Expand Down

0 comments on commit 83c98c2

Please sign in to comment.