couchdb-conduit 0.10.0 → 0.10.1
raw patch · 4 files changed
+28/−20 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Database.CouchDB.Conduit.View.Query: QPDescending :: CouchQP
- Database.CouchDB.Conduit.View.Query: mkQuery :: Bool -> [CouchQP] -> Query
+ Database.CouchDB.Conduit.View.Query: mkQuery :: [CouchQP] -> Query
Files
- couchdb-conduit.cabal +1/−1
- src/Database/CouchDB/Conduit/View/Query.hs +19/−11
- test/Database/CouchDB/Conduit/Test/Query.hs +4/−4
- test/Main.hs +4/−4
couchdb-conduit.cabal view
@@ -1,5 +1,5 @@ name: couchdb-conduit-version: 0.10.0 +version: 0.10.1 cabal-version: >= 1.8 build-type: Simple stability: Testing
src/Database/CouchDB/Conduit/View/Query.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE OverloadedStrings, ExistentialQuantification #-} +{-# LANGUAGE OverloadedStrings, ExistentialQuantification, BangPatterns #-} -- | CouchDB View Query options. -- @@ -21,6 +21,7 @@ import qualified Data.HashMap.Strict as MS import qualified Data.Aeson as A import Data.String.Conversions (cs, (<>)) +import qualified Data.List as L import qualified Network.HTTP.Types as HT @@ -56,6 +57,11 @@ -- ^ 'Bool' query parameter. -- -- > ...?param=true + + | QPDescending + -- ^ Reverse rows output. + -- + -- > ...?descending=true | QPLimit Int -- ^ Limit rows. Use @Zero (0)@ to omit. @@ -137,24 +143,20 @@ -- ^ Document id to end with. -- -- > ...?endkey_docid=... - + -- | Make CouchDB query options. mkQuery :: - Bool -- ^ Descending sort order. On @True@ adds - -- @descending@ to query. Also swaps - -- @start_key@ and @end_key@ parameters - -> [CouchQP] -- ^ Query options. + [CouchQP] -- ^ Query options. -> HT.Query -mkQuery desc = - parseDesc desc . concatMap parseqp +mkQuery qs = + concatMap parseqp qs where - parseDesc True = (("descending", Just "true"):) - parseDesc False = id parseqp (QPComplex n v) = [(n, Just $ cs . A.encode $ v)] parseqp (QPBS n v) = [(n, Just $ "\"" <> v <> "\"")] parseqp (QPInt n v) = [(n, Just $ cs . show $ v)] parseqp (QPBool n True) = [(n, Just "true")] parseqp (QPBool n False) = [(n, Just "false")] + parseqp QPDescending = boolqp "descending" True parseqp (QPLimit v) = intZeroQp "limit" v parseqp (QPSkip v) = intZeroQp "skip" v parseqp (QPStale True) = [("stale", Just "ok")] @@ -180,7 +182,13 @@ intZeroQp _ 0 = [] intZeroQp n v = parseqp $ QPInt n v -- | Descending dependent param - descDep a b = if desc then b else a + descDep a b = if isDesc then b else a + + !isDesc = case L.find isDesc' qs of + Nothing -> False + _ -> True + isDesc' QPDescending = True + isDesc' _ = False
test/Database/CouchDB/Conduit/Test/Query.hs view
@@ -19,13 +19,13 @@ caseDescending :: Assertion caseDescending = liftIO $ do - mkQuery False [QPInt "i" 0] @=? [("i", Just "0")] - mkQuery True [QPInt "i" 0] @=? + mkQuery [QPInt "i" 0] @=? [("i", Just "0")] + mkQuery [QPDescending, QPInt "i" 0] @=? [desc, ("i", Just "0")] let swappable = [QPStartKey (0::Int), QPEndKey (1::Int)] - mkQuery False swappable @=? + mkQuery swappable @=? [("startkey", Just "0"), ("endkey", Just "1")] - mkQuery True swappable @=? + mkQuery (QPDescending : swappable) @=? [desc, ("endkey", Just "0"), ("startkey", Just "1")] where desc = ("descending", Just "true")
test/Main.hs view
@@ -11,10 +11,10 @@ main :: IO () main = defaultMain [ --- Database.CouchDB.Conduit.Test.Base.tests, --- Database.CouchDB.Conduit.Test.Explicit.tests, --- Database.CouchDB.Conduit.Test.Generic.tests, --- Database.CouchDB.Conduit.Test.View.tests, + Database.CouchDB.Conduit.Test.Base.tests, + Database.CouchDB.Conduit.Test.Explicit.tests, + Database.CouchDB.Conduit.Test.Generic.tests, + Database.CouchDB.Conduit.Test.View.tests, Database.CouchDB.Conduit.Test.Query.tests ]