changed
hex_metadata.config
|
@@ -5,15 +5,16 @@
|
5
5
|
{<<"elixir">>,<<"~> 1.5">>}.
|
6
6
|
{<<"files">>,
|
7
7
|
[<<"lib">>,<<"lib/cereal.ex">>,<<"lib/cereal">>,
|
8
|
+ <<"lib/cereal/formatter.ex">>,<<"lib/cereal/utils.ex">>,
|
9
|
+ <<"lib/cereal/serializer.ex">>,<<"lib/cereal/error_serializer.ex">>,
|
8
10
|
<<"lib/cereal/phoenix_view.ex">>,
|
9
11
|
<<"lib/cereal/association_not_loaded_error.ex">>,<<"lib/cereal/builders">>,
|
10
|
- <<"lib/cereal/builders/error.ex">>,<<"lib/cereal/builders/errors.ex">>,
|
11
12
|
<<"lib/cereal/builders/base.ex">>,<<"lib/cereal/builders/entity.ex">>,
|
12
|
- <<"lib/cereal/formatter.ex">>,<<"lib/cereal/formatters">>,
|
13
|
- <<"lib/cereal/formatters/attributes.ex">>,
|
14
|
- <<"lib/cereal/formatters/errors.ex">>,<<"lib/cereal/errors.ex">>,
|
15
|
- <<"lib/cereal/error_serializer.ex">>,<<"lib/cereal/utils.ex">>,
|
16
|
- <<"lib/cereal/serializer.ex">>,<<"mix.exs">>,<<"README.md">>,<<"LICENSE">>]}.
|
13
|
+ <<"lib/cereal/builders/errors.ex">>,<<"lib/cereal/builders/error.ex">>,
|
14
|
+ <<"lib/cereal/errors.ex">>,<<"lib/cereal/formatters">>,
|
15
|
+ <<"lib/cereal/formatters/errors.ex">>,
|
16
|
+ <<"lib/cereal/formatters/attributes.ex">>,<<"mix.exs">>,<<"README.md">>,
|
17
|
+ <<"LICENSE">>]}.
|
17
18
|
{<<"licenses">>,[<<"MIT">>]}.
|
18
19
|
{<<"links">>,[{<<"GitHub">>,<<"https://github.com/Frameio/cereal_ex">>}]}.
|
19
20
|
{<<"name">>,<<"cereal">>}.
|
|
@@ -33,4 +34,4 @@
|
33
34
|
{<<"optional">>,false},
|
34
35
|
{<<"repository">>,<<"hexpm">>},
|
35
36
|
{<<"requirement">>,<<"~> 2.2">>}]]}.
|
36
|
- {<<"version">>,<<"1.3.1">>}.
|
37
|
+ {<<"version">>,<<"1.3.2">>}.
|
changed
lib/cereal/serializer.ex
|
@@ -122,7 +122,9 @@ defmodule Cereal.Serializer do
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
- defmacro embeds_one(name, [serializer: serializer] = _opts) do
|
125
|
+ defmacro embeds_one(name, opts) do
|
126
|
+ [serializer: serializer] = expand_serializer_in_place(opts, {:embeds_one, 2}, __CALLER__)
|
127
|
+
|
126
128
|
quote do
|
127
129
|
@attributes [unquote(name) | @attributes]
|
128
130
|
def unquote(name)(%{unquote(name) => nil}, _), do: nil
|
|
@@ -134,6 +136,7 @@ defmodule Cereal.Serializer do
|
134
136
|
end
|
135
137
|
|
136
138
|
defmacro has_one(name, opts) do
|
139
|
+ opts = expand_serializer_in_place(opts, {:has_many, 2}, __CALLER__)
|
137
140
|
normalized_opts = normalize_relationship_opts(opts, __CALLER__)
|
138
141
|
|
139
142
|
quote do
|
|
@@ -143,6 +146,7 @@ defmodule Cereal.Serializer do
|
143
146
|
end
|
144
147
|
|
145
148
|
defmacro has_many(name, opts) do
|
149
|
+ opts = expand_serializer_in_place(opts, {:has_many, 2}, __CALLER__)
|
146
150
|
normalized_opts = normalize_relationship_opts(opts, __CALLER__)
|
147
151
|
|
148
152
|
quote do
|
|
@@ -171,9 +175,16 @@ defmodule Cereal.Serializer do
|
171
175
|
end
|
172
176
|
end
|
173
177
|
|
174
|
- defp normalize_relationship_opts(opts, _) do
|
178
|
+ defp normalize_relationship_opts(opts, _env) do
|
175
179
|
quote do
|
176
180
|
unquote(opts) |> Enum.into(%{})
|
177
181
|
end
|
178
182
|
end
|
183
|
+
|
184
|
+ defp expand_serializer_in_place(opts, alias_context, env) do
|
185
|
+ Keyword.update!(opts, :serializer, &expand_alias(&1, alias_context, env))
|
186
|
+ end
|
187
|
+
|
188
|
+ defp expand_alias({:__aliases__, _, _} = ast, alias_context, env), do: Macro.expand(ast, %{env | function: alias_context})
|
189
|
+ defp expand_alias(ast, _alias_context, _env), do: ast
|
179
190
|
end
|
changed
mix.exs
|
@@ -1,7 +1,7 @@
|
1
1
|
defmodule Cereal.Mixfile do
|
2
2
|
use Mix.Project
|
3
3
|
|
4
|
- @version "1.3.1"
|
4
|
+ @version "1.3.2"
|
5
5
|
|
6
6
|
def project do
|
7
7
|
[
|