Skip to content

Commit bdb8c69

Browse files
committed
Use new, separate :ecto_on_writable_violation to not pollute :ecto_fields
1 parent 412faf2 commit bdb8c69

1 file changed

Lines changed: 11 additions & 12 deletions

File tree

lib/ecto/schema.ex

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ defmodule Ecto.Schema do
525525
Module.register_attribute(__MODULE__, :ecto_autogenerate, accumulate: true)
526526
Module.register_attribute(__MODULE__, :ecto_autoupdate, accumulate: true)
527527
Module.register_attribute(__MODULE__, :ecto_redact_fields, accumulate: true)
528+
Module.register_attribute(__MODULE__, :ecto_on_writable_violation, accumulate: true)
528529
end
529530
end
530531

@@ -2078,6 +2079,8 @@ defmodule Ecto.Schema do
20782079
raise ArgumentError, "autogenerated fields must always be writable"
20792080
end
20802081

2082+
Module.put_attribute(mod, :ecto_on_writable_violation, {name, on_writable_violation})
2083+
20812084
if pk? do
20822085
Module.put_attribute(mod, :ecto_primary_keys, name)
20832086
end
@@ -2086,7 +2089,7 @@ defmodule Ecto.Schema do
20862089
Module.put_attribute(mod, :ecto_query_fields, {name, type})
20872090
end
20882091

2089-
Module.put_attribute(mod, :ecto_fields, {name, {type, {writable, on_writable_violation}}})
2092+
Module.put_attribute(mod, :ecto_fields, {name, {type, writable}})
20902093
end
20912094
end
20922095

@@ -2376,6 +2379,7 @@ defmodule Ecto.Schema do
23762379
autoupdate = Module.get_attribute(module, :ecto_autoupdate) |> Enum.reverse()
23772380
read_after_writes = Module.get_attribute(module, :ecto_raw) |> Enum.reverse()
23782381
autogenerate_id = Module.get_attribute(module, :ecto_autogenerate_id)
2382+
on_writable_violation = Module.get_attribute(module, :ecto_on_writable_violation)
23792383

23802384
struct_fields = Module.get_attribute(module, :ecto_struct_fields) |> Enum.reverse()
23812385
derive = Module.get_attribute(module, :derive)
@@ -2392,7 +2396,7 @@ defmodule Ecto.Schema do
23922396
end
23932397

23942398
load =
2395-
for {name, {type, {_writable, _on_writable_violation}}} <- fields do
2399+
for {name, {type, _writable}} <- fields do
23962400
if alias = field_sources[name] do
23972401
{name, {:source, alias, type}}
23982402
else
@@ -2401,17 +2405,17 @@ defmodule Ecto.Schema do
24012405
end
24022406

24032407
dump =
2404-
for {name, {type, {writable, _on_writable_violation}}} <- fields do
2408+
for {name, {type, writable}} <- fields do
24052409
{name, {field_sources[name] || name, type, writable}}
24062410
end
24072411

24082412
field_sources_quoted =
2409-
for {name, {_type, {_writable, _on_writable_violation}}} <- fields do
2413+
for {name, {_type, _writable}} <- fields do
24102414
{[:field_source, name], field_sources[name] || name}
24112415
end
24122416

24132417
types_quoted =
2414-
for {name, {type, {_writable, _on_writable_violation}}} <- fields do
2418+
for {name, {type, _writable}} <- fields do
24152419
{[:type, name], Macro.escape(type)}
24162420
end
24172421

@@ -2435,7 +2439,7 @@ defmodule Ecto.Schema do
24352439
embed_names = Enum.map(embeds, &elem(&1, 0))
24362440

24372441
updatable =
2438-
for {name, {_, {writable, _on_writable_violation}}} <- fields, reduce: {[], []} do
2442+
for {name, {_, writable}} <- fields, reduce: {[], []} do
24392443
{keep, drop} ->
24402444
case writable do
24412445
:always -> {[name | keep], drop}
@@ -2444,19 +2448,14 @@ defmodule Ecto.Schema do
24442448
end
24452449

24462450
insertable =
2447-
for {name, {_, {writable, _on_writable_violation}}} <- fields, reduce: {[], []} do
2451+
for {name, {_, writable}} <- fields, reduce: {[], []} do
24482452
{keep, drop} ->
24492453
case writable do
24502454
:never -> {keep, [name | drop]}
24512455
_ -> {[name | keep], drop}
24522456
end
24532457
end
24542458

2455-
on_writable_violation =
2456-
for {name, {_, {_writable, on_writable_violation}}} <- fields do
2457-
{name, on_writable_violation}
2458-
end
2459-
24602459
single_arg = [
24612460
{[:dump], dump |> Map.new() |> Macro.escape()},
24622461
{[:load], load |> Macro.escape()},

0 commit comments

Comments
 (0)