git.iko.soy/typeable/servant
on master help sign in
make QueryFlag more permissive
0802221Alp Mestanogullari
src/Servant/API/QueryParam.hs+5−2
@@ -132,12 +132,15 @@ instance (KnownSymbol sym, HasServer sublayout)
132 route Proxy subserver request respond = do
132 route Proxy subserver request respond = do
133 let querytext = parseQueryText $ rawQueryString request
133 let querytext = parseQueryText $ rawQueryString request
134 param = case lookup paramname querytext of
134 param = case lookup paramname querytext of
135− Just Nothing -> True -- param is there, with no value
135+ Just Nothing -> True -- param is there, with no value
136+ Just (Just v) -> examine v -- param with a value
136− _ -> False -- param not in the query string or with a value
137+ Nothing -> False -- param not in the query string
137
138
138 route (Proxy :: Proxy sublayout) (subserver param) request respond
139 route (Proxy :: Proxy sublayout) (subserver param) request respond
139
140
140 where paramname = cs $ symbolVal (Proxy :: Proxy sym)
141 where paramname = cs $ symbolVal (Proxy :: Proxy sym)
142+ examine v | v == "true" || v == "1" || v == "" = True
143+ | otherwise = False
141
144
142instance (KnownSymbol sym, HasClient sublayout)
145instance (KnownSymbol sym, HasClient sublayout)
143 => HasClient (QueryFlag sym :> sublayout) where
146 => HasClient (QueryFlag sym :> sublayout) where
test/Servant/ServerSpec.hs+11
@@ -178,6 +178,17 @@ queryParamSpec = do
178 name = "ALICE"
178 name = "ALICE"
179 }
179 }
180
180
181+ let params3' = "?capitalize="
182+ response3' <- Network.Wai.Test.request defaultRequest{
183+ rawQueryString = params3',
184+ queryString = parseQuery params3',
185+ pathInfo = ["b"]
186+ }
187+ liftIO $
188+ decode' (simpleBody response3') `shouldBe` Just alice{
189+ name = "ALICE"
190+ }
191+
181type PostApi = ReqBody Person :> Post Integer
192type PostApi = ReqBody Person :> Post Integer
182postApi :: Proxy PostApi
193postApi :: Proxy PostApi
183postApi = Proxy
194postApi = Proxy