From b81f3aa168b8bcb630b5ca295aff34b2909f7c18 Mon Sep 17 00:00:00 2001 From: Cao Jiafeng Date: Wed, 6 Jan 2016 18:51:50 +0800 Subject: [PATCH] refine overridable functions when using module Base. The `defoverridable Module.definitions_in(__MODULE__)` can cause some unexpected behaviors. Such as, when defining struct in the module using `HTTPoison.Base`, the `__struct__ ` function will be lazily defined, which causes `%__MODULE__{}` cannot function correctly. --- lib/httpoison/base.ex | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/httpoison/base.ex b/lib/httpoison/base.ex index 5ce21b7..5e4377d 100644 --- a/lib/httpoison/base.ex +++ b/lib/httpoison/base.ex @@ -99,6 +99,16 @@ defmodule HTTPoison.Base do defp process_status_code(status_code), do: status_code + defoverridable [ + process_url: 1, + process_request_body: 1, + process_response_body: 1, + process_request_headers: 1, + process_response_chunk: 1, + process_headers: 1, + process_status_code: 1 + ] + @doc false @spec transformer(pid) :: :ok def transformer(target) do @@ -327,7 +337,6 @@ defmodule HTTPoison.Base do @spec options!(binary, headers, Keyword.t) :: Response.t | AsyncResponse.t def options!(url, headers \\ [], options \\ []), do: request!(:options, url, "", headers, options) - defoverridable Module.definitions_in(__MODULE__) end end