From 70aebfc6ad2e97f92dc076924e7425dc9da22ec7 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Thu, 31 Oct 2013 02:47:45 +0000 Subject: [PATCH] add `get_key/1' to `jsx_to_json' and `jsx_to_term' --- src/jsx_to_json.erl | 21 +++++++++++++++++++-- src/jsx_to_term.erl | 17 ++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/jsx_to_json.erl b/src/jsx_to_json.erl index 73209eb..21fea69 100644 --- a/src/jsx_to_json.erl +++ b/src/jsx_to_json.erl @@ -25,7 +25,7 @@ -export([to_json/2, format/2]). -export([init/1, handle_event/2]). --export([start_object/1, start_array/1, insert/2, insert/3, finish/1]). +-export([start_object/1, start_array/1, finish/1, insert/2, insert/3, get_key/1]). -record(config, { @@ -228,6 +228,11 @@ insert(Key, Value, {[{object, Object}|Rest], Config}) when is_binary(Key), is_bi insert(_, _, _) -> erlang:error(badarg). +get_key({[{object, Key, _}|_], _}) -> {ok, Key}; +get_key(_) -> {error, nokey}. + + + %% eunit tests -ifdef(TEST). @@ -369,6 +374,18 @@ rep_manipulation_test_() -> {[{object, <<"\"key\"">>, <<"{">>}], #config{}}, insert(<<"\"key\"">>, {[{object, <<"{">>}], #config{}}) )}, + {"get current key", ?_assertEqual( + {ok, key}, + get_key({[{object, key, <<"{">>}], #config{}}) + )}, + {"try to get non-key from object", ?_assertEqual( + {error, nokey}, + get_key({[{object, <<"{">>}], #config{}}) + )}, + {"try to get key from array", ?_assertEqual( + {error, nokey}, + get_key({[{array, <<"[">>}], #config{}}) + )}, {"insert a value into an object", ?_assertEqual( {[{object, <<"{\"key\":true">>}], #config{}}, insert(<<"true">>, {[{object, <<"\"key\"">>, <<"{">>}], #config{}}) @@ -419,4 +436,4 @@ handle_event_test_() -> ]. --endif. \ No newline at end of file +-endif. diff --git a/src/jsx_to_term.erl b/src/jsx_to_term.erl index 815da4b..173d190 100644 --- a/src/jsx_to_term.erl +++ b/src/jsx_to_term.erl @@ -25,7 +25,7 @@ -export([to_term/2]). -export([init/1, handle_event/2]). --export([start_object/1, start_array/1, finish/1, insert/2, insert/3]). +-export([start_object/1, start_array/1, finish/1, insert/2, insert/3, get_key/1]). -record(config, { @@ -144,6 +144,9 @@ insert(Key, Value, {[{object, Pairs}|Rest], Config}) -> insert(_, _, _) -> erlang:error(badarg). +get_key({[{object, Key, _}|_], _}) -> {ok, Key}; +get_key(_) -> {error, nokey}. + %% eunit tests @@ -212,6 +215,18 @@ rep_manipulation_test_() -> {[{object, key, []}, junk], #config{}}, insert(key, {[{object, []}, junk], #config{}}) )}, + {"get current key", ?_assertEqual( + {ok, key}, + get_key({[{object, key, []}], #config{}}) + )}, + {"try to get non-key from object", ?_assertEqual( + {error, nokey}, + get_key({[{object, []}], #config{}}) + )}, + {"try to get key from array", ?_assertEqual( + {error, nokey}, + get_key({[{array, []}], #config{}}) + )}, {"insert a value into an object", ?_assertEqual( {[{object, [{key, value}]}, junk], #config{}}, insert(value, {[{object, key, []}, junk], #config{}})