gravatar 0.1 → 0.2
raw patch · 3 files changed
+44/−9 lines, 3 filesdep +networkPVP ok
version bump matches the API change (PVP)
Dependencies added: network
API changes (from Hackage documentation)
+ Network.Gravatar: data Size
+ Network.Gravatar: gravatarWith :: String -> Maybe Rating -> Maybe Size -> Maybe String -> String
+ Network.Gravatar: size :: Int -> Maybe Size
Files
- Network/Gravatar.hs +38/−6
- gravatar.cabal +3/−3
- tests/tests.hs +3/−0
Network/Gravatar.hs view
@@ -10,29 +10,61 @@ -- -------------------------------------------------------------------- ----- Return the url of a gravatar+-- Return the URL of a gravatar image - an image associated with an+-- email address. -- module Network.Gravatar (- gravatar- , Rating(..)+ gravatar, gravatarWith+ ,Rating(..)+ ,Size,size ) where import Data.Digest.OpenSSL.MD5 import Data.List import Data.Char+import Network.URI import qualified Data.ByteString.Char8 as S +------------------------------------------------------------------------+-- Implementing the gravatar protocol+ -- | Classification ratings for gravatars data Rating = G | PG | R | X deriving (Eq,Ord,Bounded,Enum,Show,Read) +-- | An image size in pixels from 1 to 80.+newtype Size = Size Int++-- | A smart constructor for the Size type, ensuring it is between 1 and 80+size :: Int -> Maybe Size+size n | n >= 1 && n <= 80 = Just (Size n)+ | otherwise = Nothing++------------------------------------------------------------------------+ baseURL = "http://www.gravatar.com/avatar.php?" gravatar_id = "gravatar_id" --- | Return the url of a gravatar for an email address (a globally recognized avatar).+-- | Return the url of a gravatar for an+-- email address (a globally recognized avatar).+-- gravatar :: String -> String-gravatar who = concat [baseURL ,gravatar_id ,"=" ,(md5sum (S.pack (clean who)))]+gravatar who = gravatarWith who Nothing Nothing Nothing++-- | Construct the url of a gravatar with optional classification+-- ratings, an optional size, and optional default image.+--+gravatarWith :: String+ -> Maybe Rating+ -> Maybe Size+ -> Maybe String+ -> String+gravatarWith who rating' sz' dflt'+ = concat [baseURL ,gravatar_id ,"=" ,(md5sum (S.pack (clean who))),rating,sz,dflt ] where- clean = let f = reverse . dropWhile isSpace in f . f+ clean = let f = reverse . dropWhile isSpace in f . f+ rating = maybe "" (\r -> "&rating="++show r) rating'+ sz = maybe "" (\(Size n) -> "&size="++show n) sz'+ dflt = maybe "" (\r -> "&default="++escapeURIString isUnreserved r) dflt'
gravatar.cabal view
@@ -1,9 +1,9 @@ name: gravatar-version: 0.1+version: 0.2 homepage: http://code.haskell.org/~dons/code/gravatar synopsis: Find the url of the gravatar associated with an email address. description: - Gravatars <gravatar.com> are globally unique images associated with an email+ Gravatars (<http://gravatar.com>) are globally unique images associated with an email address, widely used in social networking sites. This library lets you find the URL of a gravatar .png associated with an email address.@@ -25,4 +25,4 @@ build-depends: base >= 3, bytestring else build-depends: base < 3- build-depends: nano-md5+ build-depends: nano-md5, network
tests/tests.hs view
@@ -2,3 +2,6 @@ main = do print $ gravatar "dons@galois.com" == "http://www.gravatar.com/avatar.php?gravatar_id=f21827076a1d0725c4f4bd5a640102e9"++ print $ (gravatarWith "dons@galois.com" (Just R) Nothing (Just "http://haskell.org") ) == "http://www.gravatar.com/avatar.php?gravatar_id=f21827076a1d0725c4f4bd5a640102e9&rating=R&default=http%3A%2F%2Fhaskell.org"+