packages feed

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 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
     ]