Httpoison 0.4から0.8への変更

Programming ElixirでHttpoisonを使う例が古かったのでメモ。

mix.exsを修正する。

1
2
3
4
5
defp deps do
[
{ :httpoison, "~> 0.8.0" }
]
end

issues/github_issues.exsも修正する

1
2
3
def handle_response({:ok, %HTTPoison.Response{status_code: 200, body: body}}), do: { :ok, body }
def handle_response({:ok, %HTTPoison.Response{status_code: ___, body: body}}), do: { :error, body }
def handle_response({:error, %HTTPoison.Error{reason: reason}}), do: { :error, reason }

余談

尚、PragProgのサポートサイトには#77904に該当するエラッタが登録されており、
mix.exsにて

1
2
3
4
5
defp deps do
[
{ :httpoison, "~> 0.4.0" }
]
end

とすればissues/github_issues.exs側を修正せずに動くとあります。

cf. The Pragmatic Bookshelf | Errata for Programming Elixir

が、手元環境(Elixir 1.1.1, OTP 18.0)だと依存パッケージのhackneyがコンパイルできなくなる問題があったため諦めました。指示されるコマンドを実行しても解決せず。

1
2
3
4
5
6
7
[3100]$ iex -S mix
Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

==> hackney (compile)
ERROR: OTP release 18 does not match required regex R15|R16|17
ERROR: compile failed while processing /home/3100/learn/elixir/issues/deps/hackney: rebar_abort
** (Mix) Could not compile dependency :hackney, "/home/3100/.mix/rebar" command failed. You can recompile this dependency with "mix deps.compile hackney", update it with "mix deps.update hackney" or clean it with "mix deps.clean hackney"

どうも下のイシューと同じ現象のように見えます。

cf. (Mix) Could not compile dependency idna, /root/.mix/rebar command failed. If you want to recompile this dependency, please run: mix deps.compile idna · Issue #3857 · elixir-lang/elixir