func Op(o Operation, field string, vleft ...interface{}) Ruler {
	if len(vleft) > 1 {
		panic("Op accept only zero or one val")
	}
	var val reflect.Value
	if len(vleft) == 1 {
		val = reflect.Indirect(reflect.ValueOf(vleft[0]))
		if val.IsValid() && val.Kind() == reflect.Interface {
			val = val.Elem()
		}
	}
	return &op{
		field:  field,
		vright: val,
		op:     o,
	}
}
func Op(o Operation, field string, vleft ...interface{}) Ruler {
	if len(vleft) > 1 {
		panic("Op accept only zero or one val")
	}
	var val reflect.Value
	if len(vleft) == 1 {
		val = reflect.Indirect(reflect.ValueOf(vleft[0]))
		if val.IsValid() && val.Kind() == reflect.Interface {
			val = val.Elem()
		}
	}
	return &op{
		field:  field,
		vright: val,
		op:     o,
	}
}
// Op is an operation in some field and with some value.