packages feed

path-pieces 0.0.0 → 0.1.0

raw patch · 3 files changed

+153/−39 lines, 3 filesdep +HUnitdep +QuickCheckdep +file-locationdep ~textPVP ok

version bump matches the API change (PVP)

Dependencies added: HUnit, QuickCheck, file-location, hspec, path-pieces

Dependency ranges changed: text

API changes (from Hackage documentation)

- Web.PathPieces: class MultiPiece s
- Web.PathPieces: class SinglePiece s
- Web.PathPieces: instance MultiPiece [String]
- Web.PathPieces: instance MultiPiece [Text]
- Web.PathPieces: instance SinglePiece Int
- Web.PathPieces: instance SinglePiece Int64
- Web.PathPieces: instance SinglePiece Integer
- Web.PathPieces: instance SinglePiece String
- Web.PathPieces: instance SinglePiece Text
+ Web.PathPieces: class PathMultiPiece s
+ Web.PathPieces: class PathPiece s
+ Web.PathPieces: fromPathMultiPiece :: PathMultiPiece s => [Text] -> Maybe s
+ Web.PathPieces: fromPathPiece :: PathPiece s => Text -> Maybe s
+ Web.PathPieces: instance PathMultiPiece [String]
+ Web.PathPieces: instance PathMultiPiece [Text]
+ Web.PathPieces: instance PathPiece Int
+ Web.PathPieces: instance PathPiece Int64
+ Web.PathPieces: instance PathPiece Integer
+ Web.PathPieces: instance PathPiece String
+ Web.PathPieces: instance PathPiece Text
+ Web.PathPieces: toPathMultiPiece :: PathMultiPiece s => s -> [Text]
+ Web.PathPieces: toPathPiece :: PathPiece s => s -> Text
- Web.PathPieces: fromMultiPiece :: MultiPiece s => [Text] -> Maybe s
+ Web.PathPieces: fromMultiPiece :: PathMultiPiece ps => [Text] -> Maybe ps
- Web.PathPieces: fromSinglePiece :: SinglePiece s => Text -> Maybe s
+ Web.PathPieces: fromSinglePiece :: PathPiece p => Text -> Maybe p
- Web.PathPieces: toMultiPiece :: MultiPiece s => s -> [Text]
+ Web.PathPieces: toMultiPiece :: PathMultiPiece ps => ps -> [Text]
- Web.PathPieces: toSinglePiece :: SinglePiece s => s -> Text
+ Web.PathPieces: toSinglePiece :: PathPiece p => p -> Text

Files

Web/PathPieces.hs view
@@ -1,8 +1,12 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances, TypeSynonymInstances  #-} module Web.PathPieces-    ( SinglePiece (..)-    , MultiPiece (..)+    ( PathPiece (..)+    , PathMultiPiece (..)+    -- * Deprecated+    , toSinglePiece+    , toMultiPiece+    , fromSinglePiece+    , fromMultiPiece     ) where  import Data.Int (Int64)@@ -10,46 +14,72 @@ import qualified Data.Text.Lazy as L import qualified Data.Text.Read -class SinglePiece s where-    fromSinglePiece :: S.Text -> Maybe s-    toSinglePiece :: s -> S.Text-instance SinglePiece String where-    fromSinglePiece s = if S.null s then Nothing else Just (S.unpack s)-    toSinglePiece = S.pack-instance SinglePiece S.Text where-    fromSinglePiece s = if S.null s then Nothing else Just s-    toSinglePiece = id-instance SinglePiece L.Text where-    fromSinglePiece s = if S.null s then Nothing else Just (L.fromChunks [s])-    toSinglePiece = S.concat . L.toChunks-instance SinglePiece Integer where-    fromSinglePiece s =+class PathPiece s where+    fromPathPiece :: S.Text -> Maybe s+    toPathPiece :: s -> S.Text++instance PathPiece String where+    fromPathPiece s = if S.null s then Nothing else Just (S.unpack s)+    toPathPiece = S.pack++instance PathPiece S.Text where+    fromPathPiece s = if S.null s then Nothing else Just s+    toPathPiece = id++instance PathPiece L.Text where+    fromPathPiece s = if S.null s then Nothing else Just (L.fromChunks [s])+    toPathPiece = S.concat . L.toChunks++instance PathPiece Integer where+    fromPathPiece s =         case Data.Text.Read.decimal s of             Right (i, _) -> Just i             Left _ -> Nothing-    toSinglePiece = S.pack . show-instance SinglePiece Int where-    fromSinglePiece s =+    toPathPiece = S.pack . show++instance PathPiece Int where+    fromPathPiece s =         case Data.Text.Read.decimal s of             Right (i, _) -> Just i             Left _ -> Nothing-    toSinglePiece = S.pack . show-instance SinglePiece Int64 where-    fromSinglePiece s =+    toPathPiece = S.pack . show++instance PathPiece Int64 where+    fromPathPiece s =         case Data.Text.Read.decimal s of             Right (i, _) -> Just i             Left _ -> Nothing-    toSinglePiece = S.pack . show+    toPathPiece = S.pack . show -class MultiPiece s where-    fromMultiPiece :: [S.Text] -> Maybe s-    toMultiPiece :: s -> [S.Text]-instance MultiPiece [String] where-    fromMultiPiece = Just . map S.unpack-    toMultiPiece = map S.pack-instance MultiPiece [S.Text] where-    fromMultiPiece = Just-    toMultiPiece = id-instance MultiPiece [L.Text] where-    fromMultiPiece = Just . map (L.fromChunks . return)-    toMultiPiece = map $ S.concat . L.toChunks++class PathMultiPiece s where+    fromPathMultiPiece :: [S.Text] -> Maybe s+    toPathMultiPiece :: s -> [S.Text]++instance PathMultiPiece [String] where+    fromPathMultiPiece = Just . map S.unpack+    toPathMultiPiece = map S.pack++instance PathMultiPiece [S.Text] where+    fromPathMultiPiece = Just+    toPathMultiPiece = id++instance PathMultiPiece [L.Text] where+    fromPathMultiPiece = Just . map (L.fromChunks . return)+    toPathMultiPiece = map $ S.concat . L.toChunks++{-# DEPRECATED toSinglePiece "Use toPathPiece instead of toSinglePiece" #-}+toSinglePiece :: PathPiece p => p -> S.Text+toSinglePiece = toPathPiece++{-# DEPRECATED fromSinglePiece "Use fromPathPiece instead of fromSinglePiece" #-}+fromSinglePiece :: PathPiece p => S.Text -> Maybe p+fromSinglePiece = fromPathPiece++{-# DEPRECATED toMultiPiece "Use toPathMultiPiece instead of toMultiPiece" #-}+toMultiPiece :: PathMultiPiece ps => ps -> [S.Text]+toMultiPiece = toPathMultiPiece++{-# DEPRECATED fromMultiPiece "Use fromPathMultiPiece instead of fromMultiPiece" #-}+fromMultiPiece :: PathMultiPiece ps => [S.Text] -> Maybe ps+fromMultiPiece = fromPathMultiPiece
path-pieces.cabal view
@@ -1,5 +1,5 @@ name:            path-pieces-version:         0.0.0+version:         0.1.0 license:         BSD3 license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>@@ -7,15 +7,29 @@ synopsis:        Components of paths. category:        Web, Yesod stability:       unstable-cabal-version:   >= 1.6+cabal-version:   >= 1.8 build-type:      Simple homepage:        http://github.com/snoyberg/path-pieces+extra-source-files: test/main.hs  library     build-depends:   base             >= 4       && < 5                    , text             >= 0.5     && < 0.12     exposed-modules: Web.PathPieces     ghc-options:     -Wall++test-suite test+    type:          exitcode-stdio-1.0+    main-is:       main.hs+    hs-source-dirs: test+    ghc-options:   -Wall+    build-depends:   HUnit+                   , hspec >= 0.8 && < 0.9+                   , file-location >= 0.4 && < 0.5+                   , base >= 4 && < 5+                   , QuickCheck == 2.4.*+                   , path-pieces+                   , text  source-repository head   type:     git
+ test/main.hs view
@@ -0,0 +1,70 @@+{-# Language ScopedTypeVariables #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}+module Main where++import Test.Hspec.Monadic (Specs, describe, hspecX)+import Test.Hspec.HUnit()+import Test.Hspec.QuickCheck(prop)+import Test.QuickCheck++import Web.PathPieces+import qualified Data.Text as T+import Data.Maybe (fromJust)++-- import FileLocation (debug)++instance Arbitrary T.Text where+  arbitrary = fmap T.pack arbitrary+++main :: IO ()+main = hspecX specs++specs :: Specs+specs = do+  describe "RoutePiece" $ do+    prop "toRoutePiece <=> fromSinglePiece String" $ \(p::String) ->+      case (fromRoutePiece . toSinglePiece) p of+        Nothing -> null p+        Just pConverted -> p == pConverted++    prop "toRoutePiece <=> fromSinglePiece String" $ \(p::T.Text) ->+      case (fromRoutePiece . toSinglePiece) p of+        Nothing -> T.null p+        Just pConverted -> p == pConverted++    prop "toRoutePiece <=> fromSinglePiece String" $ \(p::Int) ->+      case (fromRoutePiece . toSinglePiece) p of+        Nothing -> p < 0+        Just pConverted -> p == pConverted++  describe "RouteMultiPiece" $ do+    prop "toRouteMultiPiece <=> fromMultiPiece String" $ \(p::[String]) ->+      p == (fromJust . fromRouteMultiPiece . toMultiPiece) p++    prop "toRouteMultiPiece <=> fromMultiPiece String" $ \(p::[T.Text]) ->+      p == (fromJust . fromRouteMultiPiece . toMultiPiece) p+++  describe "SinglePiece" $ do+    prop "toSinglePiece <=> fromSinglePiece String" $ \(p::String) ->+      case (fromSinglePiece . toSinglePiece) p of+        Nothing -> null p+        Just pConverted -> p == pConverted++    prop "toSinglePiece <=> fromSinglePiece String" $ \(p::T.Text) ->+      case (fromSinglePiece . toSinglePiece) p of+        Nothing -> T.null p+        Just pConverted -> p == pConverted++    prop "toSinglePiece <=> fromSinglePiece String" $ \(p::Int) ->+      case (fromSinglePiece . toSinglePiece) p of+        Nothing -> p < 0+        Just pConverted -> p == pConverted++  describe "MultiPiece" $ do+    prop "toMultiPiece <=> fromMultiPiece String" $ \(p::[String]) ->+      p == (fromJust . fromMultiPiece . toMultiPiece) p++    prop "toMultiPiece <=> fromMultiPiece String" $ \(p::[T.Text]) ->+      p == (fromJust . fromMultiPiece . toMultiPiece) p