on master help sign in
Flatten nested objects in handle scribe

This resolves #16

commit06fa7876d5f40909bbce65a3cc98d93a6a05be89 authorMichael Xavier <michael@michaelxavier.net> dateWed 30 Mar 2016, 19:17 (11 years ago) parent425a54d
2 files changed+19−15
katip/src/Katip/Scribes/Handle.hs+11−11 katip/test/Katip/Tests/Scribes/Handle.hs+8−4
katip/src/Katip/Scribes/Handle.hs+11−11
@@ -8,6 +8,7 @@ import Control.Monad
88import Data.Aeson
99import qualified Data.HashMap.Strict as HM
1010import Data.Monoid
11+import Data.Text (Text)
1112import Data.Text.Lazy.Builder
1213import Data.Text.Lazy.IO as T
1314import Data.Time
@@ -26,18 +27,17 @@ brackets m = fromText "[" <> m <> fromText "]"
2627
2728-------------------------------------------------------------------------------
2829getKeys :: LogItem s => Verbosity -> s -> [Builder]
29−getKeys verb a = rendPair A.<$> HM.toList (payloadObject verb a)
30+getKeys verb a = concat (renderPair A.<$> HM.toList (payloadObject verb a))
3031 where
31− rendPair (k,v) = fromText k <> fromText ":" <> (renderPrim v)
32−
33−
34−-------------------------------------------------------------------------------
35−renderPrim :: Value -> Builder
36−renderPrim (String t) = fromText t
37−renderPrim (Number s) = fromString (show s)
38−renderPrim (Bool b) = fromString (show b)
39−renderPrim Null = fromText "null"
40−renderPrim _ = mempty
32+ renderPair :: (Text, Value) -> [Builder]
33+ renderPair (k,v) =
34+ case v of
35+ Object o -> concat [renderPair (k <> "." <> k', v') | (k', v') <- HM.toList o]
36+ String t -> [fromText (k <> ":" <> t)]
37+ Number n -> [fromText (k <> ":") <> fromString (show n)]
38+ Bool b -> [fromText (k <> ":") <> fromString (show b)]
39+ Null -> [fromText (k <> ":null")]
40+ _ -> mempty -- Can't think of a sensible way to handle arrays
4141
4242
4343-------------------------------------------------------------------------------
katip/test/Katip/Tests/Scribes/Handle.hs+8−4
@@ -1,4 +1,4 @@
1−{-# LANGUAGE OverloadedStrings #-}
1+{-# LANGUAGE OverloadedStrings #-}
22module Katip.Tests.Scribes.Handle
33 ( tests
44 ) where
@@ -6,6 +6,7 @@ module Katip.Tests.Scribes.Handle
66-------------------------------------------------------------------------------
77import Control.Monad
88import Data.Aeson
9+import Data.Monoid
910import Data.Text (Text)
1011import qualified Data.Text.IO as T
1112import System.Directory
@@ -27,9 +28,9 @@ tests = testGroup "Katip.Scribes.Handle"
2728 runKatipT le $ logItem dummyLogItem "test" Nothing InfoS "test message"
2829 hClose h
2930 res <- readFile path
30− let pat = "\\[[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}\\]\\[katip-test.test\\]\\[Info\\]\\[.+\\]\\[[[:digit:]]+\\]\\[ThreadId [[:digit:]]+\\]\\[note:some note\\] test message" :: String
31+ let pat = "\\[[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}\\]\\[katip-test.test\\]\\[Info\\]\\[.+\\]\\[[[:digit:]]+\\]\\[ThreadId [[:digit:]]+\\]\\[note.deep:some note\\] test message" :: String
3132 let matches = res =~ pat
32− matches @?= True
33+ assertBool (res <> " did not match") matches
3334 ]
3435
3536
@@ -40,7 +41,10 @@ data DummyLogItem = DummyLogItem {
4041
4142
4243instance ToJSON DummyLogItem where
43− toJSON (DummyLogItem n) = object ["note" .= n]
44+ toJSON (DummyLogItem n) = object
45+ [ "note" .= object [ "deep" .= n
46+ ]
47+ ]
4448
4549
4650instance ToObject DummyLogItem