hjsonschema 1.4.0.0 → 1.5.0.0
raw patch · 8 files changed
+67/−57 lines, 8 filesdep ~directoryPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: directory
API changes (from Hackage documentation)
+ JSONSchema.Validator.Draft4.Object: RequiredInvalid :: Required -> (Set Text) -> (HashMap Text Value) -> RequiredInvalid
+ JSONSchema.Validator.Draft4.Object: data RequiredInvalid
+ JSONSchema.Validator.Draft4.Object: instance GHC.Classes.Eq JSONSchema.Validator.Draft4.Object.RequiredInvalid
+ JSONSchema.Validator.Draft4.Object: instance GHC.Show.Show JSONSchema.Validator.Draft4.Object.RequiredInvalid
- JSONSchema.Draft4: FailureRequired :: () -> ValidatorFailure
+ JSONSchema.Draft4: FailureRequired :: RequiredInvalid -> ValidatorFailure
- JSONSchema.Draft4.Failure: FailureRequired :: () -> ValidatorFailure
+ JSONSchema.Draft4.Failure: FailureRequired :: RequiredInvalid -> ValidatorFailure
- JSONSchema.Validator.Draft4: requiredValidator :: Validator a (Maybe Required) ()
+ JSONSchema.Validator.Draft4: requiredValidator :: Validator a (Maybe Required) RequiredInvalid
- JSONSchema.Validator.Draft4.Object: requiredVal :: Required -> HashMap Text Value -> Maybe ()
+ JSONSchema.Validator.Draft4.Object: requiredVal :: Required -> HashMap Text Value -> Maybe RequiredInvalid
Files
- changelog.md +5/−0
- examples/AlternateSchema.hs +2/−4
- examples/Simple.hs +7/−7
- hjsonschema.cabal +2/−2
- src/JSONSchema/Draft4/Failure.hs +24/−24
- src/JSONSchema/Validator/Draft4.hs +1/−1
- src/JSONSchema/Validator/Draft4/Object.hs +16/−9
- test/Shared.hs +10/−10
changelog.md view
@@ -1,3 +1,8 @@+# 1.5.0.0+++ Report details of `"required"` validator failure.++ Bump `directory`.+ # 1.4.0.0 + Rename `Data.JsonSchema.*` modules to `JSONSchema.*`.
examples/AlternateSchema.hs view
@@ -11,9 +11,8 @@ import Protolude import Data.Aeson (FromJSON(..), Value(..),- decode)+ decodeStrict) import qualified Data.Aeson as AE-import qualified Data.ByteString.Lazy as LBS import qualified Data.HashMap.Strict as HM import Data.Maybe (fromMaybe) import Data.Profunctor (Profunctor (..))@@ -66,8 +65,7 @@ metaSchema :: Schema metaSchema = fromMaybe (panic "Schema decode failed (this should never happen)")- . decode- . LBS.fromStrict+ . decodeStrict $ metaSchemaBytes checkSchema :: Schema -> [ValidatorFailure]
examples/Simple.hs view
@@ -3,20 +3,20 @@ import Protolude -import Data.Aeson (Value(..), decode, toJSON)-import qualified Data.ByteString.Lazy as LBS-import qualified Data.List.NonEmpty as NE-import Data.Maybe (fromMaybe)+import Data.Aeson (Value(..), decodeStrict, toJSON)+import qualified Data.ByteString as BS+import qualified Data.List.NonEmpty as NE+import Data.Maybe (fromMaybe) -import qualified JSONSchema.Draft4 as D4+import qualified JSONSchema.Draft4 as D4 badData :: Value badData = toJSON [True, True] example :: IO () example = do- bts <- LBS.readFile "./examples/json/unique.json"- let schema = fromMaybe (panic "Invalid schema JSON.") (decode bts)+ bts <- BS.readFile "./examples/json/unique.json"+ let schema = fromMaybe (panic "Invalid schema JSON.") (decodeStrict bts) schemaWithURI = D4.SchemaWithURI schema Nothing -- This would be the URI of the schema
hjsonschema.cabal view
@@ -1,5 +1,5 @@ name: hjsonschema-version: 1.4.0.0+version: 1.5.0.0 synopsis: JSON Schema library homepage: https://github.com/seagreen/hjsonschema license: MIT@@ -119,7 +119,7 @@ , vector -- directory-1.2.5 required for `listDirectory`:- , directory >= 1.2.5 && < 1.3+ , directory >= 1.2.5 && < 1.4 , hspec >= 2.2 && < 2.4 test-suite remote
src/JSONSchema/Draft4/Failure.hs view
@@ -4,7 +4,7 @@ import Import import JSONSchema.Draft4.Schema (Schema)-import qualified JSONSchema.Validator.Draft4 as D4+import qualified JSONSchema.Validator.Draft4 as VAL -- | Used to report an entire instance being invalidated, as opposed -- to the failure of a single validator.@@ -15,33 +15,33 @@ } deriving (Eq, Show) data ValidatorFailure- = FailureMultipleOf D4.MultipleOfInvalid- | FailureMaximum D4.MaximumInvalid- | FailureMinimum D4.MinimumInvalid+ = FailureMultipleOf VAL.MultipleOfInvalid+ | FailureMaximum VAL.MaximumInvalid+ | FailureMinimum VAL.MinimumInvalid - | FailureMaxLength D4.MaxLengthInvalid- | FailureMinLength D4.MinLengthInvalid- | FailurePattern D4.PatternInvalid+ | FailureMaxLength VAL.MaxLengthInvalid+ | FailureMinLength VAL.MinLengthInvalid+ | FailurePattern VAL.PatternInvalid - | FailureMaxItems D4.MaxItemsInvalid- | FailureMinItems D4.MinItemsInvalid- | FailureUniqueItems D4.UniqueItemsInvalid- | FailureItems (D4.ItemsInvalid ValidatorFailure)- | FailureAdditionalItems (D4.AdditionalItemsInvalid ValidatorFailure)+ | FailureMaxItems VAL.MaxItemsInvalid+ | FailureMinItems VAL.MinItemsInvalid+ | FailureUniqueItems VAL.UniqueItemsInvalid+ | FailureItems (VAL.ItemsInvalid ValidatorFailure)+ | FailureAdditionalItems (VAL.AdditionalItemsInvalid ValidatorFailure) - | FailureMaxProperties D4.MaxPropertiesInvalid- | FailureMinProperties D4.MinPropertiesInvalid- | FailureRequired ()- | FailureDependencies (D4.DependenciesInvalid ValidatorFailure)- | FailurePropertiesRelated (D4.PropertiesRelatedInvalid ValidatorFailure)+ | FailureMaxProperties VAL.MaxPropertiesInvalid+ | FailureMinProperties VAL.MinPropertiesInvalid+ | FailureRequired VAL.RequiredInvalid+ | FailureDependencies (VAL.DependenciesInvalid ValidatorFailure)+ | FailurePropertiesRelated (VAL.PropertiesRelatedInvalid ValidatorFailure) - | FailureRef (D4.RefInvalid ValidatorFailure)- | FailureEnum D4.EnumInvalid- | FailureType D4.TypeValidatorInvalid- | FailureAllOf (D4.AllOfInvalid ValidatorFailure)- | FailureAnyOf (D4.AnyOfInvalid ValidatorFailure)- | FailureOneOf (D4.OneOfInvalid ValidatorFailure)- | FailureNot D4.NotValidatorInvalid+ | FailureRef (VAL.RefInvalid ValidatorFailure)+ | FailureEnum VAL.EnumInvalid+ | FailureType VAL.TypeValidatorInvalid+ | FailureAllOf (VAL.AllOfInvalid ValidatorFailure)+ | FailureAnyOf (VAL.AnyOfInvalid ValidatorFailure)+ | FailureOneOf (VAL.OneOfInvalid ValidatorFailure)+ | FailureNot VAL.NotValidatorInvalid deriving (Eq, Show) -- | A description of why a schema (or one of its reference) is itself
src/JSONSchema/Validator/Draft4.hs view
@@ -111,7 +111,7 @@ MinPropertiesInvalid minPropertiesValidator = Validator noEmbedded (run minPropertiesVal) -requiredValidator :: Validator a (Maybe Required) ()+requiredValidator :: Validator a (Maybe Required) RequiredInvalid requiredValidator = Validator noEmbedded (run requiredVal) dependenciesValidator
src/JSONSchema/Validator/Draft4/Object.hs view
@@ -9,7 +9,7 @@ import qualified Data.HashMap.Strict as HM import qualified Data.List.NonEmpty as NE import Data.Set (Set)-import qualified Data.Set as S+import qualified Data.Set as Set import qualified Data.Text as T import JSONSchema.Validator.Draft4.Object.Properties@@ -88,19 +88,26 @@ arbitrary = do x <- arbitraryText -- Guarantee at least one element. xs <- (fmap.fmap) T.pack arbitrary- pure . Required . S.fromList $ x:xs+ pure . Required . Set.fromList $ x:xs -requiredVal :: Required -> HashMap Text Value -> Maybe ()-requiredVal (Required ts) x+data RequiredInvalid+ = RequiredInvalid Required (Set Text) (HashMap Text Value)+ deriving (Eq, Show)++requiredVal :: Required -> HashMap Text Value -> Maybe RequiredInvalid+requiredVal r@(Required ts) x -- NOTE: When we no longer need to support GHCs before 7.10 -- we can use null from Prelude throughout the library -- instead of specialized versions.- | S.null ts = Nothing- | HM.null (HM.difference hm x) = Nothing- | otherwise = Just () -- TODO+ | Set.null ts = Nothing+ | Set.null leftovers = Nothing+ | otherwise = Just (RequiredInvalid r leftovers x) where- hm :: HashMap Text Bool- hm = foldl (\b a -> HM.insert a True b) mempty ts+ leftovers :: Set Text+ leftovers =+ Set.difference -- Items of the first set not in the second.+ ts+ (Set.fromList (HM.keys x)) -------------------------------------------------- -- * dependencies
@@ -3,15 +3,15 @@ import Protolude -import Control.Monad (fail)+import Control.Monad (fail) import Data.Aeson-import Data.Aeson.TH-import qualified Data.ByteString.Lazy as LBS-import Data.Char (toLower)-import Data.List (stripPrefix, unlines)-import qualified Data.Text as T-import qualified System.Directory as SD-import System.FilePath ((</>))+import Data.Aeson.TH (fieldLabelModifier)+import qualified Data.ByteString as BS+import Data.Char (toLower)+import Data.List (stripPrefix, unlines)+import qualified Data.Text as T+import qualified System.Directory as SD+import System.FilePath ((</>)) import Test.Hspec -- Recursively return the contents of a directory@@ -86,8 +86,8 @@ fileToCases :: FilePath -> IO [SchemaTest] fileToCases name = do let fullPath = dir </> name- jsonBS <- LBS.readFile fullPath- case eitherDecode jsonBS of+ jsonBS <- BS.readFile fullPath+ case eitherDecodeStrict jsonBS of Left e -> fail $ "couldn't parse file '" <> fullPath <> "': " <> e Right schemaTests -> pure $ prependFileName name <$> schemaTests