mandrill 0.5.2.1 → 0.5.2.2
raw patch · 7 files changed
+72/−4 lines, 7 filesdep ~QuickCheckPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependency ranges changed: QuickCheck
API changes (from Hackage documentation)
+ Network.API.Mandrill.Senders: VerifyDomainResponse :: Text -> Text -> MandrillEmail -> VerifyDomainResponse
+ Network.API.Mandrill.Senders: VerifyDomainRq :: MandrillKey -> Text -> Text -> VerifyDomainRq
+ Network.API.Mandrill.Senders: [_vdres_domain] :: VerifyDomainResponse -> Text
+ Network.API.Mandrill.Senders: [_vdres_email] :: VerifyDomainResponse -> MandrillEmail
+ Network.API.Mandrill.Senders: [_vdres_status] :: VerifyDomainResponse -> Text
+ Network.API.Mandrill.Senders: [_vdrq_domain] :: VerifyDomainRq -> Text
+ Network.API.Mandrill.Senders: [_vdrq_key] :: VerifyDomainRq -> MandrillKey
+ Network.API.Mandrill.Senders: [_vdrq_mailbox] :: VerifyDomainRq -> Text
+ Network.API.Mandrill.Senders: data VerifyDomainResponse
+ Network.API.Mandrill.Senders: data VerifyDomainRq
+ Network.API.Mandrill.Senders: instance Data.Aeson.Types.Class.FromJSON Network.API.Mandrill.Senders.VerifyDomainResponse
+ Network.API.Mandrill.Senders: instance Data.Aeson.Types.Class.FromJSON Network.API.Mandrill.Senders.VerifyDomainRq
+ Network.API.Mandrill.Senders: instance Data.Aeson.Types.Class.ToJSON Network.API.Mandrill.Senders.VerifyDomainResponse
+ Network.API.Mandrill.Senders: instance Data.Aeson.Types.Class.ToJSON Network.API.Mandrill.Senders.VerifyDomainRq
+ Network.API.Mandrill.Senders: instance GHC.Show.Show Network.API.Mandrill.Senders.VerifyDomainResponse
+ Network.API.Mandrill.Senders: instance GHC.Show.Show Network.API.Mandrill.Senders.VerifyDomainRq
+ Network.API.Mandrill.Senders: vdres_domain :: Lens' VerifyDomainResponse Text
+ Network.API.Mandrill.Senders: vdres_email :: Lens' VerifyDomainResponse MandrillEmail
+ Network.API.Mandrill.Senders: vdres_status :: Lens' VerifyDomainResponse Text
+ Network.API.Mandrill.Senders: vdrq_domain :: Lens' VerifyDomainRq Text
+ Network.API.Mandrill.Senders: vdrq_key :: Lens' VerifyDomainRq MandrillKey
+ Network.API.Mandrill.Senders: vdrq_mailbox :: Lens' VerifyDomainRq Text
+ Network.API.Mandrill.Senders: verifyDomain :: MandrillKey -> EmailAddress -> Maybe Manager -> IO (MandrillResponse VerifyDomainResponse)
+ Network.API.Mandrill.Settings: VerifyDomain :: MandrillCalls
Files
- mandrill.cabal +3/−2
- src/Network/API/Mandrill/Senders.hs +45/−0
- src/Network/API/Mandrill/Settings.hs +3/−0
- src/Network/API/Mandrill/Types.hs +3/−2
- test/Main.hs +1/−0
- test/RawData.hs +8/−0
- test/Tests.hs +9/−0
mandrill.cabal view
@@ -1,5 +1,5 @@ name: mandrill-version: 0.5.2.1+version: 0.5.2.2 synopsis: Library for interfacing with the Mandrill JSON API description: Pure Haskell client for the Mandrill JSON API license: MIT@@ -26,6 +26,7 @@ Network.API.Mandrill.Messages Network.API.Mandrill.Messages.Types Network.API.Mandrill.Inbound+ Network.API.Mandrill.Senders other-modules: Network.API.Mandrill.Utils Network.API.Mandrill.HTTP@@ -42,7 +43,7 @@ , aeson >= 0.7.0.3 && < 0.12.0.0 , lens >= 4.0 , blaze-html >= 0.5.0.0- , QuickCheck >= 2.6 && < 2.9+ , QuickCheck >= 2.6 && < 3.0 , mtl < 3.0 , time , email-validate >= 1.0.0
+ src/Network/API/Mandrill/Senders.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE TemplateHaskell #-}+module Network.API.Mandrill.Senders where+import Control.Lens+import Data.Aeson (FromJSON, ToJSON, parseJSON,+ toJSON)+import Data.Aeson.TH (defaultOptions, deriveJSON)+import Data.Aeson.Types (Value (..), fieldLabelModifier)+import Data.Text (Text)+import Data.Text.Encoding (decodeUtf8, encodeUtf8)+import Network.API.Mandrill.HTTP (toMandrillResponse)+import Network.API.Mandrill.Settings+import Network.API.Mandrill.Types+import Network.HTTP.Client (Manager)+import qualified Text.Email.Validate as TEV++data VerifyDomainRq =+ VerifyDomainRq+ { _vdrq_key :: MandrillKey+ , _vdrq_domain :: Text+ , _vdrq_mailbox :: Text+ } deriving Show++makeLenses ''VerifyDomainRq+deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''VerifyDomainRq++data VerifyDomainResponse =+ VerifyDomainResponse+ { _vdres_status :: Text+ , _vdres_domain :: Text+ , _vdres_email :: MandrillEmail+ } deriving Show++makeLenses ''VerifyDomainResponse+deriveJSON defaultOptions { fieldLabelModifier = drop 7 } ''VerifyDomainResponse+++verifyDomain :: MandrillKey+ -- ^ The API key+ -> TEV.EmailAddress+ -- ^ Email address to use for verification+ -> Maybe Manager+ -> IO (MandrillResponse VerifyDomainResponse)+verifyDomain k email =+ toMandrillResponse VerifyDomain+ (VerifyDomainRq k (decodeUtf8 $ TEV.domainPart email) (decodeUtf8 $ TEV.localPart email))
src/Network/API/Mandrill/Settings.hs view
@@ -19,6 +19,8 @@ -- Inbound API | RoutesAdd | DomainsAdd+ -- Senders API+ | VerifyDomain deriving Show @@ -35,3 +37,4 @@ toUrl MessagesSearch = "messages/search.json" toUrl DomainsAdd = "inbound/add-domain.json" toUrl RoutesAdd = "inbound/add-route.json"+ toUrl VerifyDomain = "senders/verify-domain.json"
src/Network/API/Mandrill/Types.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-}@@ -9,6 +9,7 @@ module Network.API.Mandrill.Types where import Control.Applicative+import Control.Monad (mzero) import Data.Char import Data.Maybe import Data.Time@@ -37,7 +38,7 @@ import qualified Data.Text.Lazy as TL import qualified Text.Blaze.Html as Blaze import qualified Text.Blaze.Html.Renderer.Text as Blaze-+import qualified Text.Email.Validate as TEV timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t #if MIN_VERSION_time(1,5,0)
test/Main.hs view
@@ -44,5 +44,6 @@ , testCase "messages/send.json API response parsing" testMessagesResponseRejected , testCase "inbound/add-route.json API response parsing" testRouteAdd , testCase "inbound/add-domain.json API response parsing" testDomainAdd+ , testCase "senders/verify-domain.json API response parsing" testVerifyDomain ] ]
test/RawData.hs view
@@ -228,3 +228,11 @@ "url": "http://example.com/webhook-url" } |]++domainVerify = [r|+{+ "status": "example status",+ "domain": "example domain",+ "email": "email@domain.com"+}+|]
test/Tests.hs view
@@ -6,6 +6,7 @@ import Data.Either import Network.API.Mandrill.Inbound import Network.API.Mandrill.Messages.Types+import Network.API.Mandrill.Senders import Network.API.Mandrill.Types import Network.API.Mandrill.Users.Types import RawData@@ -67,3 +68,11 @@ where parsePayload :: Either String RouteAddResponse parsePayload = eitherDecodeStrict . C8.pack $ routeAdd++testVerifyDomain :: Assertion+testVerifyDomain =+ assertBool ("senders/verify-domain.json" ++ show parsePayload)+ (isRight parsePayload)+ where+ parsePayload :: Either String VerifyDomainResponse+ parsePayload = eitherDecodeStrict . C8.pack $ domainVerify