Skip to content

Commit fd5b29e

Browse files
committed
Maintain backwards compatibility with Poison users
1 parent d04a548 commit fd5b29e

File tree

7 files changed

+24
-10
lines changed

7 files changed

+24
-10
lines changed

installer/templates/phx_single/config/config.exs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ config :logger, :console,
2424
format: "$time $metadata[$level] $message\n",
2525
metadata: [:request_id]
2626

27-
# Use Jason for JSON parsing in Phoenix
27+
# Use Jason for JSON parsing in Phoenix<%= if ecto do %> and Ecto<% end %>
2828
config :phoenix, :format_encoders, json: Jason
29-
29+
<%= if ecto do %>
30+
config :ecto, :json_library, Jason
31+
<% end %>
3032
# Import environment specific config. This must remain at the bottom
3133
# of this file so it overrides the configuration defined above.
3234
import_config "#{Mix.env}.exs"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use Mix.Config
22

33
<%= if ecto do %>config :<%= app_name %>, ecto_repos: [<%= app_module %>.Repo]<% end %>
4+
<%= if ecto do %>config :ecto, :json_library, Jason<% end %>
45

56
import_config "#{Mix.env}.exs"

installer/test/phx_new_test.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ defmodule Mix.Tasks.Phx.NewTest do
3333
assert_file "phx_blog/config/config.exs", fn file ->
3434
assert file =~ "ecto_repos: [PhxBlog.Repo]"
3535
assert file =~ "config :phoenix, :format_encoders, json: Jason"
36+
assert file =~ "config :ecto, :json_library, Jason"
3637
refute file =~ "namespace: PhxBlog"
3738
refute file =~ "config :phx_blog, :generators"
3839
end
@@ -165,6 +166,7 @@ defmodule Mix.Tasks.Phx.NewTest do
165166
assert_file "phx_blog/config/config.exs", fn file ->
166167
refute file =~ "config :phx_blog, :generators"
167168
refute file =~ "ecto_repos:"
169+
refute file =~ "config :ecto, :json_library, Jason"
168170
end
169171

170172
assert_file "phx_blog/config/dev.exs", &refute(&1 =~ config)

installer/test/phx_new_umbrella_test.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ defmodule Mix.Tasks.Phx.New.UmbrellaTest do
5858
end
5959
assert_file app_path(@app, "config/config.exs"), fn file ->
6060
assert file =~ "ecto_repos: [PhxUmb.Repo]"
61+
assert file =~ "config :ecto, :json_library, Jason"
6162
refute file =~ "namespace"
6263
refute file =~ "config :phx_blog_web, :generators"
6364
end
@@ -214,6 +215,7 @@ defmodule Mix.Tasks.Phx.New.UmbrellaTest do
214215
assert_file app_path(@app, "config/config.exs"), fn file ->
215216
refute file =~ "config :phx_blog_web, :generators"
216217
refute file =~ "ecto_repos:"
218+
refute file =~ "config :ecto, :json_library, Jason"
217219
end
218220
assert_file web_path(@app, "config/config.exs"), fn file ->
219221
refute file =~ "config :phx_blog_web, :generators"

lib/phoenix.ex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ defmodule Phoenix do
3535
@doc false
3636
def start(_type, _args) do
3737
# Warm up caches
38-
_ = Phoenix.Template.engines
38+
_ = Phoenix.Template.engines()
3939
_ = Phoenix.Template.format_encoder("index.html")
40+
warn_on_missing_format_encoders()
4041

4142
# Configure proper system flags from Phoenix only
4243
if stacktrace_depth = Application.get_env(:phoenix, :stacktrace_depth) do
@@ -47,8 +48,6 @@ defmodule Phoenix do
4748
import Supervisor.Spec
4849

4950
children = [
50-
# Ensure format encoders are loaded before starting
51-
worker(Task, [fn -> ensure_format_encoders() end], restart: :transient),
5251
# Code reloading must be serial across all Phoenix apps
5352
worker(Phoenix.CodeReloader.Server, [])
5453
]
@@ -57,15 +56,16 @@ defmodule Phoenix do
5756
end
5857

5958
@doc false
59+
# TODO remove Poison default in 2.0
6060
def json do
6161
:phoenix
6262
|> Application.fetch_env!(:format_encoders)
63-
|> Keyword.get(:json, Jason)
63+
|> Keyword.get(:json, Poison)
6464
end
6565

66-
defp ensure_format_encoders do
66+
defp warn_on_missing_format_encoders do
6767
for {format, mod} <- Application.fetch_env!(:phoenix, :format_encoders) do
68-
Code.ensure_loaded?(mod) || raise """
68+
Code.ensure_loaded?(mod) || IO.write :sterr, """
6969
failed to load #{inspect(mod)} for Phoenix :#{format} encoder
7070
(module #{inspect(mod)} is not available)
7171

lib/phoenix/template.ex

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ defmodule Phoenix.Template do
104104

105105
alias Phoenix.Template
106106

107-
@encoders [html: Phoenix.Template.HTML, json: Jason, js: Phoenix.Template.HTML]
108107
@engines [eex: Phoenix.Template.EExEngine, exs: Phoenix.Template.ExsEngine]
109108
@default_pattern "*"
110109

@@ -242,7 +241,7 @@ defmodule Phoenix.Template do
242241
encoders
243242
:error ->
244243
encoders =
245-
@encoders
244+
default_encoders()
246245
|> Keyword.merge(raw_config(:format_encoders))
247246
|> Enum.filter(fn {_, v} -> v end)
248247
|> Enum.into(%{}, fn {k, v} -> {".#{k}", v} end)
@@ -251,6 +250,10 @@ defmodule Phoenix.Template do
251250
end
252251
end
253252

253+
defp default_encoders do
254+
[html: Phoenix.Template.HTML, json: Phoenix.json(), js: Phoenix.Template.HTML]
255+
end
256+
254257
@doc """
255258
Returns a keyword list with all template engines
256259
extensions followed by their modules.

test/test_helper.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ Code.require_file("support/router_helper.exs", __DIR__)
33
# Starts web server applications
44
Application.ensure_all_started(:cowboy)
55

6+
# Clear format encoder cache from startup and inject Jason
7+
Application.delete_env(:phoenix, :compiled_format_encoders)
8+
Application.put_env(:phoenix, :format_encoders, json: Jason)
9+
610
# Used whenever a router fails. We default to simply
711
# rendering a short string.
812
defmodule Phoenix.ErrorView do

0 commit comments

Comments
 (0)