Add regex to the query language
This commit is contained in:
		@@ -59,6 +59,7 @@ library
 | 
				
			|||||||
                     , text
 | 
					                     , text
 | 
				
			||||||
                     , lens
 | 
					                     , lens
 | 
				
			||||||
                     , hashable
 | 
					                     , hashable
 | 
				
			||||||
 | 
					                     , regex-tdfa
 | 
				
			||||||
  hs-source-dirs:      src
 | 
					  hs-source-dirs:      src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
executable buuka
 | 
					executable buuka
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{ mkDerivation, aeson, base, bytestring, containers
 | 
					{ mkDerivation, aeson, base, bytestring, containers
 | 
				
			||||||
, deriving-compat, exceptions, filepath, hashable, hashids
 | 
					, deriving-compat, exceptions, filepath, hashable, hashids
 | 
				
			||||||
, hedgehog, hedgehog-corpus, lens, mtl, optparse-applicative
 | 
					, hedgehog, hedgehog-corpus, lens, mtl, optparse-applicative
 | 
				
			||||||
, stdenv, tasty, tasty-hedgehog, tasty-hunit, text, transformers
 | 
					, regex-tdfa, stdenv, tasty, tasty-hedgehog, tasty-hunit, text
 | 
				
			||||||
, unliftio, vector, yaml
 | 
					, transformers, unliftio, vector, yaml
 | 
				
			||||||
}:
 | 
					}:
 | 
				
			||||||
mkDerivation {
 | 
					mkDerivation {
 | 
				
			||||||
  pname = "buuka";
 | 
					  pname = "buuka";
 | 
				
			||||||
@@ -12,7 +12,7 @@ mkDerivation {
 | 
				
			|||||||
  isExecutable = true;
 | 
					  isExecutable = true;
 | 
				
			||||||
  libraryHaskellDepends = [
 | 
					  libraryHaskellDepends = [
 | 
				
			||||||
    aeson base bytestring containers exceptions filepath hashable
 | 
					    aeson base bytestring containers exceptions filepath hashable
 | 
				
			||||||
    hashids lens mtl text transformers unliftio vector yaml
 | 
					    hashids lens mtl regex-tdfa text transformers unliftio vector yaml
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  executableHaskellDepends = [ base optparse-applicative unliftio ];
 | 
					  executableHaskellDepends = [ base optparse-applicative unliftio ];
 | 
				
			||||||
  testHaskellDepends = [
 | 
					  testHaskellDepends = [
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,6 +21,9 @@ import Data.Buuka
 | 
				
			|||||||
import Data.List
 | 
					import Data.List
 | 
				
			||||||
       (isPrefixOf, isSuffixOf)
 | 
					       (isPrefixOf, isSuffixOf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import Text.Regex.TDFA
 | 
				
			||||||
 | 
					       ((=~))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Data.Functor.Foldable
 | 
					import Data.Functor.Foldable
 | 
				
			||||||
       (Fix(..))
 | 
					       (Fix(..))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,6 +34,7 @@ data Field a where
 | 
				
			|||||||
data QueryF f where
 | 
					data QueryF f where
 | 
				
			||||||
  StartsWith :: Field String -> String -> QueryF f
 | 
					  StartsWith :: Field String -> String -> QueryF f
 | 
				
			||||||
  EndsWith :: Field String -> String -> QueryF f
 | 
					  EndsWith :: Field String -> String -> QueryF f
 | 
				
			||||||
 | 
					  Regex :: Field String -> String -> QueryF f
 | 
				
			||||||
  And :: f -> f -> QueryF f
 | 
					  And :: f -> f -> QueryF f
 | 
				
			||||||
 | 
					
 | 
				
			||||||
deriving instance Functor QueryF
 | 
					deriving instance Functor QueryF
 | 
				
			||||||
@@ -52,4 +56,6 @@ evaluate = \case
 | 
				
			|||||||
  EndsWith Url x -> \BuukaEntry{url=URL u} -> x `isSuffixOf` u
 | 
					  EndsWith Url x -> \BuukaEntry{url=URL u} -> x `isSuffixOf` u
 | 
				
			||||||
  StartsWith Title x -> \BuukaEntry{title=t} -> maybe False (x `isPrefixOf`) t
 | 
					  StartsWith Title x -> \BuukaEntry{title=t} -> maybe False (x `isPrefixOf`) t
 | 
				
			||||||
  EndsWith Title x -> \BuukaEntry{title=t} -> maybe False (x `isSuffixOf`) t
 | 
					  EndsWith Title x -> \BuukaEntry{title=t} -> maybe False (x `isSuffixOf`) t
 | 
				
			||||||
 | 
					  Regex Url x -> \BuukaEntry{url=URL u} -> u =~ x
 | 
				
			||||||
 | 
					  Regex Title x -> \BuukaEntry{title=t} -> maybe False (=~ x) t
 | 
				
			||||||
  And a b -> \e -> a e && b e
 | 
					  And a b -> \e -> a e && b e
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user