From 1ea2cadb1a868d1654192e7dd77ecba1f63a9a5a Mon Sep 17 00:00:00 2001 From: Jesse Gumm Date: Sat, 5 Mar 2016 16:26:58 -0600 Subject: [PATCH] Fix relative parser --- src/qdate.erl | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/qdate.erl b/src/qdate.erl index 8f9c5ea..e7afb7b 100644 --- a/src/qdate.erl +++ b/src/qdate.erl @@ -655,8 +655,8 @@ range_years(Interval, Start, Finish) -> parse_relative({relative, Date, Relation}) when is_atom(Relation) -> parse_relative({relative, Date, atom_to_list(Relation)}); -parse_relative({relative, Date, Relation}) -> - {OpStr, NumStr, UnitStr} = parse_actual_relation(Relation), +parse_relative({relative, Date, Relation}) when is_list(Relation); is_binary(Relation) -> + {OpStr, NumStr, UnitStr} = parse_actual_relation(Relation), {Num, Unit} = normalize_relative_matches(OpStr, NumStr, UnitStr), add_unit(Unit, Num, Date); parse_relative(now) -> @@ -665,8 +665,10 @@ parse_relative("now") -> unixtime(); parse_relative(<<"now">>) -> unixtime(); -parse_relative(Relation) -> - parse_relative({relative, unixtime(), Relation}). +parse_relative(Relation) when is_list(Relation); is_binary(Relation) -> + parse_relative({relative, unixtime(), Relation}); +parse_relative(_) -> + undefined. %% I would do this function recursively, but the return order of arguments @@ -873,7 +875,8 @@ try_parsers(RawDate,[{ParserKey,Parser}|Parsers]) -> throw({invalid_parser_return_value,[{parser_key,ParserKey},{return,Other}]}) catch Error:Reason -> - throw({error_in_parser,[{error,{Error,Reason}},{parser_key,ParserKey}]}) + Stacktrace = erlang:get_stacktrace(), + throw({error_in_parser,[{error,{Error,Reason}},{parser_key,ParserKey}, {stacktrace, Stacktrace}]}) end. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%