flowdock 0.2.0.0 → 0.3.0.0
raw patch · 3 files changed
+55/−48 lines, 3 filesdep +lens-actiondep +networkdep ~http-clientPVP ok
version bump matches the API change (PVP)
Dependencies added: lens-action, network
Dependency ranges changed: http-client
API changes (from Hackage documentation)
- Chat.Flowdock: _qfFlow :: Flow -> Text
- Chat.Flowdock: _qfOrganization :: Flow -> Text
+ Chat.Flowdock: flowFlow :: Flow -> Text
+ Chat.Flowdock: flowOrganization :: Flow -> Text
Files
- flowdock.cabal +5/−3
- src/Chat/Flowdock.hs +41/−39
- src/Chat/Flowdock/Internal.hs +9/−6
flowdock.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: flowdock-version: 0.2.0.0+version: 0.3.0.0 synopsis: Flowdock client library for Haskell -- description: homepage: https://github.com/brewtown/hs-flowdock@@ -23,7 +23,8 @@ build-depends: base >=4.6 && <5, aeson >= 0.8 && < 0.9, lens >= 4 && < 5,- http-client >= 0.3 && < 0.4,+ lens-action,+ http-client >= 0.3.8 && < 0.5, http-client-tls >= 0.2 && < 0.3, mtl >= 2 && < 3, text >= 1 && < 2,@@ -35,6 +36,7 @@ pipes, pipes-http, pipes-parse,- pipes-aeson+ pipes-aeson,+ network hs-source-dirs: src default-language: Haskell2010
src/Chat/Flowdock.hs view
@@ -135,6 +135,7 @@ import Data.Text.Encoding (decodeUtf8, encodeUtf8) import Data.Typeable import Data.UUID+import qualified Network.Socket as S import Pipes import qualified Pipes.Aeson as A import Pipes.HTTP@@ -159,8 +160,8 @@ data Flow = QualifiedFlow- { _qfOrganization :: Text- , _qfFlow :: Text+ { flowOrganization :: Text+ , flowFlow :: Text } | FlowId Text @@ -172,29 +173,29 @@ toJSON (HashTag t) = String ("#" <> t) data Message a = Message- { _mFlow :: Flow- , _mEvent :: a- , _mTags :: [Tag]- , _mExternalUserName :: Maybe Text- , _mUuid :: Maybe UUID+ { messageFlow :: Flow+ , messageEvent :: a+ , messageTags :: [Tag]+ , messageExternalUserName :: Maybe Text+ , messageUuid :: Maybe UUID } data Chat = Chat- { _chatContent :: Text+ { chatContent :: Text } data FileUpload = FileUpload- { _fContent :: ByteString- , _fContentType :: Text- , _fFileName :: Text+ { fileUploadContent :: ByteString+ , fileUploadContentType :: Text+ , fileUploadFileName :: Text } newtype MessageId = MessageId Int deriving (Show, ToJSON, FromJSON) data Comment = Comment- { _commentContent :: Text- , _commentMessageId :: MessageId+ { commentContent :: Text+ , commentMessageId :: MessageId } message qf e = Message qf e [] Nothing Nothing@@ -202,7 +203,7 @@ comment = Comment data Status = Status- { _statusContent :: Text+ { statusContent :: Text } type Event = Object@@ -210,15 +211,15 @@ newtype FlowFilter = FlowFilter (Maybe [Flow]) data StreamQuery a = StreamQuery- { _sqSource :: a- , _sqUser :: Maybe Bool- , _sqActive :: Maybe Bool+ { streamQuerySource :: a+ , streamQueryUser :: Maybe Bool+ , streamQueryActive :: Maybe Bool } data MessageResponse c = MessageResponse- { _mrMessageId :: MessageId- , _mrSent :: Int- , _mrApp :: Text+ { messageResponseMessageId :: MessageId+ , messageResponseSent :: Int+ , messageResponseApp :: Text -- , _mr } deriving (Show) @@ -276,23 +277,23 @@ toJSON = const $ String "html" data InboxPushMessage = InboxPushMessage- { _ipSource :: Text- , _ipFromAddress :: Text- , _ipSubject :: Text- , _ipContent :: Text- , _ipFromName :: Maybe Text- , _ipReplyTo :: Maybe Text- , _ipProject :: Maybe Text- , _ipFormat :: Maybe InboxPushFormat- , _ipTags :: Maybe [Tag]- , _ipLink :: Maybe Text+ { inboxPushMessageSource :: Text+ , inboxPushMessageFromAddress :: Text+ , inboxPushMessageSubject :: Text+ , inboxPushMessageContent :: Text+ , inboxPushMessageFromName :: Maybe Text+ , inboxPushMessageReplyTo :: Maybe Text+ , inboxPushMessageProject :: Maybe Text+ , inboxPushMessageFormat :: Maybe InboxPushFormat+ , inboxPushMessageTags :: Maybe [Tag]+ , inboxPushMessageLink :: Maybe Text } deriving (Read, Show) data ChatPushMessage = ChatPushMessage- { _cpContent :: Text- , _cpExternalUserName :: Text- , _cpTags :: Maybe [Tag]- , _cpMessageId :: Maybe Text+ { chatPushMessageContent :: Text+ , chatPushMessageExternalUserName :: Text+ , chatPushMessageTags :: Maybe [Tag]+ , chatPushMessageMessageId :: Maybe Text } deriving (Read, Show) data JSONError = JSONError String@@ -320,7 +321,8 @@ managerSettings = const tlsManagerSettings instance ClientManagerSettings User where- managerSettings = const (tlsManagerSettings { managerResponseTimeout = Nothing })+ managerSettings = const (tlsManagerSettings { managerResponseTimeout = Nothing+ , managerRawConnection = rawConnectionModifySocket (\s -> S.setSocketOption s S.KeepAlive 1) }) data FlowdockClient a = FlowdockClient { clientAuth :: a@@ -472,8 +474,8 @@ let responseStream = responseBody r cb $ streamJSON responseStream where- org = encodeUtf8 $ _qfOrganization $ _sqSource q- flow = encodeUtf8 $ _qfFlow $ _sqSource q+ org = encodeUtf8 $ flowOrganization $ streamQuerySource q+ flow = encodeUtf8 $ flowOrganization $ streamQuerySource q streamFlows :: FlowdockClient User -> StreamQuery FlowFilter -> (Producer Event IO () -> IO a) -> IO a streamFlows (FlowdockClient (User token) man) q cb = do@@ -504,5 +506,5 @@ go p' -getParentMessageId :: MessageResponse Comment -> MessageId-getParentMessageId = undefined+-- getParentMessageId :: MessageResponse Comment -> MessageId+-- getParentMessageId = undefined
src/Chat/Flowdock/Internal.hs view
@@ -1,15 +1,18 @@ {-# LANGUAGE FlexibleContexts #-} module Chat.Flowdock.Internal where-import Control.Lens-import Data.Aeson.TH-import Data.Char-import Language.Haskell.TH.Syntax (Q, Name, Dec)+import Control.Lens+import Control.Lens.Action+import Data.Aeson.TH+import Data.Char+import Language.Haskell.TH.Syntax (Dec, Name, Q) adjustNames :: String -> String-adjustNames = snakeCase . dropWhile (not . isUpper)+adjustNames s = case snakeCase $ dropWhile (not . isUpper) s of+ [] -> []+ (x:xs) -> toLower x : xs jsonize :: Name -> Q [Dec]-jsonize = deriveJSON (defaultOptions { fieldLabelModifier = adjustNames +jsonize = deriveJSON (defaultOptions { fieldLabelModifier = adjustNames , omitNothingFields = True }) jsonizeAll :: (Traversable t) => MonadicFold Q (t Name) [Dec]