packages feed

json-api-lib 0.1.3.0 → 0.2.0.0

raw patch · 4 files changed

+61/−17 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Network.JSONApi: mkCompoundDocuments :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a
+ Network.JSONApi: mkDocuments :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Document a
+ Network.JSONApi: mkSimpleDocuments :: ResourcefulEntity a => [a] -> Document a
+ Network.JSONApi.Document: mkCompoundDocuments :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a
+ Network.JSONApi.Document: mkDocuments :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Document a
+ Network.JSONApi.Document: mkSimpleDocuments :: ResourcefulEntity a => [a] -> Document a
- Network.JSONApi: mkCompoundDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a
+ Network.JSONApi: mkCompoundDocument :: ResourcefulEntity a => a -> Maybe Links -> Maybe Meta -> Included -> Document a
- Network.JSONApi: mkDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Document a
+ Network.JSONApi: mkDocument :: ResourcefulEntity a => a -> Maybe Links -> Maybe Meta -> Document a
- Network.JSONApi: mkSimpleDocument :: ResourcefulEntity a => [a] -> Document a
+ Network.JSONApi: mkSimpleDocument :: ResourcefulEntity a => a -> Document a
- Network.JSONApi.Document: mkCompoundDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a
+ Network.JSONApi.Document: mkCompoundDocument :: ResourcefulEntity a => a -> Maybe Links -> Maybe Meta -> Included -> Document a
- Network.JSONApi.Document: mkDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Document a
+ Network.JSONApi.Document: mkDocument :: ResourcefulEntity a => a -> Maybe Links -> Maybe Meta -> Document a
- Network.JSONApi.Document: mkSimpleDocument :: ResourcefulEntity a => [a] -> Document a
+ Network.JSONApi.Document: mkSimpleDocument :: ResourcefulEntity a => a -> Document a

Files

json-api-lib.cabal view
@@ -1,7 +1,7 @@ cabal-version:       2.0  name:                json-api-lib-version:             0.1.3.0+version:             0.2.0.0 homepage:            https://github.com/shirren/json-api-lib bug-reports:         https://github.com/shirren/json-api-lib/issues license:             MIT
src/Network/JSONApi.hs view
@@ -26,13 +26,16 @@ , R.mkRelationships , R.showLink , D.mkDocument+, D.mkDocuments , D.mkDocument' , D.singleton , D.list , D.mkCompoundDocument+, D.mkCompoundDocuments , D.mkCompoundDocument' , D.mkIncludedResource , D.mkSimpleDocument+, D.mkSimpleDocuments , D.mkSimpleDocument' , M.mkMeta ) where
src/Network/JSONApi/Document.hs view
@@ -7,12 +7,15 @@   , ErrorDocument (..)   , Included   , mkDocument+  , mkDocuments   , mkDocument'   , mkSimpleDocument+  , mkSimpleDocuments   , mkSimpleDocument'   , singleton   , list   , mkCompoundDocument+  , mkCompoundDocuments   , mkCompoundDocument'   , mkIncludedResource   ) where@@ -92,16 +95,31 @@ instance NFData Included  {- |-Constructor function for the Document data type.+Constructor function for the Document data type which takes+a list of Resourceful entities.  See 'mkCompoundDocument' for constructing compound Document including 'side-loaded' resources -}-mkDocument :: ResourcefulEntity a =>+mkDocuments :: ResourcefulEntity a =>               [a]            -> Maybe Links            -> Maybe Meta            -> Document a+mkDocuments res = mkDocument' (toResourceDataCollection res)++{- |+Constructor function for the Document data type which takes+a single ResourcefulEntity.++See 'mkCompoundDocument' for constructing compound Document+including 'side-loaded' resources+-}+mkDocument :: ResourcefulEntity a =>+              a+           -> Maybe Links+           -> Maybe Meta+           -> Document a mkDocument res = mkDocument' (toResourceData res)  mkDocument' :: ResourceData a@@ -117,12 +135,20 @@     }  {- |-A function for document which do not require links or Meta data.+A function for a single resourceful entity and document which do not+require links or Meta data. -}-mkSimpleDocument :: ResourcefulEntity a => [a] -> Document a+mkSimpleDocument :: ResourcefulEntity a => a -> Document a mkSimpleDocument res = mkDocument res Nothing Nothing  {- |+A function for a multiple resourceful entities and document which do not+require links or Meta data.+-}+mkSimpleDocuments :: ResourcefulEntity a => [a] -> Document a+mkSimpleDocuments res = mkDocuments res Nothing Nothing++{- | A function for document which do not require links or Meta data. -} mkSimpleDocument' :: ResourceData a -> Document a@@ -136,13 +162,28 @@ <http://jsonapi.org/format/#document-compound-documents> -} mkCompoundDocument :: ResourcefulEntity a =>-                      [a]+                      a                    -> Maybe Links                    -> Maybe Meta                    -> Included                    -> Document a mkCompoundDocument res = mkCompoundDocument' (toResourceData res) +{- |+Constructor function for the Document data type.+See 'mkIncludedResource' for constructing the 'Included' type.++Supports building compound documents+<http://jsonapi.org/format/#document-compound-documents>+-}+mkCompoundDocuments :: ResourcefulEntity a =>+                      [a]+                   -> Maybe Links+                   -> Maybe Meta+                   -> Included+                   -> Document a+mkCompoundDocuments res = mkCompoundDocument' (toResourceDataCollection res)+ mkCompoundDocument' :: ResourceData a                     -> Maybe Links                     -> Maybe Meta@@ -165,9 +206,11 @@ mkIncludedResource :: ResourcefulEntity a => a -> Included mkIncludedResource res = Included [AE.toJSON . R.toResource $ res] -toResourceData :: ResourcefulEntity a => [a] -> ResourceData a-toResourceData [r] = Singleton (R.toResource r)-toResourceData rs  = List (map R.toResource rs)+toResourceData :: ResourcefulEntity a => a -> ResourceData a+toResourceData r = Singleton (R.toResource r)++toResourceDataCollection :: ResourcefulEntity a => [a] -> ResourceData a+toResourceDataCollection rs  = List (map R.toResource rs)  {- | The 'Resource' type encapsulates the underlying 'Resource'
test/Network/JSONApi/DocumentSpec.hs view
@@ -21,23 +21,21 @@ spec =   describe "JSON serialization" $ do     it "JSON encodes/decodes a singleton resource" $ do-      -- TODO: test the main resource actually is a singleton-      let jsonApiObj = mkDocument [testObject] Nothing Nothing+      let jsonApiObj = mkDocument testObject Nothing Nothing           encodedJson = encodeDocumentObject jsonApiObj           decodedJson = decodeDocumentObject encodedJson        isRight decodedJson `shouldBe` True      it "JSON encodes/decodes a list of resources" $ do-      -- TODO: test the main resource actually is a list-      let jsonApiObj = mkDocument [testObject, testObject2] Nothing Nothing+      let jsonApiObj = mkDocuments [testObject, testObject2] Nothing Nothing           encodedJson = encodeDocumentObject jsonApiObj           decodedJson = decodeDocumentObject encodedJson        isRight decodedJson `shouldBe` True      it "contains the allowable top-level keys" $ do-      let jsonApiObj = mkDocument [testObject] Nothing Nothing+      let jsonApiObj = mkDocument testObject Nothing Nothing           encodedJson = encodeDocumentObject jsonApiObj           dataObject = encodedJson ^? Lens.key "data"           linksObject = encodedJson ^? Lens.key "links"@@ -50,14 +48,14 @@       isJust includedObject `shouldBe` True      it "allows an optional top-level links object" $ do-      let jsonApiObj = mkDocument [testObject] (Just linksObj) Nothing+      let jsonApiObj = mkDocument testObject (Just linksObj) Nothing           encodedJson = encodeDocumentObject jsonApiObj           decodedJson = decodeDocumentObject encodedJson        isRight decodedJson `shouldBe` True      it "allows an optional top-level meta object" $ do-      let jsonApiObj = mkDocument [testObject] Nothing (Just testMetaObj)+      let jsonApiObj = mkDocument testObject Nothing (Just testMetaObj)           encodedJson = encodeDocumentObject jsonApiObj           decodedJson = decodeDocumentObject encodedJson @@ -65,7 +63,7 @@      it "allows a heterogeneous list of related resources" $ do       let includedResources = mkIncludedResource testObject-          jsonApiObj = mkCompoundDocument [testObject] Nothing Nothing includedResources+          jsonApiObj = mkCompoundDocument testObject Nothing Nothing includedResources           encodedJson = encodeDocumentObject jsonApiObj           decodedJson = decodeDocumentObject encodedJson