From 02f5ec75874a837e8543966208fe58c5471da8de Mon Sep 17 00:00:00 2001 From: Juan Facorro Date: Tue, 12 Aug 2014 14:21:28 -0300 Subject: [PATCH] [#1] get/[2,3] to access values in nested maps. --- .gitignore | 1 + Makefile | 8 ++++++++ src/katana_maps.erl | 28 ++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 src/katana_maps.erl diff --git a/.gitignore b/.gitignore index 9c070b2..2d6bc77 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ logs bin ebin deps +.erlang.mk.* \ No newline at end of file diff --git a/Makefile b/Makefile index 4921c48..6ad2b14 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,10 @@ PROJECT = katana + +DEPS = sync + +dep_sync = git https://github.com/rustyio/sync.git master + include erlang.mk + +shell: app + erl -pa ebin -pa deps/*/ebin -s sync diff --git a/src/katana_maps.erl b/src/katana_maps.erl new file mode 100644 index 0000000..4d28083 --- /dev/null +++ b/src/katana_maps.erl @@ -0,0 +1,28 @@ +-module(katana_maps). + +-export([ + get/2, + get/3 + ]). + +-spec get(term(), map()) -> term(). +get(Keys, Map) -> + get(Keys, Map, undefined). + +-spec get(term(), map(), term()) -> term(). +get([Key], Map, Default) -> + get(Key, Map, Default); +get([Key | Rest], Map, Default) -> + case get(Key, Map, Default) of + NewMap when is_map(NewMap) -> + get(Rest, NewMap, Default); + _ -> + Default + end; +get(Key, Map, Default) -> + case maps:is_key(Key, Map) of + true -> + maps:get(Key, Map); + false -> + Default + end.