Skip to content

Commit 606c63d

Browse files
authored
Merge pull request #43 from nalundgaard/issue_42
Patch jsn:delete to delete objects at end of path
2 parents 99352c8 + 41b4220 commit 606c63d

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

src/jsn.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -989,7 +989,8 @@ keys_set(Keys, {P}, Value, Empty) when is_list(P) ->
989989
keys_set([Key | Rest], Object, Value, Empty)
990990
when is_binary(Key), (is_list(Object) orelse is_map(Object)) ->
991991
case key_get(Key, Object, jsn__undefined) of
992-
E when Value =:= jsn__delete, (E =:= jsn__undefined orelse E =:= Empty) ->
992+
E when Value =:= jsn__delete, Rest /= [],
993+
(E =:= jsn__undefined orelse E =:= Empty) ->
993994
return_if_object(Object, Empty);
994995
E when E =:= jsn__undefined; E =:= Empty ->
995996
key_set(Key, Object, keys_set(Rest, Empty, Value, Empty));

test/jsn_tests.erl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,12 @@ delete_test_() ->
295295
?_assertEqual(#{}, jsn:delete(Path3, #{})),
296296
?_assertEqual([], jsn:delete(<<"foo">>, [{<<"foo">>, <<"bar">>}])),
297297
?_assertEqual(#{}, jsn:delete(<<"foo">>, #{<<"foo">> => <<"bar">>})),
298+
?_assertEqual(#{}, jsn:delete(<<"foo">>, #{<<"foo">> => #{}})),
299+
?_assertEqual(#{}, jsn:delete(<<"foo">>, #{<<"foo">> => []})),
300+
?_assertEqual(#{<<"foo">> => #{}},
301+
jsn:delete(<<"foo.bar">>, #{<<"foo">> => #{<<"bar">> => #{}}})),
302+
?_assertEqual(#{<<"foo">> => #{<<"bar">> => #{}}},
303+
jsn:delete(<<"foo.baz">>, #{<<"foo">> => #{<<"bar">> => #{}}})),
298304
?_assertEqual(jsn:new({Path2, [1,2,3]}, [{format, proplist}]),
299305
jsn:delete(foo, Object1Plist)),
300306
?_assertEqual(jsn:new({Path2, [1,2,3]}, [{format, map}]),

0 commit comments

Comments
 (0)