diff options
| -rw-r--r-- | sorbot.cabal | 1 | ||||
| -rw-r--r-- | src/Lib.hs | 12 | ||||
| -rw-r--r-- | src/Plugin.hs | 46 | 
3 files changed, 52 insertions, 7 deletions
| diff --git a/sorbot.cabal b/sorbot.cabal index 758fdc5..49c21fa 100644 --- a/sorbot.cabal +++ b/sorbot.cabal @@ -16,6 +16,7 @@ cabal-version:       >=1.10  library    hs-source-dirs:      src    exposed-modules:     Lib +                     , Plugin    build-depends:       base >= 4.7 && < 5                       , regex-tdfa    default-language:    Haskell2010 @@ -4,11 +4,9 @@ module Lib  import Text.Regex.TDFA -someFunc :: IO () -someFunc -    | rex == True = putStrLn "Match!!" -    | otherwise   = putStrLn "No match" - +import Plugin -rex :: Bool -rex = "75ac7b18a009ffe7a77a17a61d95c01395f36b44" =~ "^[0-9a-f]{40}$" +someFunc :: IO () +someFunc = do +    let Just plugin = realMatchPlugin "75ac7b18a009ffe7a77a17a61d95c01395f36b44" +    putStrLn $ performPlugin plugin diff --git a/src/Plugin.hs b/src/Plugin.hs new file mode 100644 index 0000000..95f2461 --- /dev/null +++ b/src/Plugin.hs @@ -0,0 +1,46 @@ +module Plugin +    ( realMatchPlugin +    , Plugin +    , performPlugin +    , plugins +    ) where + +import Text.Regex.TDFA + +data Plugin = Plugin +    { matchRegex :: String +    , perform    :: String -> String +    } + +instance Show Plugin where +    show (Plugin r p) = "matchRegex = " ++ r + +realMatchPlugin :: String -> Maybe Plugin +realMatchPlugin message = matchPlugin message plugins + +matchPlugin :: String -> [Plugin] -> Maybe Plugin +matchPlugin message plugins = firstPlugin $ matchPlugins message plugins + +matchPlugins :: String -> [Plugin] -> [Plugin] +matchPlugins message plugins = [p | p <- plugins, message =~ matchRegex p] + +firstPlugin :: [Plugin] -> Maybe Plugin +firstPlugin []     = Nothing +firstPlugin (p:ps) = Just p + +-- TODO: Make a type for the `perform` function +performPlugin :: Plugin -> String +performPlugin p = perform p $ matchRegex p + +gitHubCommit = Plugin +    { matchRegex = "^[0-9a-f]{40}$" +    , perform = gitHubCommitAction +    } + +gitHubCommitAction :: String -> String +gitHubCommitAction match = "https://github.com/" ++ match + +plugins :: [Plugin] +plugins = +    [ gitHubCommit +    ] | 
