Add composeRoutes
This commit is contained in:
parent
d460fd88d1
commit
fa057f3011
2 changed files with 25 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
]
|
||||
|
|
Loading…
Reference in a new issue