Este paquete fue creado inspirándose en el go-ruler de Thomas para ejecutar un conjunto simple de reglas contra una entidad.
Esta versión incluye un par de características más que incluyen compuestos AND y OR y la capacidad de agregar comparadores personalizados.
Nota : Este paquete solo compara dos tipos: string
y float64
, esto funciona muy bien con encoding/json
.
// Create a new instance of an engine with some default comparators
e , err := NewJSONEngine ( json . RawMessage ( `{"composites":[{"operator":"or","rules":[{"comparator":"always-false","path":"user.name","value":"Trevor"},{"comparator":"eq","path":"user.name","value":"Trevor"}]}]}` ))
if err != nil {
panic ( err )
}
// Add a new, custom comparator
e = e . AddComparator ( "always-false" , func ( a , b interface {}) bool {
return false
})
// Give some properties, this map can be deeper and supports interfaces
props := map [ string ] interface {}{
"user" : map [ string ] interface {}{
"name" : "Trevor" ,
}
}
// Run the engine on the props
res := e . Evaluate ( props )
// res == true
eq
devolverá verdadero si a == b
neq
devolverá verdadero si a != b
lt
verdadero si a < b
lte
devolverá verdadero si a <= b
gt
devolverá verdadero si a > b
gte
devolverá verdadero si a >= b
contains
devolverá verdadero si a
contiene b
ncontains
devolverá verdadero si a
no contiene b
oneof
devolverá verdadero si a
es uno de b
noneof
devolverá verdadero si a
no es uno de b
regex
devolverá verdadero si a
coincide con b
contains
y ncontains
trabajo para comparaciones de subcadenas, así como comparaciones de elementos de la colección.
Cuando se utiliza para comparaciones de elementos de una colección, contains
espera que el primer argumento sea una porción. contains
es diferente de oneof
en que oneof
espera que el segundo argumento sea un segmento.
Punto de referencia | norte | Velocidad | Usado | Asignaciones |
---|---|---|---|---|
Punto de referenciaEqual-12 | 650602549 | 5,52 ns/op. | 0 B/op. | 0 asignaciones/operación |
Punto de referenciaNotEqual-12 | 876894124 | 4,09 ns/op | 0 B/op. | 0 asignaciones/operación |
Punto de referencia inferior a 12 | 1000000000 | 2,84 ns/op. | 0 B/op. | 0 asignaciones/operación |
Punto de referencia menor que igual-12 | 1000000000 | 2,57 ns/operación | 0 B/op. | 0 asignaciones/operación |
Punto de referencia mayor que 12 | 1000000000 | 2,07 ns/op | 0 B/op. | 0 asignaciones/operación |
Punto de referencia mayor que igual-12 | 1000000000 | 2,86 ns/operación | 0 B/op. | 0 asignaciones/operación |
Punto de referenciaRegex-12 | 4524237 | 793 ns/op | 753 b/op. | 11 asignaciones/operación |
Punto de referenciaRegexPhone-12 | 1000000 | 3338 ns/operativo | 3199 B/op. | 30 asignaciones/operación |
Punto de referencia contiene-12 | 499627219 | 7,16 ns/operativo | 0 B/op. | 0 asignaciones/operación |
BenchmarkStringContiene-12 | 405497102 | 8,87 ns/op | 0 B/op. | 0 asignaciones/operación |
Punto de referenciaContieneLong50000-12 | 18992 | 184016 ns/operativo | 0 B/op. | 0 asignaciones/operación |
Punto de referenciaNo contiene-12 | 292932907 | 12,3 ns/operativo | 0 B/op. | 0 asignaciones/operación |
BenchmarkStringNotContains-12 | 392618857 | 9,14 ns/operativo | 0 B/op. | 0 asignaciones/operación |
Punto de referenciaNotContainsLong50000-12 | 19243 | 191787 ns/op. | 0 B/op. | 0 asignaciones/operación |
Punto de referencia uno de 12 | 1000000000 | 1,80 ns/operación | 0 B/op. | 0 asignaciones/operación |
Punto de referenciaNingunoDe-12 | 1000000000 | 1,79 ns/operación | 0 B/op. | 0 asignaciones/operación |
Punto de referenciaPluckShallow-12 | 85997188 | 41,6 ns/operativo | 16 b/op. | 1 asignaciones/operación |
Punto de referenciaPluckDeep-12 | 18789103 | 194 ns/op | 112 b/op. | 1 asignaciones/operación |
BenchmarkRule_evaluate-12 | 69558996 | 51,1 ns/operativo | 16 b/op. | 1 asignaciones/operación |
BenchmarkComposite_evaluate-12 | 59484760 | 55,7 ns/operativo | 16 b/op. | 1 asignaciones/operación |
BenchmarkEngine_Evaluate-12 | 47892318 | 75,0 ns/operativo | 16 b/op. | 1 asignaciones/operación |
Para ejecutar pruebas comparativas:
go test -run none -bench . -benchtime 3s -benchmem
Todos los puntos de referencia se ejecutaron en:
MacOS High Sierra 2,6 Ghz Intel Core i7 16 GB 2400 MHz DDR4
Copyright © 2019 Trevor Hutto
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este trabajo excepto de conformidad con la Licencia. Puede obtener una copia de la Licencia en el archivo LICENCIA, o en:
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones de la Licencia.