Add regex predicate helper

This commit is contained in:
Jasper Van der Jeugt 2011-04-06 09:39:20 +02:00
parent 3d2b2506d0
commit 78dbe8a3d1
2 changed files with 25 additions and 2 deletions

View file

@ -35,6 +35,7 @@ module Hakyll.Core.Identifier.Pattern
( Pattern
, parseGlob
, predicate
, regex
, matches
, filterMatches
, capture
@ -46,10 +47,11 @@ module Hakyll.Core.Identifier.Pattern
import Data.List (isPrefixOf, inits, tails)
import Control.Arrow ((&&&), (>>>))
import Control.Monad (msum)
import Data.Maybe (isJust)
import Data.Maybe (isJust, fromMaybe)
import Data.Monoid (Monoid, mempty, mappend)
import GHC.Exts (IsString, fromString)
import Text.Regex.PCRE ((=~~))
import Hakyll.Core.Identifier
@ -96,6 +98,15 @@ parseGlob = Glob . parse'
predicate :: (Identifier -> Bool) -> Pattern
predicate = Predicate
-- | Create a 'Pattern' from a regex
--
-- Example:
--
-- > regex "^foo/[^x]*$
--
regex :: String -> Pattern
regex str = predicate $ fromMaybe False . (=~~ str) . toFilePath
-- | Check if an identifier matches a pattern
--
matches :: Pattern -> Identifier -> Bool

View file

@ -10,7 +10,13 @@ import Hakyll.Core.Identifier.Pattern
import TestSuite.Util
tests :: [Test]
tests = fromAssertions "capture"
tests = concat
[ captureTests
, regexTests
]
captureTests :: [Test]
captureTests = fromAssertions "capture"
[ Just ["bar"] @=? capture "foo/**" "foo/bar"
, Just ["foo/bar"] @=? capture "**" "foo/bar"
, Nothing @=? capture "*" "foo/bar"
@ -25,3 +31,9 @@ tests = fromAssertions "capture"
, Just ["foo/bar", "wut"] @=? capture "**/qux/*" "foo/bar/qux/wut"
, Just ["lol", "fun/large"] @=? capture "*cat/**.jpg" "lolcat/fun/large.jpg"
]
regexTests :: [Test]
regexTests = fromAssertions "regex"
[ True @=? matches (regex "^foo/[^x]*$") "foo/bar"
, False @=? matches (regex "^foo/[^x]*$") "foo/barx"
]