Fix the dependency issue (#231)

This commit is contained in:
Robbie Zhang
2018-06-21 12:09:42 -07:00
committed by GitHub
parent 027b76651d
commit 6ec1098bb8
16629 changed files with 74837 additions and 4975021 deletions

View File

@@ -1 +0,0 @@
*.sw[nop]

View File

@@ -1,7 +0,0 @@
language: go
go:
- 1.3
before_install:
- go get github.com/sigu-399/gojsonreference
- go get github.com/sigu-399/gojsonpointer
- go get github.com/stretchr/testify/assert

View File

@@ -1,257 +0,0 @@
[![Build Status](https://travis-ci.org/xeipuuv/gojsonschema.svg)](https://travis-ci.org/xeipuuv/gojsonschema)
# gojsonschema
## Description
An implementation of JSON Schema, based on IETF's draft v4 - Go language
References :
* http://json-schema.org
* http://json-schema.org/latest/json-schema-core.html
* http://json-schema.org/latest/json-schema-validation.html
## Installation
```
go get github.com/xeipuuv/gojsonschema
```
Dependencies :
* [github.com/xeipuuv/gojsonpointer](https://github.com/xeipuuv/gojsonpointer)
* [github.com/xeipuuv/gojsonreference](https://github.com/xeipuuv/gojsonreference)
* [github.com/stretchr/testify/assert](https://github.com/stretchr/testify#assert-package)
## Usage
### Example
```go
package main
import (
"fmt"
"github.com/xeipuuv/gojsonschema"
)
func main() {
schemaLoader := gojsonschema.NewReferenceLoader("file:///home/me/schema.json")
documentLoader := gojsonschema.NewReferenceLoader("file:///home/me/document.json")
result, err := gojsonschema.Validate(schemaLoader, documentLoader)
if err != nil {
panic(err.Error())
}
if result.Valid() {
fmt.Printf("The document is valid\n")
} else {
fmt.Printf("The document is not valid. see errors :\n")
for _, desc := range result.Errors() {
fmt.Printf("- %s\n", desc)
}
}
}
```
#### Loaders
There are various ways to load your JSON data.
In order to load your schemas and documents,
first declare an appropriate loader :
* Web / HTTP, using a reference :
```go
loader := gojsonschema.NewReferenceLoader("http://www.some_host.com/schema.json")
```
* Local file, using a reference :
```go
loader := gojsonschema.NewReferenceLoader("file:///home/me/schema.json")
```
References use the URI scheme, the prefix (file://) and a full path to the file are required.
* JSON strings :
```go
loader := gojsonschema.NewStringLoader(`{"type": "string"}`)
```
* Custom Go types :
```go
m := map[string]interface{}{"type": "string"}
loader := gojsonschema.NewGoLoader(m)
```
And
```go
type Root struct {
Users []User `json:"users"`
}
type User struct {
Name string `json:"name"`
}
...
data := Root{}
data.Users = append(data.Users, User{"John"})
data.Users = append(data.Users, User{"Sophia"})
data.Users = append(data.Users, User{"Bill"})
loader := gojsonschema.NewGoLoader(data)
```
#### Validation
Once the loaders are set, validation is easy :
```go
result, err := gojsonschema.Validate(schemaLoader, documentLoader)
```
Alternatively, you might want to load a schema only once and process to multiple validations :
```go
schema, err := gojsonschema.NewSchema(schemaLoader)
...
result1, err := schema.Validate(documentLoader1)
...
result2, err := schema.Validate(documentLoader2)
...
// etc ...
```
To check the result :
```go
if result.Valid() {
fmt.Printf("The document is valid\n")
} else {
fmt.Printf("The document is not valid. see errors :\n")
for _, err := range result.Errors() {
// Err implements the ResultError interface
fmt.Printf("- %s\n", err)
}
}
```
## Working with Errors
The library handles string error codes which you can customize by creating your own gojsonschema.locale and setting it
```go
gojsonschema.Locale = YourCustomLocale{}
```
However, each error contains additional contextual information.
**err.Type()**: *string* Returns the "type" of error that occurred. Note you can also type check. See below
Note: An error of RequiredType has an err.Type() return value of "required"
"required": RequiredError
"invalid_type": InvalidTypeError
"number_any_of": NumberAnyOfError
"number_one_of": NumberOneOfError
"number_all_of": NumberAllOfError
"number_not": NumberNotError
"missing_dependency": MissingDependencyError
"internal": InternalError
"enum": EnumError
"array_no_additional_items": ArrayNoAdditionalItemsError
"array_min_items": ArrayMinItemsError
"array_max_items": ArrayMaxItemsError
"unique": ItemsMustBeUniqueError
"array_min_properties": ArrayMinPropertiesError
"array_max_properties": ArrayMaxPropertiesError
"additional_property_not_allowed": AdditionalPropertyNotAllowedError
"invalid_property_pattern": InvalidPropertyPatternError
"string_gte": StringLengthGTEError
"string_lte": StringLengthLTEError
"pattern": DoesNotMatchPatternError
"multiple_of": MultipleOfError
"number_gte": NumberGTEError
"number_gt": NumberGTError
"number_lte": NumberLTEError
"number_lt": NumberLTError
**err.Value()**: *interface{}* Returns the value given
**err.Context()**: *gojsonschema.jsonContext* Returns the context. This has a String() method that will print something like this: (root).firstName
**err.Field()**: *string* Returns the fieldname in the format firstName, or for embedded properties, person.firstName. This returns the same as the String() method on *err.Context()* but removes the (root). prefix.
**err.Description()**: *string* The error description. This is based on the locale you are using. See the beginning of this section for overwriting the locale with a custom implementation.
**err.Details()**: *gojsonschema.ErrorDetails* Returns a map[string]interface{} of additional error details specific to the error. For example, GTE errors will have a "min" value, LTE will have a "max" value. See errors.go for a full description of all the error details. Every error always contains a "field" key that holds the value of *err.Field()*
Note in most cases, the err.Details() will be used to generate replacement strings in your locales, and not used directly. These strings follow the text/template format i.e.
```
{{.field}} must be greater than or equal to {{.min}}
```
The library allows you to specify custom template functions, should you require more complex error message handling.
```go
gojsonschema.ErrorTemplateFuncs = map[string]interface{}{
"allcaps": func(s string) string {
return strings.ToUpper(s)
},
}
```
Given the above definition, you can use the custom function `"allcaps"` in your localization templates:
```
{{allcaps .field}} must be greater than or equal to {{.min}}
```
The above error message would then be rendered with the `field` value in capital letters. For example:
```
"PASSWORD must be greater than or equal to 8"
```
Learn more about what types of template functions you can use in `ErrorTemplateFuncs` by referring to Go's [text/template FuncMap](https://golang.org/pkg/text/template/#FuncMap) type.
## Formats
JSON Schema allows for optional "format" property to validate strings against well-known formats. gojsonschema ships with all of the formats defined in the spec that you can use like this:
````json
{"type": "string", "format": "email"}
````
Available formats: date-time, hostname, email, ipv4, ipv6, uri, uri-reference.
For repetitive or more complex formats, you can create custom format checkers and add them to gojsonschema like this:
```go
// Define the format checker
type RoleFormatChecker struct {}
// Ensure it meets the gojsonschema.FormatChecker interface
func (f RoleFormatChecker) IsFormat(input string) bool {
return strings.HasPrefix("ROLE_", input)
}
// Add it to the library
gojsonschema.FormatCheckers.Add("role", RoleFormatChecker{})
````
Now to use in your json schema:
````json
{"type": "string", "format": "role"}
````
## Uses
gojsonschema uses the following test suite :
https://github.com/json-schema/JSON-Schema-Test-Suite

View File

@@ -1,23 +0,0 @@
package gojsonschema
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestUUIDFormatCheckerIsFormat(t *testing.T) {
checker := UUIDFormatChecker{}
assert.True(t, checker.IsFormat("01234567-89ab-cdef-0123-456789abcdef"))
assert.True(t, checker.IsFormat("f1234567-89ab-cdef-0123-456789abcdef"))
assert.False(t, checker.IsFormat("not-a-uuid"))
assert.False(t, checker.IsFormat("g1234567-89ab-cdef-0123-456789abcdef"))
}
func TestURIReferenceFormatCheckerIsFormat(t *testing.T) {
checker := URIReferenceFormatChecker{}
assert.True(t, checker.IsFormat("relative"))
assert.True(t, checker.IsFormat("https://dummyhost.com/dummy-path?dummy-qp-name=dummy-qp-value"))
}

View File

@@ -1,12 +0,0 @@
package: github.com/xeipuuv/gojsonschema
license: Apache 2.0
import:
- package: github.com/xeipuuv/gojsonschema
- package: github.com/xeipuuv/gojsonpointer
- package: github.com/xeipuuv/gojsonreference
- package: github.com/stretchr/testify/assert
version: ^1.1.3

View File

@@ -1 +0,0 @@
[null,2,3,4]

View File

@@ -1 +0,0 @@
[null,2,3,"foo"]

View File

@@ -1 +0,0 @@
[1,2,3,4,5]

View File

@@ -1 +0,0 @@
[1,2,3,4,5]

View File

@@ -1 +0,0 @@
{"foo":"bar"}

View File

@@ -1 +0,0 @@
[1,"foo",false]

View File

@@ -1 +0,0 @@
{"additionalItems":{"type":"integer"},"items":[{}]}

View File

@@ -1 +0,0 @@
{"additionalItems":false,"items":{}}

View File

@@ -1 +0,0 @@
{"additionalItems":false,"items":[{},{},{}]}

View File

@@ -1 +0,0 @@
{"additionalItems":false}

View File

@@ -1 +0,0 @@
{"items":[{"type":"integer"}]}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1,"quux":"boom"}

View File

@@ -1 +0,0 @@
{"foo":1, "vroom": 2}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1,"quux":true}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1,"quux":12}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1,"quux":true}

View File

@@ -1 +0,0 @@
{"additionalProperties":false,"properties":{"bar":{},"foo":{}},"patternProperties": { "^v": {} }}

View File

@@ -1 +0,0 @@
{"additionalProperties":{"type":"boolean"},"properties":{"bar":{},"foo":{}}}

View File

@@ -1 +0,0 @@
{"properties":{"bar":{},"foo":{}}}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":"baz"}

View File

@@ -1 +0,0 @@
{"foo":"baz"}

View File

@@ -1 +0,0 @@
{"bar":2}

View File

@@ -1 +0,0 @@
{"bar":"quux","foo":"baz"}

View File

@@ -1 +0,0 @@
{"bar":2,"baz":null,"foo":"quux"}

View File

@@ -1 +0,0 @@
{"baz":null,"foo":"quux"}

View File

@@ -1 +0,0 @@
{"bar":2,"baz":null}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":"quux"}

View File

@@ -1 +0,0 @@
{"bar":2}

View File

@@ -1 +0,0 @@
{"allOf":[{"properties":{"bar":{"type":"integer"}},"required":["bar"]},{"properties":{"foo":{"type":"string"}},"required":["foo"]}]}

View File

@@ -1 +0,0 @@
{"allOf":[{"properties":{"foo":{"type":"string"}},"required":["foo"]},{"properties":{"baz":{"type":"null"}},"required":["baz"]}],"properties":{"bar":{"type":"integer"}},"required":["bar"]}

View File

@@ -1 +0,0 @@
{"allOf":[{"maximum":30},{"minimum":20}]}

View File

@@ -1 +0,0 @@
"foobar"

View File

@@ -1 +0,0 @@
"foo"

View File

@@ -1 +0,0 @@
{"anyOf":[{"type":"integer"},{"minimum":2}]}

View File

@@ -1 +0,0 @@
{"anyOf":[{"maxLength":2},{"minLength":4}],"type":"string"}

View File

@@ -1 +0,0 @@
{"definitions":{"foo":{"type":"integer"}}}

View File

@@ -1 +0,0 @@
{"definitions":{"foo":{"type":1}}}

View File

@@ -1 +0,0 @@
{"$ref":"http://json-schema.org/draft-04/schema#"}

View File

@@ -1 +0,0 @@
{"$ref":"http://json-schema.org/draft-04/schema#"}

View File

@@ -1 +0,0 @@
{"foo":1}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1}

View File

@@ -1 +0,0 @@
{"bar":2}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1,"quux":3}

View File

@@ -1 +0,0 @@
{"foo":1,"quux":2}

View File

@@ -1 +0,0 @@
{"bar":1,"quux":2}

View File

@@ -1 +0,0 @@
{"quux":1}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":1}

View File

@@ -1 +0,0 @@
{"foo":"quux"}

View File

@@ -1 +0,0 @@
{"bar":2,"foo":"quux"}

View File

@@ -1 +0,0 @@
{"bar":"quux","foo":2}

View File

@@ -1 +0,0 @@
{"bar":"quux","foo":"quux"}

View File

@@ -1 +0,0 @@
{"dependencies":{"bar":["foo"]}}

View File

@@ -1 +0,0 @@
{"dependencies":{"quux":["foo","bar"]}}

View File

@@ -1 +0,0 @@
{"dependencies":{"bar":{"properties":{"bar":{"type":"integer"},"foo":{"type":"integer"}}}}}

View File

@@ -1 +0,0 @@
null

View File

@@ -1 +0,0 @@
{"foo":false}

View File

@@ -1 +0,0 @@
{"enum":[1,2,3]}

View File

@@ -1 +0,0 @@
{"enum":[6,"foo",[],true,{"foo":12}]}

View File

@@ -1 +0,0 @@
"test"

View File

@@ -1 +0,0 @@
"test@"

View File

@@ -1 +0,0 @@
"test@test.com"

View File

@@ -1 +0,0 @@
"AB-10105"

View File

@@ -1 +0,0 @@
"ABC10105"

View File

@@ -1 +0,0 @@
"05:15:37"

View File

@@ -1 +0,0 @@
"2015-05-13"

View File

@@ -1 +0,0 @@
"2015-6-31"

View File

@@ -1 +0,0 @@
"2015-01-30 19:08:06"

View File

@@ -1 +0,0 @@
"18:31:24-05:00"

View File

@@ -1 +0,0 @@
"2002-10-02T10:00:00-05:00"

View File

@@ -1 +0,0 @@
"2002-10-02T15:00:00Z"

View File

@@ -1 +0,0 @@
"2002-10-02T15:00:00.05Z"

View File

@@ -1 +0,0 @@
"example.com"

View File

@@ -1 +0,0 @@
"sub.example.com"

View File

@@ -1 +0,0 @@
"hello.co.uk"

View File

@@ -1 +0,0 @@
"http://example.com"

View File

@@ -1 +0,0 @@
"example_com"

Some files were not shown because too many files have changed in this diff Show More