Skip to content

Commit 35ec641

Browse files
DanielZendejasmichalmuskala
authored andcommitted
Fix bug where an empty map would be stored as an empty array. (#101)
* Fix bug where an empty map %{} would be stored as an empty array []. * Add unit test. Small fix refactor. * Fix ugly newline in tests.
1 parent d38f994 commit 35ec641

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

lib/mongo_ecto/conversions.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,13 @@ defmodule Mongo.Ecto.Conversions do
4949
def from_ecto_pk(_value, _pk),
5050
do: :error
5151

52+
defp document(doc, _pk) when is_map(doc) and map_size(doc) == 0,
53+
do: {:ok, %{}}
5254
defp document(doc, pk) do
5355
map(doc, fn {key, value} ->
5456
pair(key, value, pk, &from_ecto_pk(&1, pk))
5557
end)
5658
end
57-
5859
defp document(doc, params, pk) do
5960
map(doc, fn {key, value} ->
6061
pair(key, value, pk, &inject_params(&1, params, pk))

test/mongo_ecto/normalized_query_test.exs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ defmodule Mongo.Ecto.NormalizedQueryTest do
1010
use Ecto.Model
1111

1212
schema "model" do
13+
field :m, :map
1314
field :x, :integer
1415
field :y, :integer, default: 5
1516
field :z, {:array, :integer}
@@ -42,7 +43,7 @@ defmodule Mongo.Ecto.NormalizedQueryTest do
4243
test "bare model" do
4344
query = Model |> from |> normalize
4445
assert_query(query, coll: "model", query: %{},
45-
projection: %{_id: true, x: true, y: true, z: true},
46+
projection: %{_id: true, x: true, y: true, z: true, m: true},
4647
opts: [])
4748
assert [{:&, _, _}] = query.fields
4849
end
@@ -79,11 +80,11 @@ defmodule Mongo.Ecto.NormalizedQueryTest do
7980
assert [{:field, :x, _}, {:field, :y, _}] = query.fields
8081

8182
query = Model |> select([r], [r, r.x]) |> normalize
82-
assert_query(query, projection: %{_id: true, x: true, y: true, z: true})
83+
assert_query(query, projection: %{_id: true, x: true, y: true, z: true, m: true})
8384
assert [{:&, _, _}, {:field, :x, _}] = query.fields
8485

8586
query = Model |> select([r], [r]) |> normalize
86-
assert_query(query, projection: %{_id: true, x: true, y: true, z: true})
87+
assert_query(query, projection: %{_id: true, x: true, y: true, z: true, m: true})
8788
assert [{:&, _, _}] = query.fields
8889

8990
query = Model |> select([r], {1}) |> normalize
@@ -95,7 +96,7 @@ defmodule Mongo.Ecto.NormalizedQueryTest do
9596
assert [{:field, :id, _}] = query.fields
9697

9798
query = from(r in Model) |> normalize
98-
assert_query(query, projection: %{_id: true, x: true, y: true, z: true})
99+
assert_query(query, projection: %{_id: true, x: true, y: true, z: true, m: true})
99100
assert [{:&, _, _}] = query.fields
100101
end
101102

@@ -441,7 +442,7 @@ defmodule Mongo.Ecto.NormalizedQueryTest do
441442
query = Model |> insert(x: nil, y: nil, z: nil)
442443
assert_query(query, command: [y: nil, z: nil])
443444

444-
query = Model |> insert(x: 1, y: 5, z: [])
445-
assert_query(query, command: [x: 1, y: 5, z: []])
445+
query = Model |> insert(x: 1, y: 5, z: [], m: %{})
446+
assert_query(query, command: [x: 1, y: 5, z: [], m: %{}])
446447
end
447448
end

0 commit comments

Comments
 (0)