From ef42d1c87fcc901a865bce5ce7909fbf05f7fed1 Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Mon, 24 Oct 2022 19:23:22 -0500 Subject: [PATCH] test: add doctest for pOrderTerm --- src/PostgREST/ApiRequest/QueryParams.hs | 38 +++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/PostgREST/ApiRequest/QueryParams.hs b/src/PostgREST/ApiRequest/QueryParams.hs index 01a1e2896..de48bd3da 100644 --- a/src/PostgREST/ApiRequest/QueryParams.hs +++ b/src/PostgREST/ApiRequest/QueryParams.hs @@ -74,6 +74,9 @@ import Protolude hiding (try) -- >>> deriving instance Show Filter -- >>> deriving instance Show JoinType -- >>> deriving instance Show SelectItem +-- >>> deriving instance Show OrderDirection +-- >>> deriving instance Show OrderNulls +-- >>> deriving instance Show OrderTerm data QueryParams = QueryParams @@ -583,23 +586,34 @@ pQuotedValue = toS <$> (char '"' *> many pCharsOrSlashed <* char '"') pDelimiter :: Parser Char pDelimiter = char '.' "delimiter (.)" +-- | +-- Parses the elements in the order query parameter +-- +-- >>> P.parse pOrder "" "name.desc.nullsfirst" +-- Right [OrderTerm {otTerm = ("name",[]), otDirection = Just OrderDesc, otNullOrder = Just OrderNullsFirst}] +-- +-- >>> P.parse pOrder "" "json_col->key.asc.nullslast" +-- Right [OrderTerm {otTerm = ("json_col",[JArrow {jOp = JKey {jVal = "key"}}]), otDirection = Just OrderAsc, otNullOrder = Just OrderNullsLast}] pOrder :: Parser [OrderTerm] pOrder = lexeme pOrderTerm `sepBy1` char ',' - -pOrderTerm :: Parser OrderTerm -pOrderTerm = do - fld <- pField - dir <- optionMaybe $ - try (pDelimiter *> string "asc" $> OrderAsc) <|> - try (pDelimiter *> string "desc" $> OrderDesc) - nls <- optionMaybe pNulls <* pEnd <|> - pEnd $> Nothing - return $ OrderTerm fld dir nls where + pOrderTerm :: Parser OrderTerm + pOrderTerm = do + fld <- pField + dir <- optionMaybe pOrdDir + nls <- optionMaybe pNulls <* pEnd <|> + pEnd $> Nothing + return $ OrderTerm fld dir nls + + pNulls :: Parser OrderNulls pNulls = try (pDelimiter *> string "nullsfirst" $> OrderNullsFirst) <|> try (pDelimiter *> string "nullslast" $> OrderNullsLast) - pEnd = try (void $ lookAhead (char ',')) <|> - try eof + + pOrdDir :: Parser OrderDirection + pOrdDir = try (pDelimiter *> string "asc" $> OrderAsc) <|> + try (pDelimiter *> string "desc" $> OrderDesc) + + pEnd = try (void $ lookAhead (char ',')) <|> try eof pLogicTree :: Parser LogicTree pLogicTree = Stmnt <$> try pLogicFilter