git.iko.soy/typeable/bloodhound
on master help sign in
Drop homespun query rendering, fix tests
270aa8bMichael Xavier
bloodhound.cabal+2−1
@@ -37,7 +37,8 @@ library
37 vector >= 0.10.9 && <0.11,
37 vector >= 0.10.9 && <0.11,
38 uri-bytestring >= 0.1 && <0.2,
38 uri-bytestring >= 0.1 && <0.2,
39 exceptions,
39 exceptions,
40− data-default-class
40+ data-default-class,
41+ blaze-builder
41 default-language: Haskell2010
42 default-language: Haskell2010
42
43
43test-suite tests
44test-suite tests
src/Database/Bloodhound/Client.hs+10−5
@@ -54,6 +54,7 @@ module Database.Bloodhound.Client
54 )
54 )
55 where
55 where
56
56
57+import qualified Blaze.ByteString.Builder as BB
57import Control.Applicative
58import Control.Applicative
58import Control.Monad
59import Control.Monad
59import Control.Monad.Catch
60import Control.Monad.Catch
@@ -72,6 +73,7 @@ import qualified Data.Vector as V
72import Network.HTTP.Client
73import Network.HTTP.Client
73import qualified Network.HTTP.Types.Method as NHTM
74import qualified Network.HTTP.Types.Method as NHTM
74import qualified Network.HTTP.Types.Status as NHTS
75import qualified Network.HTTP.Types.Status as NHTS
76+import qualified Network.HTTP.Types.URI as NHTU
75import Prelude hiding (filter, head)
77import Prelude hiding (filter, head)
76import URI.ByteString hiding (Query)
78import URI.ByteString hiding (Query)
77
79
@@ -168,11 +170,12 @@ joinPath ps = do
168
170
169-- | Severely dumbed down query renderer. Assumes your data doesn't
171-- | Severely dumbed down query renderer. Assumes your data doesn't
170-- need any encoding
172-- need any encoding
171−addQuery :: [(Text, Text)] -> Text -> Text
173+addQuery :: [(Text, Maybe Text)] -> Text -> Text
172−addQuery ps u = u <> "?" <> params
174+addQuery q u = u <> rendered
173 where
175 where
174− params = T.intercalate "&" (uncurry mkParam <$> ps)
176+ rendered =
175− mkParam k v = k <> "=" <> v
177+ T.decodeUtf8 $ BB.toByteString $ NHTU.renderQueryText prependQuestionMark q
178+ prependQuestionMark = True
176
179
177
180
178bindM2 :: (Applicative m, Monad m) => (a -> b -> m c) -> m a -> m b -> m c
181bindM2 :: (Applicative m, Monad m) => (a -> b -> m c) -> m a -> m b -> m c
@@ -346,7 +349,9 @@ indexDocument (IndexName indexName)
346 ExternalGTE (ExternalDocVersion v) -> versionParams v "external_gte"
349 ExternalGTE (ExternalDocVersion v) -> versionParams v "external_gte"
347 ForceVersion (ExternalDocVersion v) -> versionParams v "force"
350 ForceVersion (ExternalDocVersion v) -> versionParams v "force"
348 vt = T.pack . show . docVersionNumber
351 vt = T.pack . show . docVersionNumber
349− versionParams v t = [("version", vt v), ("version_type", t)]
352+ versionParams v t = [ ("version", Just $ vt v)
353+ , ("version_type", Just t)
354+ ]
350 body = Just (encode document)
355 body = Just (encode document)
351
356
352-- | 'deleteDocument' is the primary way to delete a single document.
357-- | 'deleteDocument' is the primary way to delete a single document.
tests/tests.hs+6−5
@@ -5,6 +5,7 @@
5module Main where
5module Main where
6
6
7import Control.Applicative
7import Control.Applicative
8+import Control.Exception
8import Control.Monad
9import Control.Monad
9import Control.Monad.Reader
10import Control.Monad.Reader
10import Data.Aeson
11import Data.Aeson
@@ -688,10 +689,10 @@ main = hspec $ do
688
689
689 describe "Enum DocVersion" $ do
690 describe "Enum DocVersion" $ do
690 it "follows the laws of Enum, Bounded" $ do
691 it "follows the laws of Enum, Bounded" $ do
691− return (succ maxBound :: DocVersion) `shouldThrow` anyErrorCall
692+ evaluate (succ maxBound :: DocVersion) `shouldThrow` anyErrorCall
692− return (pred minBound :: DocVersion) `shouldThrow` anyErrorCall
693+ evaluate (pred minBound :: DocVersion) `shouldThrow` anyErrorCall
693− return (toEnum 0 :: DocVersion) `shouldThrow` anyErrorCall
694+ evaluate (toEnum 0 :: DocVersion) `shouldThrow` anyErrorCall
694− return (toEnum 9200000000000000001 :: DocVersion) `shouldThrow` anyErrorCall
695+ evaluate (toEnum 9200000000000000001 :: DocVersion) `shouldThrow` anyErrorCall
695 enumFrom (pred maxBound :: DocVersion) `shouldBe` [pred maxBound, maxBound]
696 enumFrom (pred maxBound :: DocVersion) `shouldBe` [pred maxBound, maxBound]
696 enumFrom (pred maxBound :: DocVersion) `shouldBe` [pred maxBound, maxBound]
697 enumFrom (pred maxBound :: DocVersion) `shouldBe` [pred maxBound, maxBound]
697− enumFromThen minBound (pred maxBound :: DocVersion) `shouldBe` [minBound, pred maxBound, maxBound]
698+ enumFromThen minBound (pred maxBound :: DocVersion) `shouldBe` [minBound, pred maxBound]