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
[