fb 0.7.3 → 0.7.4
raw patch · 3 files changed
+39/−24 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Facebook: encodeFbParam :: SimpleType a => a -> Text
+ Facebook: encodeFbParam :: SimpleType a => a -> ByteString
Files
- fb.cabal +2/−2
- src/Facebook/OpenGraph.hs +23/−19
- tests/runtests.hs +14/−3
fb.cabal view
@@ -1,5 +1,5 @@ name: fb-version: 0.7.3+version: 0.7.4 license: BSD3 license-file: LICENSE author: Felipe Lessa@@ -85,7 +85,7 @@ -- Library dependencies used on the tests. No need to -- specify versions since they'll use the same as above. base, lifted-base, transformers, bytestring,- http-conduit, text, time, aeson+ http-conduit, http-types, text, time, aeson -- Test-only dependencies , HUnit
src/Facebook/OpenGraph.hs view
@@ -21,7 +21,7 @@ -- import qualified Control.Exception.Lifted as E -- import qualified Data.Aeson as A--- import qualified Data.ByteString.Char8 as B+import qualified Data.ByteString.Char8 as B import qualified Data.Conduit as C import qualified Data.Text as T import qualified Data.Text.Encoding as TE@@ -106,7 +106,7 @@ -- | Create an 'Argument' with a 'SimpleType'. See the docs on -- 'createAction' for an example. (#=) :: SimpleType a => Ascii -> a -> Argument-p #= v = (p, TE.encodeUtf8 (encodeFbParam v))+p #= v = (p, encodeFbParam v) @@ -114,7 +114,7 @@ -- simple type. (see -- <https://developers.facebook.com/docs/opengraph/simpletypes/>). class SimpleType a where- encodeFbParam :: a -> Text+ encodeFbParam :: a -> B.ByteString -- | Facebook's simple type @Boolean@. instance SimpleType Bool where@@ -122,10 +122,10 @@ -- | Facebook's simple type @DateTime@ with only the date. instance SimpleType TI.Day where- encodeFbParam = T.pack . TI.formatTime defaultTimeLocale "%Y-%m-%d"+ encodeFbParam = B.pack . TI.formatTime defaultTimeLocale "%Y-%m-%d" -- | Facebook's simple type @DateTime@. instance SimpleType TI.UTCTime where- encodeFbParam = T.pack . TI.formatTime defaultTimeLocale "%Y%m%dT%H%MZ"+ encodeFbParam = B.pack . TI.formatTime defaultTimeLocale "%Y%m%dT%H%MZ" -- | Facebook's simple type @DateTime@. instance SimpleType TI.ZonedTime where encodeFbParam = encodeFbParam . TI.zonedTimeToUTC@@ -134,40 +134,44 @@ -- | Facebook's simple type @Float@ with less precision than supported. instance SimpleType Float where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Float@. instance SimpleType Double where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Int where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Word where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Int8 where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Word8 where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Int16 where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Word16 where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Int32 where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @Integer@. instance SimpleType Word32 where- encodeFbParam = showT+ encodeFbParam = showBS -- | Facebook's simple type @String@. instance SimpleType Text where- encodeFbParam = id+ encodeFbParam = TE.encodeUtf8 +-- | An object's 'Id' code.+instance SimpleType Id where+ encodeFbParam = idCode+ -- | A comma-separated list of simple types. This definition -- doesn't work everywhere, just for a few combinations that -- Facebook uses (e.g. @[Int]@). Also, encoding a list of lists@@ -175,7 +179,7 @@ -- other words, this instance is here more for your convenience -- than to make sure your code is correct. instance SimpleType a => SimpleType [a] where- encodeFbParam = T.concat . intersperse "," . map encodeFbParam+ encodeFbParam = B.concat . intersperse "," . map encodeFbParam -showT :: Show a => a -> Text-showT = T.pack . show+showBS :: Show a => a -> B.ByteString+showBS = B.pack . show
tests/runtests.hs view
@@ -7,14 +7,17 @@ import Data.Text (Text) import Data.Time (parseTime) import Data.Word (Word8, Word16, Word32, Word)+import Network.HTTP.Types (Ascii) import System.Environment (getEnv) import System.Exit (exitFailure) import System.IO.Error (isDoesNotExistError)+import Unsafe.Coerce (unsafeCoerce) import qualified Data.Aeson as A import qualified Data.Aeson.Types as A import qualified Data.ByteString.Char8 as B import qualified Data.Text as T+import qualified Data.Text.Encoding as TE import qualified Data.Time as TI import qualified Control.Exception.Lifted as E import qualified Facebook as FB@@ -158,7 +161,7 @@ it "works for ZonedTime" $ FB.encodeFbParam zonedTime @?= "20121221T1107Z" let propShowRead :: (Show a, Read a, Eq a, FB.SimpleType a) => a -> Bool- propShowRead x = read (T.unpack $ FB.encodeFbParam x) == x+ propShowRead x = read (B.unpack $ FB.encodeFbParam x) == x prop "works for Float" (propShowRead :: Float -> Bool) prop "works for Double" (propShowRead :: Double -> Bool) prop "works for Int" (propShowRead :: Int -> Bool)@@ -171,7 +174,7 @@ prop "works for Word32" (propShowRead :: Word32 -> Bool) let propShowReadL :: (Show a, Read a, Eq a, FB.SimpleType a) => [a] -> Bool- propShowReadL x = read ('[' : T.unpack (FB.encodeFbParam x) ++ "]") == x+ propShowReadL x = read ('[' : B.unpack (FB.encodeFbParam x) ++ "]") == x prop "works for [Float]" (propShowReadL :: [Float] -> Bool) prop "works for [Double]" (propShowReadL :: [Double] -> Bool) prop "works for [Int]" (propShowReadL :: [Int] -> Bool)@@ -183,7 +186,15 @@ prop "works for [Word16]" (propShowReadL :: [Word16] -> Bool) prop "works for [Word32]" (propShowReadL :: [Word32] -> Bool) - prop "works for Text" (\t -> FB.encodeFbParam t == t)+ prop "works for Text" (\t -> FB.encodeFbParam t == TE.encodeUtf8 t)++ prop "works for Id" $ \i ->+ let toId :: Int -> FB.Id+ toId = id' . B.pack . show+ where id' :: Ascii -> FB.Id+ id' = unsafeCoerce+ j = abs i+ in FB.encodeFbParam (toId j) == FB.encodeFbParam j -- Wrappers for HUnit operators using MonadIO