Skip to content

Commit 0efb697

Browse files
committed
nested map
1 parent dfd3997 commit 0efb697

File tree

2 files changed

+51
-14
lines changed

2 files changed

+51
-14
lines changed

lib/vex/extract.ex

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ defimpl Vex.Extract, for: Map do
2525
def settings(map) do
2626
Map.get(map, :_vex)
2727
end
28+
29+
def attribute(map, path) when is_list(path) do
30+
get_in map, path
31+
end
2832
def attribute(map, name) do
2933
Map.get(map, name)
3034
end

test/validations/nested_test.exs

+47-14
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,58 @@ end
88
defmodule NestedTest do
99
use ExUnit.Case
1010

11-
test "nested" do
12-
assert Vex.valid?([author: [name: "Foo"]], %{[:author, :name] => [presence: true]})
11+
describe "keyword list" do
12+
test "nested" do
13+
assert Vex.valid?([author: [name: "Foo"]], %{[:author, :name] => [presence: true]})
14+
assert Vex.valid?([author: %{name: "Foo"}], %{[:author, :name] => [presence: true]})
1315

14-
nested_errors = [{:error, [:author, :name], :presence, "must be present"}]
15-
assert nested_errors == Vex.errors([author: [name: ""]], %{[:author, :name] => [presence: true]})
16-
end
16+
nested_errors_list = [{:error, [:author, :name], :presence, "must be present"}]
17+
assert nested_errors_list == Vex.errors([author: [name: ""]], %{[:author, :name] => [presence: true]})
1718

18-
test "nested with _vex" do
19-
assert Vex.valid?([author: [name: "Foo"], _vex: %{[:author, :name] => [presence: true]}])
19+
nested_errors_mixed = [{:error, [:author, :name], :presence, "must be present"}]
20+
assert nested_errors_mixed == Vex.errors([author: %{name: ""}], %{[:author, :name] => [presence: true]})
21+
end
2022

21-
nested_errors = [{:error, [:author, :name], :presence, "must be present"}]
22-
assert nested_errors == Vex.errors([author: [name: ""], _vex: %{[:author, :name] => [presence: true]}])
23-
end
23+
test "nested with _vex" do
24+
assert Vex.valid?([author: [name: "Foo"], _vex: %{[:author, :name] => [presence: true]}])
25+
assert Vex.valid?([author: %{name: "Foo"}, _vex: %{[:author, :name] => [presence: true]}])
26+
27+
nested_errors_list = [{:error, [:author, :name], :presence, "must be present"}]
28+
assert nested_errors_list == Vex.errors([author: [name: ""], _vex: %{[:author, :name] => [presence: true]}])
2429

25-
test "nested in Record" do
26-
assert Vex.valid?(%NestedTestRecord{author: [name: "Foo"]})
30+
nested_errors_mixed = [{:error, [:author, :name], :presence, "must be present"}]
31+
assert nested_errors_mixed == Vex.errors([author: %{name: ""}, _vex: %{[:author, :name] => [presence: true]}])
32+
end
2733

28-
nested_errors = [{:error, [:author, :name], :presence, "must be present"}]
29-
assert nested_errors == Vex.errors(%NestedTestRecord{author: [name: ""]})
34+
test "nested in Record" do
35+
assert Vex.valid?(%NestedTestRecord{author: [name: "Foo"]})
36+
37+
nested_errors = [{:error, [:author, :name], :presence, "must be present"}]
38+
assert nested_errors == Vex.errors(%NestedTestRecord{author: [name: ""]})
39+
end
3040
end
3141

42+
describe "map" do
43+
test "nested " do
44+
assert Vex.valid?(%{author: %{name: "Foo"}}, %{[:author, :name] => [presence: true]})
45+
46+
nested_errors = [{:error, [:author, :name], :presence, "must be present"}]
47+
assert nested_errors == Vex.errors(%{author: %{name: ""}}, %{[:author, :name] => [presence: true]})
48+
end
49+
50+
test "nested with _vex" do
51+
assert Vex.valid?(%{author: %{name: "Foo"}, _vex: %{[:author, :name] => [presence: true]}})
52+
assert Vex.valid?(%{author: [name: "Foo"], _vex: %{[:author, :name] => [presence: true]}})
53+
54+
nested_errors = [{:error, [:author, :name], :presence, "must be present"}]
55+
assert nested_errors == Vex.errors([author: [name: ""], _vex: %{[:author, :name] => [presence: true]}])
56+
end
57+
58+
test "nested in Record" do
59+
assert Vex.valid?(%NestedTestRecord{author: %{name: "Foo"}})
60+
61+
nested_errors = [{:error, [:author, :name], :presence, "must be present"}]
62+
assert nested_errors == Vex.errors(%NestedTestRecord{author: %{name: ""}})
63+
end
64+
end
3265
end

0 commit comments

Comments
 (0)