packages feed

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