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 +1/−1
- src/Network/JSONApi.hs +3/−0
- src/Network/JSONApi/Document.hs +51/−8
- test/Network/JSONApi/DocumentSpec.hs +6/−8
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