diff options
author | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2011-03-01 09:40:07 +0100 |
---|---|---|
committer | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2011-03-01 09:40:07 +0100 |
commit | fa057f30117e02f13f4a788eb3f52660ab8ab440 (patch) | |
tree | ec958d9a6cee07a52d6bbacdfefbd08533a5625a | |
parent | d460fd88d13984aa0e851527f7ff65065230c411 (diff) | |
download | hakyll-fa057f30117e02f13f4a788eb3f52660ab8ab440.tar.gz |
Add `composeRoutes`
-rw-r--r-- | src/Hakyll/Core/Routes.hs | 22 | ||||
-rw-r--r-- | tests/Hakyll/Core/Routes/Tests.hs | 3 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/Hakyll/Core/Routes.hs b/src/Hakyll/Core/Routes.hs index eba35ff..fcab28d 100644 --- a/src/Hakyll/Core/Routes.hs +++ b/src/Hakyll/Core/Routes.hs @@ -33,6 +33,7 @@ module Hakyll.Core.Routes , ifMatch , customRoute , gsubRoute + , composeRoutes ) where import Data.Monoid (Monoid, mempty, mappend) @@ -112,3 +113,24 @@ gsubRoute :: String -- ^ Pattern -> Routes -- ^ Resulting route gsubRoute pattern replacement = customRoute $ replaceAll pattern replacement . toFilePath + +-- | Compose routes so that @f `composeRoutes` g@ is more or less equivalent +-- with @f >>> g@. +-- +-- Example: +-- +-- > let routes = gsubRoute "rss/" (const "") `composeRoutes` setExtension "xml" +-- > in runRoutes routes "tags/rss/bar" +-- +-- Result: +-- +-- > Just "tags/bar.xml" +-- +-- If the first route given fails, Hakyll will not apply the second route. +-- +composeRoutes :: Routes -- ^ First route to apply + -> Routes -- ^ Second route to apply + -> Routes -- ^ Resulting route +composeRoutes (Routes f) (Routes g) = Routes $ \i -> do + p <- f i + g $ parseIdentifier p diff --git a/tests/Hakyll/Core/Routes/Tests.hs b/tests/Hakyll/Core/Routes/Tests.hs index 201c656..3361846 100644 --- a/tests/Hakyll/Core/Routes/Tests.hs +++ b/tests/Hakyll/Core/Routes/Tests.hs @@ -18,4 +18,7 @@ tests = fromAssertions "runRoutes" , Just "tags/bar.xml" @=? runRoutes (gsubRoute "rss/" (const "")) "tags/rss/bar.xml" + , Just "tags/bar.xml" @=? + runRoutes (gsubRoute "rss/" (const "") `composeRoutes` + setExtension "xml") "tags/rss/bar" ] |