Documentation ¶
Overview ¶
Example (AddMemberToGroup) ¶
The following example shows how to add a member to a group.
operation := `{ "op": "add", "path": "members", "value": { "display": "di-wu", "$ref": "https://example.com/v2/Users/0001", "value": "0001" } }` validator, _ := NewValidator(operation, schema.CoreGroupSchema()) fmt.Println(validator.Validate())
Output: [map[$ref:https://example.com/v2/Users/0001 display:di-wu value:0001]] <nil>
Example (AddWithoutPath) ¶
The following example shows how to add one or more attributes to a User resource without using a "path" attribute.
operation := `{ "op": "add", "value": { "emails": [ { "value": "quint@elimity.com", "type": "work" } ], "nickname": "di-wu" } }` validator, _ := NewValidator(operation, schema.CoreUserSchema()) fmt.Println(validator.Validate())
Output: map[emails:[map[type:work value:quint@elimity.com]] nickname:di-wu] <nil>
Example (RemoveAllMembers) ¶
The following example shows how remove all members of a group.
operation := `{ "op": "remove", "path": "members" }` validator, _ := NewValidator(operation, schema.CoreGroupSchema()) fmt.Println(validator.Validate())
Output: <nil> <nil>
Example (RemoveComplexMultiValuedAttributeValue) ¶
The following example shows how remove a value from a complex multi-valued attribute.
operation := `{ "op": "remove", "path": "emails[type eq \"work\" and value ew \"elimity.com\"]" }` validator, _ := NewValidator(operation, schema.CoreUserSchema()) fmt.Println(validator.Validate())
Output: <nil> <nil>
Example (RemoveSingleMember) ¶
The following example shows how remove a single member from a group.
operation := `{ "op": "remove", "path": "members[value eq \"0001\"]" }` validator, _ := NewValidator(operation, schema.CoreGroupSchema()) fmt.Println(validator.Validate())
Output: <nil> <nil>
Example (ReplaceAllMembers) ¶
The following example shows how to replace all of the members of a group with a different members list.
operations := []string{`{ "op": "remove", "path": "members" }`, `{ "op": "add", "path": "members", "value": [ { "display": "di-wu", "$ref": "https://example.com/v2/Users/0001", "value": "0001" }, { "display": "example", "$ref": "https://example.com/v2/Users/0002", "value": "0002" } ] }`, } for _, op := range operations { validator, _ := NewValidator(op, schema.CoreGroupSchema()) fmt.Println(validator.Validate()) }
Output: <nil> <nil> [map[$ref:https://example.com/v2/Users/0001 display:di-wu value:0001] map[$ref:https://example.com/v2/Users/0002 display:example value:0002]] <nil>
Example (ReplaceAnyAttribute) ¶
The following example shows how to replace all values of one or more specific attributes.
operation := `{ "op": "replace", "value": { "emails": [ { "value": "quint", "type": "work", "primary": true }, { "value": "me@di-wu.be", "type": "home" } ], "nickname": "di-wu" } }` validator, _ := NewValidator(operation, schema.CoreUserSchema()) fmt.Println(validator.Validate())
Output: map[emails:[map[primary:true type:work value:quint] map[type:home value:me@di-wu.be]] nickname:di-wu] <nil>
Example (ReplaceMembers) ¶
The following example shows how to replace all of the members of a group with a different members list in a single replace operation.
operations := []string{`{ "op": "replace", "path": "members", "value": [ { "display": "di-wu", "$ref": "https://example.com/v2/Users/0001", "value": "0001" }, { "display": "example", "$ref": "https://example.com/v2/Users/0002", "value": "0002" } ] }`, } for _, op := range operations { validator, _ := NewValidator(op, schema.CoreGroupSchema()) fmt.Println(validator.Validate()) }
Output: [map[$ref:https://example.com/v2/Users/0001 display:di-wu value:0001] map[$ref:https://example.com/v2/Users/0002 display:example value:0002]] <nil>
Example (ReplaceSpecificSubAttribute) ¶
The following example shows how to change a specific sub-attribute "streetAddress" of complex attribute "emails" selected by a "valuePath" filter.
operation := `{ "op": "replace", "path": "addresses[type eq \"work\"].streetAddress", "value": "ExampleStreet 100" }` validator, _ := NewValidator(operation, schema.CoreUserSchema()) fmt.Println(validator.Validate())
Output: ExampleStreet 100 <nil>
Example (ReplaceWorkAddress) ¶
The following example shows how to change a User's entire "work" address, using a "valuePath" filter.
operation := `{ "op": "replace", "path": "addresses[type eq \"work\"]", "value": { "type": "work", "streetAddress": "ExampleStreet 1", "locality": "ExampleCity", "postalCode": "0001", "country": "BE", "primary": true } }` validator, _ := NewValidator(operation, schema.CoreUserSchema()) fmt.Println(validator.Validate())
Output: [map[country:BE locality:ExampleCity postalCode:0001 streetAddress:ExampleStreet 1 type:work]] <nil>
Index ¶
Examples ¶
- Package (AddMemberToGroup)
- Package (AddWithoutPath)
- Package (RemoveAllMembers)
- Package (RemoveComplexMultiValuedAttributeValue)
- Package (RemoveSingleMember)
- Package (ReplaceAllMembers)
- Package (ReplaceAnyAttribute)
- Package (ReplaceMembers)
- Package (ReplaceSpecificSubAttribute)
- Package (ReplaceWorkAddress)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Op ¶
type Op string
Op represents the possible value the operation is to perform. Possible values are one of "add", "remove", or "replace".
const ( // OperationAdd is used to add a new attribute value to an existing resource. OperationAdd Op = "add" // OperationRemove removes the value at the target location specified by the required attribute "path". OperationRemove Op = "remove" // OperationReplace replaces the value at the target location specified by the "path". OperationReplace Op = "replace" )
type OperationValidator ¶
type OperationValidator struct { Op Op Path *filter.Path // contains filtered or unexported fields }
OperationValidator represents a validator to validate PATCH requests.
func NewValidator ¶
func NewValidator(patchReq string, s schema.Schema, extensions ...schema.Schema) (OperationValidator, error)
NewValidator creates an OperationValidator based on the given JSON string and reference schemas. Returns an error if patchReq is not valid.
func (OperationValidator) Validate ¶
func (v OperationValidator) Validate() (interface{}, error)
Validate validates the PATCH operation. Unknown attributes in complex values are ignored. The returned interface contains a (sanitised) version of given value based on the attribute it targets. Multi-valued attributes will always be returned wrapped in a slice, even if it is just one value that was defined within the operation.