packages feed

gravatar 0.7.1 → 0.8.0

raw patch · 2 files changed

+63/−51 lines, 2 filesdep ~textPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: text

API changes (from Hackage documentation)

Files

gravatar.cabal view
@@ -1,5 +1,5 @@ name:                   gravatar-version:                0.7.1+version:                0.8.0 author:                 Pat Brisbin <pbrisbin@gmail.com> maintainer:             Pat Brisbin <pbrisbin@gmail.com> license:                MIT@@ -30,6 +30,7 @@   build-depends:        base                       , hspec                       , gravatar+                      , text  source-repository head   type:                 git
src/Network/Gravatar.hs view
@@ -8,16 +8,16 @@     , ForceDefault(..)     , Rating(..)     , Scheme (..)-    , Default(..)+    , Default(def)     , defaultConfig     ) where +import Data.Default (Default(..)) import Data.Digest.Pure.MD5 (md5)-import Data.Default         (Default(..))-import Data.List            (intercalate)-import Data.Maybe           (catMaybes)-import Data.Text            (Text)-import Network.HTTP.Base    (urlEncode)+import Data.List (intercalate)+import Data.Maybe (catMaybes)+import Data.Text (Text)+import Network.HTTP.Base (urlEncode)  import qualified Data.ByteString.Lazy.Char8 as C8 import qualified Data.Text as T@@ -35,44 +35,50 @@ newtype ForceDefault = ForceDefault Bool  instance GravatarParam ForceDefault where-    toParam (ForceDefault b) = if b then Just ("f", "y") else Nothing+    toParam (ForceDefault True) = Just ("f", "y")+    toParam (ForceDefault False) = Nothing  -- | Image to show when an avatar is not available-data DefaultImg = Custom String -- ^ supply your own url-                | NotFound      -- ^ do not load an image return a 404-                | MM            -- ^ mystery man-                | Identicon     -- ^ geometric pattern based on the hash-                | MonsterId     -- ^ a generated monster-                | Wavatar       -- ^ generated faces-                | Retro         -- ^ generated, 8-bit arcade style pixelated face+data DefaultImg+    = Custom String -- ^ supply your own url+    | NotFound      -- ^ do not load an image return a 404+    | MM            -- ^ mystery man+    | Identicon     -- ^ geometric pattern based on the hash+    | MonsterId     -- ^ a generated monster+    | Wavatar       -- ^ generated faces+    | Retro         -- ^ generated, 8-bit arcade style pixelated face  instance GravatarParam DefaultImg where     toParam (Custom s) = Just ("d", urlEncode s)-    toParam NotFound   = Just ("d", "404"      )-    toParam MM         = Just ("d", "mm"       )-    toParam Identicon  = Just ("d", "identicon")-    toParam MonsterId  = Just ("d", "monsterid")-    toParam Wavatar    = Just ("d", "wavatar"  )-    toParam Retro      = Just ("d", "retro"    )+    toParam NotFound = Just ("d", "404")+    toParam MM = Just ("d", "mm")+    toParam Identicon = Just ("d", "identicon")+    toParam MonsterId = Just ("d", "monsterid")+    toParam Wavatar = Just ("d", "wavatar")+    toParam Retro = Just ("d", "retro")  -- | Limit the returned images by rating data Rating = G | PG | R | X  instance GravatarParam Rating where-    toParam G  = Just ("r", "g" )+    toParam G = Just ("r", "g")     toParam PG = Just ("r", "pg")-    toParam R  = Just ("r", "r" )-    toParam X  = Just ("r", "x" )+    toParam R = Just ("r", "r")+    toParam X = Just ("r", "x")  data GravatarOptions = GravatarOptions-    { gSize         :: Maybe Size-    , gDefault      :: Maybe DefaultImg-    , gForceDefault :: ForceDefault-    , gRating       :: Maybe Rating-    , gScheme       :: Scheme+    { gSize :: Maybe Size           -- ^ default @Nothing@+    , gDefault :: Maybe DefaultImg  -- ^ default @Nothing@+    , gForceDefault :: ForceDefault -- ^ default @False@+    , gRating :: Maybe Rating       -- ^ default @Nothing@+    , gScheme :: Scheme             -- ^ default @Https@     } -data Scheme = Http | Https | None+-- | Scheme to use for image URLs+data Scheme+    = Http  -- ^ @http://@+    | Https -- ^ @https://@+    | None  -- ^ @//@  instance Show Scheme where   show Http = "http://"@@ -85,34 +91,39 @@ -- | Available for backwards compatability, using @def@ is advised defaultConfig :: GravatarOptions defaultConfig = GravatarOptions-    { gSize         = Nothing-    , gDefault      = Nothing+    { gSize = Nothing+    , gDefault = Nothing     , gForceDefault = ForceDefault False-    , gRating       = Nothing-    , gScheme       = Https+    , gRating = Nothing+    , gScheme = Https     }  -- | Return the avatar for the given email using the provided options gravatar :: GravatarOptions -> Text -> String-gravatar opts e = (show . gScheme $ opts) ++ "www.gravatar.com/avatar/"-                                          ++ hashEmail e `addParams` opts+gravatar opts e = concat+    [ show $ gScheme opts+    , "www.gravatar.com/avatar/"+    , hashEmail e+    , queryString opts+    ]  -- | <http://en.gravatar.com/site/implement/hash/> hashEmail :: Text -> String-hashEmail = md5sum . T.toLower . T.strip+hashEmail = show . md5 . C8.pack . T.unpack . T.toLower . T.strip -    where-        md5sum :: Text -> String-        md5sum = show . md5 . C8.pack . T.unpack+queryString :: GravatarOptions -> String+queryString opts = case queryParts of+    [] -> ""+    ps -> "?" ++ intercalate "&" (map queryPart ps) -addParams :: String -> GravatarOptions -> String-addParams url opts = helper url . map (\(k,v) -> k ++ "=" ++ v)-                   $ catMaybes [ toParam =<< gSize         opts-                               , toParam =<< gDefault      opts-                               , toParam   $ gForceDefault opts-                               , toParam =<< gRating       opts-                               ]-    where-        helper :: String -> [String] -> String-        helper u [] = u-        helper u l  = (++) u . (:) '?' $ intercalate "&" l+  where+    queryParts :: [(String, String)]+    queryParts = catMaybes+        [ toParam =<< gSize opts+        , toParam =<< gDefault opts+        , toParam   $ gForceDefault opts+        , toParam =<< gRating opts+        ]++    queryPart :: (String, String) -> String+    queryPart (k, v) = k ++ "=" ++ v