packages feed

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 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