yesod-paginator 1.1.2.1 → 1.1.2.2
raw patch · 4 files changed
+57/−9 lines, 4 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Yesod.Paginator.Widgets: setPageParameters :: Show a => PageParamName -> a -> [(Text, Text)] -> [(Text, Text)]
Files
- src/Yesod/Paginator/Widgets.hs +10/−5
- test/SpecHelper.hs +1/−0
- test/Yesod/Paginator/WidgetsSpec.hs +45/−3
- yesod-paginator.cabal +1/−1
src/Yesod/Paginator/Widgets.hs view
@@ -7,6 +7,9 @@ , simpleWith , ellipsed , ellipsedWith++ -- * Exported for testing+ , setPageParameters ) where import Yesod.Paginator.Prelude@@ -177,13 +180,15 @@ :: PageParamName -> WidgetFor site (PageNumber -> [(Text, Text)]) getUpdateGetParams pageParamName = do params <- handlerToWidget $ reqGetParams <$> getRequest- pure- $ \number ->- nubOn fst- $ [(unPageParamName pageParamName, tshow number)]- <> params+ pure $ \number -> setPageParameters pageParamName number params renderGetParams :: [(Text, Text)] -> Text renderGetParams [] = "" renderGetParams ps = "?" <> T.intercalate "&" (map renderGetParam ps) where renderGetParam (k, v) = encodeText k <> "=" <> encodeText v++setPageParameters+ :: Show a => PageParamName -> a -> [(Text, Text)] -> [(Text, Text)]+setPageParameters pageParamName number params =+ let name = unPageParamName pageParamName+ in [(name, tshow number)] <> filter ((/=) name . fst) params
test/SpecHelper.hs view
@@ -14,6 +14,7 @@ import Yesod.Core import Yesod.Paginator as X import Yesod.Paginator.Prelude as X+import Yesod.Paginator.Widgets as X import Yesod.Test as X data App = App
test/Yesod/Paginator/WidgetsSpec.hs view
@@ -1,13 +1,16 @@ {-# LANGUAGE OverloadedStrings #-}+ module Yesod.Paginator.WidgetsSpec ( spec- )-where+ ) where +import Data.Functor ((<&>)) import SpecHelper+import Test.QuickCheck spec :: Spec-spec = withApp $ do+spec = do+ withApp $ do describe "simple" $ it "works" $ do get $ SimpleR 10 3 3 @@ -189,3 +192,42 @@ , "<li class=\"next disabled\"><a>»</a></li>" , "</ul>" ]++ it "inserts" $ do+ let paramName = PageParamName "p"+ pageNumber = 1 :: Int+ setPageParameters paramName pageNumber [] `shouldBe` [("p", "1")]++ it "updates" $ do+ let paramName = PageParamName "p"+ pageNumber = 1 :: Int+ setPageParameters paramName pageNumber [("p", "foo")]+ `shouldBe` [("p", "1")]++ it "doesn't remove not-ours elements" $ property $ \(Params paramName pageNumber params) -> do+ let outputKeys =+ fst <$> setPageParameters paramName pageNumber params+ inputKeys = fst <$> params+ in all (`elem` outputKeys) inputKeys++ it "doesn't add not-ours elements" $ property $ \(Params paramName pageNumber params) -> do+ let outputKeys = fst <$> setPageParameters paramName pageNumber params+ inputKeys = fst <$> params+ in all (`elem` (unPageParamName paramName : inputKeys)) outputKeys++data Params = Params+ { paramsPageParamName :: PageParamName+ , paramsPageNumber :: Int+ , paramsParams :: [(Text, Text)]+ }+ deriving Show++instance Arbitrary Params where+ arbitrary = do+ params <- listOf $ liftArbitrary2 genText genText+ pageNumber <- getPositive <$> arbitrary+ pageParamName <- PageParamName <$> genText+ pure $ Params pageParamName pageNumber params+ where+ genText :: Gen Text+ genText = listOf (choose ('a', 'z')) <&> pack
yesod-paginator.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.12 name: yesod-paginator-version: 1.1.2.1+version: 1.1.2.2 license: MIT license-file: LICENSE maintainer: Patrick Brisbin <pbrisbin@gmail.com>