bower-json 0.7.0.0 → 0.8.0
raw patch · 4 files changed
+57/−8 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Web.Bower.PackageMeta: authorEmail :: Author -> Maybe String
- Web.Bower.PackageMeta: authorHomepage :: Author -> Maybe String
- Web.Bower.PackageMeta: authorName :: Author -> String
- Web.Bower.PackageMeta: bowerAuthors :: PackageMeta -> [Author]
- Web.Bower.PackageMeta: bowerDependencies :: PackageMeta -> [(PackageName, VersionRange)]
- Web.Bower.PackageMeta: bowerDescription :: PackageMeta -> Maybe String
- Web.Bower.PackageMeta: bowerDevDependencies :: PackageMeta -> [(PackageName, VersionRange)]
- Web.Bower.PackageMeta: bowerHomepage :: PackageMeta -> Maybe String
- Web.Bower.PackageMeta: bowerIgnore :: PackageMeta -> [String]
- Web.Bower.PackageMeta: bowerKeywords :: PackageMeta -> [String]
- Web.Bower.PackageMeta: bowerLicence :: PackageMeta -> [String]
- Web.Bower.PackageMeta: bowerMain :: PackageMeta -> [FilePath]
- Web.Bower.PackageMeta: bowerModuleType :: PackageMeta -> [ModuleType]
- Web.Bower.PackageMeta: bowerName :: PackageMeta -> PackageName
- Web.Bower.PackageMeta: bowerPrivate :: PackageMeta -> Bool
- Web.Bower.PackageMeta: bowerRepository :: PackageMeta -> Maybe Repository
- Web.Bower.PackageMeta: bowerResolutions :: PackageMeta -> [(PackageName, Version)]
- Web.Bower.PackageMeta: repositoryType :: Repository -> String
- Web.Bower.PackageMeta: repositoryUrl :: Repository -> String
- Web.Bower.PackageMeta: runVersion :: Version -> String
- Web.Bower.PackageMeta: runVersionRange :: VersionRange -> String
+ Web.Bower.PackageMeta: [authorEmail] :: Author -> Maybe String
+ Web.Bower.PackageMeta: [authorHomepage] :: Author -> Maybe String
+ Web.Bower.PackageMeta: [authorName] :: Author -> String
+ Web.Bower.PackageMeta: [bowerAuthors] :: PackageMeta -> [Author]
+ Web.Bower.PackageMeta: [bowerDependencies] :: PackageMeta -> [(PackageName, VersionRange)]
+ Web.Bower.PackageMeta: [bowerDescription] :: PackageMeta -> Maybe String
+ Web.Bower.PackageMeta: [bowerDevDependencies] :: PackageMeta -> [(PackageName, VersionRange)]
+ Web.Bower.PackageMeta: [bowerHomepage] :: PackageMeta -> Maybe String
+ Web.Bower.PackageMeta: [bowerIgnore] :: PackageMeta -> [String]
+ Web.Bower.PackageMeta: [bowerKeywords] :: PackageMeta -> [String]
+ Web.Bower.PackageMeta: [bowerLicense] :: PackageMeta -> [String]
+ Web.Bower.PackageMeta: [bowerMain] :: PackageMeta -> [FilePath]
+ Web.Bower.PackageMeta: [bowerModuleType] :: PackageMeta -> [ModuleType]
+ Web.Bower.PackageMeta: [bowerName] :: PackageMeta -> PackageName
+ Web.Bower.PackageMeta: [bowerPrivate] :: PackageMeta -> Bool
+ Web.Bower.PackageMeta: [bowerRepository] :: PackageMeta -> Maybe Repository
+ Web.Bower.PackageMeta: [bowerResolutions] :: PackageMeta -> [(PackageName, Version)]
+ Web.Bower.PackageMeta: [repositoryType] :: Repository -> String
+ Web.Bower.PackageMeta: [repositoryUrl] :: Repository -> String
+ Web.Bower.PackageMeta: [runVersionRange] :: VersionRange -> String
+ Web.Bower.PackageMeta: [runVersion] :: Version -> String
Files
- bower-json.cabal +4/−1
- src/Web/Bower/PackageMeta/Internal.hs +15/−6
- test-resources/bower.json +23/−0
- test/Main.hs +15/−1
bower-json.cabal view
@@ -1,5 +1,5 @@ name: bower-json-version: 0.7.0.0+version: 0.8.0 synopsis: Read bower.json from Haskell license: MIT license-file: LICENSE@@ -15,6 +15,9 @@ This package provides a data type and ToJSON/FromJSON instances for Bower's package manifest file, bower.json.++extra-source-files:+ test-resources/bower.json source-repository head type: git
src/Web/Bower/PackageMeta/Internal.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE CPP #-} -- | A data type representing the Bower.json package description file, together -- with a parser and related functions.@@ -10,7 +11,9 @@ module Web.Bower.PackageMeta.Internal where -import Control.Applicative+#if !MIN_VERSION_base(4,8,0)+import Control.Applicative (pure, (<$>), (<*>))+#endif import Control.Monad import Control.Category ((>>>)) import Control.Monad.Error.Class (MonadError(..))@@ -42,7 +45,7 @@ , bowerDescription :: Maybe String , bowerMain :: [FilePath] , bowerModuleType :: [ModuleType]- , bowerLicence :: [String]+ , bowerLicense :: [String] , bowerIgnore :: [String] , bowerKeywords :: [String] , bowerAuthors :: [Author]@@ -186,9 +189,9 @@ asPackageMeta = PackageMeta <$> key "name" (withString parsePackageName) <*> keyMay "description" asString- <*> keyOrDefault "main" [] (eachInArray asString)- <*> keyOrDefault "moduleType" [] (eachInArray (withString parseModuleType))- <*> keyOrDefault "licence" [] (eachInArray asString)+ <*> keyOrDefault "main" [] (arrayOrSingle asString)+ <*> keyOrDefault "moduleType" [] (arrayOrSingle (withString parseModuleType))+ <*> keyOrDefault "license" [] (arrayOrSingle asString) <*> keyOrDefault "ignore" [] (eachInArray asString) <*> keyOrDefault "keywords" [] (eachInArray asString) <*> keyOrDefault "authors" [] (eachInArray asAuthor)@@ -199,6 +202,12 @@ <*> keyOrDefault "resolutions" [] (asAssocListOf Version) <*> keyOrDefault "private" False asBool where+ arrayOrSingle :: Parse e a -> Parse e [a]+ arrayOrSingle parser =+ (fmap (:[]) parser) <|> eachInArray parser+ where+ (<|>) p q = catchError p (const q)+ asAssocListOf :: (String -> a) -> Parse BowerError [(PackageName, a)] asAssocListOf g = eachInObjectWithKey (parsePackageName . T.unpack) (g <$> asString)@@ -267,7 +276,7 @@ , maybePair "description" bowerDescription , maybeArrayPair "main" bowerMain , maybeArrayPair "moduleType" bowerModuleType- , maybeArrayPair "licence" bowerLicence+ , maybeArrayPair "license" bowerLicense , maybeArrayPair "ignore" bowerIgnore , maybeArrayPair "keywords" bowerKeywords , maybeArrayPair "authors" bowerAuthors
+ test-resources/bower.json view
@@ -0,0 +1,23 @@+{+ "name": "purescript-prelude",+ "homepage": "https://github.com/purescript/purescript-prelude",+ "description": "The PureScript Prelude",+ "keywords": [+ "purescript"+ ],+ "license": "MIT",+ "repository": {+ "type": "git",+ "url": "git://github.com/purescript/purescript-prelude.git"+ },+ "ignore": [+ "**/.*",+ "bower_components",+ "node_modules",+ "output",+ "test",+ "bower.json",+ "gulpfile.js",+ "package.json"+ ]+}
test/Main.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-} import Test.Tasty import Test.Tasty.HUnit@@ -26,6 +27,7 @@ [ testGroup "FromJSON Author instance" authorTests , testGroup "optional keys" optionalKeyTests , testGroup "round trips" roundTripTests+ , testGroup "real bower.json" realBowerJsonTests ] authorTests :: [TestTree]@@ -99,7 +101,7 @@ { bowerDescription = Just "hello, world" , bowerMain = ["foo.js"] , bowerModuleType = [Globals, Node]- , bowerLicence = ["MIT"]+ , bowerLicense = ["MIT"] , bowerIgnore = [] , bowerKeywords = ["purescript"] , bowerAuthors = [authorWithoutOptionalAttrs, authorWithEmail, authorWithBoth]@@ -123,3 +125,15 @@ roundTripTests = map (\(name, b) -> testCase name (Just b @=? decode (encode b))) allPkgs++realBowerJsonTests :: [TestTree]+realBowerJsonTests = [go]+ where+ go =+ testCase "parses a real bower.json correctly" $ do+ res <- decodeFile "./test-resources/bower.json"+ case res of+ Right PackageMeta{..} ->+ ["MIT"] @=? bowerLicense+ Left err ->+ assertBool ("Failed to parse ./test-resources/bower.json: " ++ show err) False