From 06aa250b6b35dd832666ec7897cca35fab1c12ca Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Mon, 18 Jul 2016 22:08:15 +0100 Subject: [PATCH] Updates for PureScript 0.9 --- .gitignore | 6 ++-- .travis.yml | 24 +++++++-------- README.md | 17 +++++++++++ bower.json | 32 +++++++++++--------- package.json | 10 +++++- src/Data/Json/Extended.purs | 20 +++++------- src/Data/Json/Extended/Signature.purs | 1 - src/Data/Json/Extended/Signature/Core.purs | 14 +++------ src/Data/Json/Extended/Signature/Gen.purs | 2 +- src/Data/Json/Extended/Signature/Json.purs | 16 +++------- src/Data/Json/Extended/Signature/Parse.purs | 10 ++---- src/Data/Json/Extended/Signature/Render.purs | 11 ++++--- test/Main.purs | 5 +-- 13 files changed, 88 insertions(+), 80 deletions(-) create mode 100644 README.md diff --git a/.gitignore b/.gitignore index 4d159c2..307f9c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ +/.* +!/.gitignore +!/.travis.yml /bower_components/ /node_modules/ -/.pulp-cache/ /output/ -/.psci* -/src/.webpack.js diff --git a/.travis.yml b/.travis.yml index 73cde72..21897a2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,17 @@ language: node_js dist: trusty sudo: required -node_js: - - 5 +node_js: 6 install: - - npm install pulp bower -g - - npm install && bower install + - npm install -g bower + - npm install + - bower install --production script: - - pulp test - + - npm run -s build + - bower install + - npm -s test after_success: - - >- - test $TRAVIS_TAG && - psc-publish > .pursuit.json && - curl -X POST http://pursuit.purescript.org/packages \ - -d @.pursuit.json \ - -H 'Accept: application/json' \ - -H "Authorization: token ${GITHUB_TOKEN}" +- >- + test $TRAVIS_TAG && + echo $GITHUB_TOKEN | pulp login && + echo y | pulp publish --no-push diff --git a/README.md b/README.md new file mode 100644 index 0000000..06411ee --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# purescript-ejson + +[![Latest release](http://img.shields.io/bower/v/purescript-ejson.svg)](https://github.com/purescript/purescript-ejson/releases) +[![Build Status](https://travis-ci.org/slamdata/purescript-ejson.svg?branch=master)](https://travis-ci.org/slamdata/purescript-ejson) +[![Dependency Status](https://www.versioneye.com/user/projects/578d451f3e6a8b00457f8efe/badge.svg?style=flat)](https://www.versioneye.com/user/projects/578d451f3e6a8b00457f8efe) + +EJSON data representation, as used by [Quasar](https://github.com/quasar-analytics/quasar). + +## Installation + +``` +bower install purescript-ejson +``` + +## Documentation + +Module documentation is [published on Pursuit](http://pursuit.purescript.org/packages/purescript-ejson). diff --git a/bower.json b/bower.json index c6d6cb7..462a9c9 100644 --- a/bower.json +++ b/bower.json @@ -1,23 +1,27 @@ { "name": "purescript-ejson", - "version": "0.2.0", - "moduleType": [ - "node" - ], + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git://github.com/slamdata/purescript-ejson.git" + }, "ignore": [ "**/.*", - "node_modules", "bower_components", - "output" + "node_modules", + "output", + "test", + "bower.json", + "package.json" ], "dependencies": { - "purescript-argonaut-codecs": "^0.6.1", - "purescript-argonaut-core": "^0.2.3", - "purescript-bifunctors": "^0.4.0", - "purescript-fixed-points": "^0.1.0", - "purescript-hugenums": "^1.3.1", - "purescript-maps": "^0.5.7", - "purescript-parsing": "^0.8.0", - "purescript-strongcheck": "^0.14.7" + "purescript-argonaut-codecs": "^1.0.0", + "purescript-argonaut-core": "^1.0.0", + "purescript-bifunctors": "^1.0.0", + "purescript-fixed-points": "^1.0.0", + "purescript-hugenums": "^2.0.0", + "purescript-maps": "^1.0.0", + "purescript-parsing": "^1.0.0", + "purescript-strongcheck": "^1.0.0" } } diff --git a/package.json b/package.json index 1cce81c..abec649 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,14 @@ { "private": true, + "scripts": { + "clean": "rimraf output && rimraf .pulp-cache", + "build": "pulp build --censor-lib --strict", + "test": "pulp test" + }, "devDependencies": { - "purescript": "^0.8.2" + "pulp": "^9.0.1", + "purescript": "^0.9.1", + "purescript-psa": "^0.3.9", + "rimraf": "^2.5.0" } } diff --git a/src/Data/Json/Extended.purs b/src/Data/Json/Extended.purs index 07c0862..7c69f87 100644 --- a/src/Data/Json/Extended.purs +++ b/src/Data/Json/Extended.purs @@ -31,26 +31,22 @@ import Prelude import Control.Lazy as Lazy -import Data.Eq1 (eq1) -import Data.Ord1 (compare1) -import Data.Argonaut.Encode (class EncodeJson, encodeJson) import Data.Argonaut.Decode (class DecodeJson, decodeJson) - +import Data.Argonaut.Encode (class EncodeJson, encodeJson) +import Data.Array as A +import Data.Eq1 (eq1) import Data.Functor.Mu as Mu import Data.HugeNum as HN -import Data.List as L +import Data.Json.Extended.Signature as Sig import Data.Map as Map import Data.Maybe as M +import Data.Ord1 (compare1) import Data.StrMap as SM import Data.Tuple as T - -import Test.StrongCheck as SC +import Test.StrongCheck.Arbitrary as SC import Test.StrongCheck.Gen as Gen - import Text.Parsing.Parser as P -import Data.Json.Extended.Signature as Sig - newtype EJson = EJson (Mu.Mu Sig.EJsonF) getEJson @@ -189,9 +185,9 @@ array ∷ Array EJson → EJson array = roll <<< Sig.Array object ∷ Map.Map EJson EJson → EJson -object = roll <<< Sig.Object <<< L.fromList <<< Map.toList +object = roll <<< Sig.Object <<< A.fromFoldable <<< Map.toList object' ∷ SM.StrMap EJson → EJson -object' = roll <<< Sig.Object <<< map go <<< L.fromList <<< SM.toList +object' = roll <<< Sig.Object <<< map go <<< A.fromFoldable <<< SM.toList where go (T.Tuple a b) = T.Tuple (string a) b diff --git a/src/Data/Json/Extended/Signature.purs b/src/Data/Json/Extended/Signature.purs index fb944cd..4b46cc0 100644 --- a/src/Data/Json/Extended/Signature.purs +++ b/src/Data/Json/Extended/Signature.purs @@ -11,4 +11,3 @@ import Data.Json.Extended.Signature.Render as Render import Data.Json.Extended.Signature.Parse as Parse import Data.Json.Extended.Signature.Gen as Gen import Data.Json.Extended.Signature.Json as Json - diff --git a/src/Data/Json/Extended/Signature/Core.purs b/src/Data/Json/Extended/Signature/Core.purs index 265457f..d762cc3 100644 --- a/src/Data/Json/Extended/Signature/Core.purs +++ b/src/Data/Json/Extended/Signature/Core.purs @@ -4,16 +4,15 @@ module Data.Json.Extended.Signature.Core import Prelude +import Data.Bifunctor as BF import Data.Eq1 (class Eq1) -import Data.Ord1 (class Ord1) - import Data.Foldable as F import Data.HugeNum as HN import Data.Int as Int import Data.List as L import Data.Map as Map +import Data.Ord1 (class Ord1) import Data.Tuple as T -import Data.Bifunctor as BF -- | The signature endofunctor for the EJson theory. data EJsonF a @@ -63,8 +62,8 @@ instance eq1EJsonF ∷ Eq1 EJsonF where eq1 (Array xs) (Array ys) = xs == ys eq1 (Object xs) (Object ys) = let - xs' = L.toList xs - ys' = L.toList ys + xs' = L.fromFoldable xs + ys' = L.fromFoldable ys in isSubobject xs' ys' && isSubobject ys' xs' @@ -145,7 +144,4 @@ pairsToObject . (Ord a) ⇒ Array (T.Tuple a b) → Map.Map a b -pairsToObject = - Map.fromList - <<< L.toList - +pairsToObject = Map.fromFoldable diff --git a/src/Data/Json/Extended/Signature/Gen.purs b/src/Data/Json/Extended/Signature/Gen.purs index a677b90..d5631df 100644 --- a/src/Data/Json/Extended/Signature/Gen.purs +++ b/src/Data/Json/Extended/Signature/Gen.purs @@ -11,7 +11,7 @@ import Data.Json.Extended.Signature.Core (EJsonF(..)) import Data.Tuple as T import Data.HugeNum as HN -import Test.StrongCheck as SC +import Test.StrongCheck.Arbitrary as SC import Test.StrongCheck.Gen as Gen arbitraryBaseEJsonF ∷ ∀ a. Gen.Gen (EJsonF a) diff --git a/src/Data/Json/Extended/Signature/Json.purs b/src/Data/Json/Extended/Signature/Json.purs index 4a68320..f4279eb 100644 --- a/src/Data/Json/Extended/Signature/Json.purs +++ b/src/Data/Json/Extended/Signature/Json.purs @@ -3,26 +3,20 @@ module Data.Json.Extended.Signature.Json where import Prelude import Control.Alt ((<|>)) -import Control.Bind ((>=>)) import Data.Argonaut.Core as JS +import Data.Argonaut.Decode (class DecodeJson, decodeJson, (.?)) import Data.Argonaut.Encode (encodeJson) -import Data.Argonaut.Decode (class DecodeJson, decodeJson) -import Data.Argonaut.Combinators ((.?)) - import Data.Array as A import Data.Either as E import Data.HugeNum as HN import Data.Int as Int -import Data.List as L +import Data.Json.Extended.Signature.Core (EJsonF(..)) import Data.Maybe as M import Data.StrMap as SM import Data.Traversable as TR import Data.Tuple as T -import Data.Json.Extended.Signature.Core (EJsonF(..)) - - encodeJsonEJsonF ∷ ∀ a . (a → JS.Json) @@ -56,8 +50,7 @@ encodeJsonEJsonF rec asKey x = ∷ Array (T.Tuple a a) → SM.StrMap JS.Json asStrMap = - SM.fromList - <<< L.toList + SM.fromFoldable <<< A.mapMaybe tuple decodeJsonEJsonF @@ -145,7 +138,6 @@ decodeJsonEJsonF rec makeKey = → EJsonF a strMapObject = Object - <<< L.fromList + <<< A.fromFoldable <<< map (\(T.Tuple k v) → T.Tuple (makeKey k) v) <<< SM.toList - diff --git a/src/Data/Json/Extended/Signature/Parse.purs b/src/Data/Json/Extended/Signature/Parse.purs index c0b4f14..963f97c 100644 --- a/src/Data/Json/Extended/Signature/Parse.purs +++ b/src/Data/Json/Extended/Signature/Parse.purs @@ -5,20 +5,17 @@ module Data.Json.Extended.Signature.Parse import Prelude import Control.Alt ((<|>)) -import Control.Apply ((*>), (<*)) -import Data.Functor ((<$), ($>)) import Data.Array as A import Data.Foldable as F import Data.HugeNum as HN import Data.Int as Int +import Data.Json.Extended.Signature.Core (EJsonF(..)) import Data.List as L import Data.Maybe as M import Data.String as S import Data.Tuple as T -import Data.Json.Extended.Signature.Core (EJsonF(..)) - import Text.Parsing.Parser as P import Text.Parsing.Parser.Combinators as PC import Text.Parsing.Parser.String as PS @@ -260,8 +257,8 @@ parseEJsonF rec = , Date <$> taggedLiteral "DATE" , Interval <$> taggedLiteral "INTERVAL" , ObjectId <$> taggedLiteral "OID" - , Array <<< L.fromList <$> squares (commaSep rec) - , Object <<< L.fromList <$> braces (commaSep parseAssignment) + , Array <<< A.fromFoldable <$> squares (commaSep rec) + , Object <<< A.fromFoldable <$> braces (commaSep parseAssignment) ] where @@ -276,4 +273,3 @@ parseEJsonF rec = T.Tuple <$> rec <* parseColon <*> rec - diff --git a/src/Data/Json/Extended/Signature/Render.purs b/src/Data/Json/Extended/Signature/Render.purs index 384e9e6..fbc1323 100644 --- a/src/Data/Json/Extended/Signature/Render.purs +++ b/src/Data/Json/Extended/Signature/Render.purs @@ -4,12 +4,13 @@ module Data.Json.Extended.Signature.Render import Prelude +import Data.Either (fromRight) import Data.Foldable as F import Data.HugeNum as HN +import Data.Json.Extended.Signature.Core (EJsonF(..)) import Data.String.Regex as Rx import Data.Tuple as T - -import Data.Json.Extended.Signature.Core (EJsonF(..)) +import Partial.Unsafe (unsafePartial) renderEJsonF ∷ ∀ a @@ -45,8 +46,9 @@ renderEJsonF rec d = → String replaceAll i = Rx.replace $ - Rx.regex i $ - Rx.noFlags { global = true } + unsafePartial fromRight $ + Rx.regex i $ + Rx.noFlags { global = true } -- | Surround text in double quotes, escaping internal double quotes. stringEJson @@ -89,4 +91,3 @@ braces → String braces str = "{" <> str <> "}" - diff --git a/test/Main.purs b/test/Main.purs index c3ae42a..0d2b986 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -14,6 +14,7 @@ import Data.Json.Extended (EJson, arbitraryJsonEncodableEJsonOfSize, arbitraryEJ import Text.Parsing.Parser as P import Test.StrongCheck as SC +import Test.StrongCheck.Arbitrary as SCA type TestEffects = ( err ∷ EXCEPTION @@ -24,10 +25,10 @@ type TestEffects = newtype ArbJsonEncodableEJson = ArbJsonEncodableEJson EJson newtype ArbEJson = ArbEJson EJson -instance arbitraryArbJsonEncodableEJson ∷ SC.Arbitrary ArbJsonEncodableEJson where +instance arbitraryArbJsonEncodableEJson ∷ SCA.Arbitrary ArbJsonEncodableEJson where arbitrary = ArbJsonEncodableEJson <$> arbitraryJsonEncodableEJsonOfSize 2 -instance arbitraryArbEJson ∷ SC.Arbitrary ArbEJson where +instance arbitraryArbEJson ∷ SCA.Arbitrary ArbEJson where arbitrary = ArbEJson <$> arbitraryEJsonOfSize 2 testJsonSerialization ∷ Eff TestEffects Unit