git.iko.soy/typeable/servant
on master help sign in
Merge pull request #4 from haskell-servant/jkarni/issue2

Fix top-level raw code-gen issue.

commit7f1792be62ae4d3f4ca710faa2faf0fb1714fb11 authorJulian Arni <jkarni@gmail.com> dateFri 2 Jan 2015, 10:58 (12 years ago) parentfb153d48dfb329
2 files changed+19−6
src/Servant/JQuery/Internal.hs+5−2 test/Servant/JQuerySpec.hs+14−4
src/Servant/JQuery/Internal.hs+5−2
@@ -6,7 +6,9 @@
66{-# LANGUAGE ScopedTypeVariables #-}
77module Servant.JQuery.Internal where
88
9+import Control.Applicative
910import Control.Lens
11+import Data.Char (toLower)
1012import Data.Monoid
1113import Data.Proxy
1214import GHC.TypeLits
@@ -28,7 +30,7 @@ captureArg (Cap s) = s
2830captureArg _ = error "captureArg called on non capture"
2931
3032jsSegments :: [Segment] -> String
31−jsSegments [] = ""
33+jsSegments [] = "/'"
3234jsSegments [x] = "/" ++ segmentToStr x False
3335jsSegments (x:xs) = "/" ++ segmentToStr x True ++ jsSegments xs
3436
@@ -196,7 +198,8 @@ instance HasJQ Raw where
196198 type JQ Raw = Method -> AjaxReq
197199
198200 jqueryFor Proxy req method =
199− req & reqMethod .~ method
201+ req & funcName %~ ((toLower <$> method) <>)
202+ & reqMethod .~ method
200203
201204instance HasJQ sublayout => HasJQ (ReqBody a :> sublayout) where
202205 type JQ (ReqBody a :> sublayout) = JQ sublayout
test/Servant/JQuerySpec.hs+14−4
@@ -1,5 +1,6 @@
1−{-# LANGUAGE TypeOperators #-}
1+{-# LANGUAGE DataKinds #-}
22{-# LANGUAGE QuasiQuotes #-}
3+{-# LANGUAGE TypeOperators #-}
34{-# OPTIONS_GHC -fno-warn-orphans #-}
45module Servant.JQuerySpec where
56
@@ -16,14 +17,23 @@ POST /simple String -> Bool
1617GET /has.extension Bool
1718|]
1819
20+type TopLevelRawAPI = "something" :> Get Int
21+ :<|> Raw
22+
1923spec :: Spec
2024spec = describe "Servant.JQuery"
2125 generateJSSpec
2226
2327generateJSSpec :: Spec
24−generateJSSpec = describe "generateJS" $
25− it "should always generate valid javascript" $ do
26− let (postSimple :<|> getHasExtension) = jquery (Proxy :: Proxy TestAPI)
28+generateJSSpec = describe "generateJS" $ do
29+ it "should generate valid javascript" $ do
30+ let (postSimple :<|> getHasExtension ) = jquery (Proxy :: Proxy TestAPI)
2731 parseFromString (generateJS postSimple) `shouldSatisfy` isRight
2832 parseFromString (generateJS getHasExtension) `shouldSatisfy` isRight
33+ print $ generateJS getHasExtension
34+
35+ it "should use non-empty function names" $ do
36+ let (_ :<|> topLevel) = jquery (Proxy :: Proxy TopLevelRawAPI)
37+ print $ generateJS $ topLevel "GET"
38+ parseFromString (generateJS $ topLevel "GET") `shouldSatisfy` isRight
2939