@@ -41,7 +41,7 @@ defmodule Params do
41
41
Recursively traverses and transforms embedded changesets and skips keys that
42
42
was not part of params given to changeset
43
43
"""
44
- @ spec to_map ( Changeset . t ) :: map
44
+ @ spec to_map ( Changeset . t ( ) ) :: map
45
45
def to_map ( % Changeset { data: % { __struct__: module } } = ch ) do
46
46
ecto_defaults = module |> plain_defaults_defined_by_ecto_schema
47
47
params_defaults = module |> schema |> defaults
@@ -72,13 +72,14 @@ defmodule Params do
72
72
data.login # => "foo"
73
73
```
74
74
"""
75
- @ spec data ( Changeset . t ) :: struct
75
+ @ spec data ( Changeset . t ( ) ) :: struct
76
76
def data ( % Changeset { data: data = % { __struct__: module } } = ch ) do
77
77
default_embeds = default_embeds_from_schema ( module )
78
78
79
- default = Enum . reduce ( default_embeds , data , fn { k , v } , m ->
80
- Map . put ( m , k , Map . get ( m , k ) || v )
81
- end )
79
+ default =
80
+ Enum . reduce ( default_embeds , data , fn { k , v } , m ->
81
+ Map . put ( m , k , Map . get ( m , k ) || v )
82
+ end )
82
83
83
84
Enum . reduce ( ch . changes , default , fn { k , v } , m ->
84
85
case v do
@@ -103,12 +104,14 @@ defmodule Params do
103
104
end
104
105
105
106
case schema ( module ) do
106
- nil -> % { }
107
+ nil ->
108
+ % { }
109
+
107
110
schema ->
108
111
schema
109
112
|> Stream . filter ( is_embed_default )
110
113
|> Stream . map ( default_embed )
111
- |> Enum . into ( struct ( module ) |> Map . from_struct )
114
+ |> Enum . into ( struct ( module ) |> Map . from_struct ( ) )
112
115
end
113
116
end
114
117
@@ -143,7 +146,7 @@ defmodule Params do
143
146
changeset
144
147
|> Changeset . cast ( params , required ++ optional )
145
148
|> Changeset . validate_required ( required )
146
- |> cast_relations ( required_relations , [ required: true ] )
149
+ |> cast_relations ( required_relations , required: true )
147
150
|> cast_relations ( optional_relations , [ ] )
148
151
end
149
152
@@ -158,22 +161,23 @@ defmodule Params do
158
161
end
159
162
160
163
defp change ( % { __struct__: _ } = model ) do
161
- model |> Changeset . change
164
+ model |> Changeset . change ( )
162
165
end
163
166
164
167
defp change ( module ) when is_atom ( module ) do
165
- module |> struct |> Changeset . change
168
+ module |> struct |> Changeset . change ( )
166
169
end
167
170
168
171
defp relation_partition ( module , names ) do
169
- types = module . __changeset__
172
+ types = module . __changeset__ ( )
170
173
171
174
names
172
175
|> Stream . map ( fn x -> String . to_atom ( "#{ x } " ) end )
173
176
|> Enum . reduce ( { [ ] , [ ] } , fn name , { fields , relations } ->
174
177
case Map . get ( types , name ) do
175
178
{ type , _ } when type in @ relations ->
176
179
{ fields , [ { name , type } | relations ] }
180
+
177
181
_ ->
178
182
{ [ name | fields ] , relations }
179
183
end
@@ -194,33 +198,39 @@ defmodule Params do
194
198
defp deep_merge_conflict ( _k , % { } = m1 , % { } = m2 ) do
195
199
deep_merge ( m1 , m2 )
196
200
end
201
+
197
202
defp deep_merge_conflict ( _k , _v1 , v2 ) , do: v2
198
203
199
204
defp defaults ( params ) , do: defaults ( params , % { } , [ ] )
200
205
defp defaults ( params , acc , path )
201
206
defp defaults ( [ ] , acc , _path ) , do: acc
202
207
defp defaults ( nil , _acc , _path ) , do: % { }
208
+
203
209
defp defaults ( [ opts | rest ] , acc , path ) when is_list ( opts ) do
204
210
defaults ( [ Enum . into ( opts , % { } ) | rest ] , acc , path )
205
211
end
212
+
206
213
defp defaults ( [ % { name: name , embeds: embeds } | rest ] , acc , path ) do
207
214
acc = defaults ( embeds , acc , [ name | path ] )
208
215
defaults ( rest , acc , path )
209
216
end
217
+
210
218
defp defaults ( [ % { name: name , default: value } | rest ] , acc , path ) do
211
- funs = [ name | path ]
212
- |> Enum . reverse
213
- |> Enum . map ( fn nested_name ->
214
- fn :get_and_update , data , next ->
215
- with { nil , inner_data } <- next . ( data [ nested_name ] || % { } ) ,
216
- data = Map . put ( data , nested_name , inner_data ) ,
217
- do: { nil , data }
218
- end
219
- end )
219
+ funs =
220
+ [ name | path ]
221
+ |> Enum . reverse ( )
222
+ |> Enum . map ( fn nested_name ->
223
+ fn :get_and_update , data , next ->
224
+ with { nil , inner_data } <- next . ( data [ nested_name ] || % { } ) ,
225
+ data = Map . put ( data , nested_name , inner_data ) ,
226
+ do: { nil , data }
227
+ end
228
+ end )
220
229
221
230
acc = put_in ( acc , funs , value )
222
231
defaults ( rest , acc , path )
223
232
end
233
+
224
234
defp defaults ( [ % { } | rest ] , acc , path ) do
225
235
defaults ( rest , acc , path )
226
236
end
@@ -238,7 +248,7 @@ defmodule Params do
238
248
defp plain_defaults_defined_by_ecto_schema ( module ) do
239
249
module
240
250
|> struct
241
- |> Map . from_struct
251
+ |> Map . from_struct ( )
242
252
|> Map . delete ( :__meta__ )
243
253
|> Enum . reject ( fn { _ , v } -> is_nil ( v ) end )
244
254
|> Enum . into ( % { } )
0 commit comments