X-Git-Url: http://nitlanguage.org diff --git a/lib/popcorn/pop_validation.nit b/lib/popcorn/pop_validation.nit index e95e517..c3eee92 100644 --- a/lib/popcorn/pop_validation.nit +++ b/lib/popcorn/pop_validation.nit @@ -24,6 +24,7 @@ # # ~~~ # import popcorn +# import popcorn::pop_json # import serialization # # # Serializable book representation. @@ -516,6 +517,52 @@ class FloatField end end +# Check if a field is a Bool +# +# ~~~ +# var validator = new ObjectValidator +# validator.add new BoolField("field", required=false) +# assert validator.validate("""{}""") +# assert validator.validate("""{ "field": true }""") +# assert validator.validate("""{ "field": false }""") +# assert not validator.validate("""{ "field": "foo" }""") +# +# validator = new ObjectValidator +# validator.add new BoolField("field") +# assert not validator.validate("""{}""") +# assert validator.validate("""{ "field": true }""") +# assert validator.validate("""{ "field": false }""") +# assert not validator.validate("""{ "field": "foo" }""") +# ~~~ +# +# No type conversion is applied on the input value: +# ~~~ +# assert not validator.validate("""{ "field": "true" }""") +# assert not validator.validate("""{ "field": 1 }""") +# assert not validator.validate("""{ "field": [true] }""") +# ~~~ +class BoolField + super RequiredField + + redef fun validate_field(v, obj) do + if not super then return false + var val = obj.get_or_null(field) + if val == null then + if required == null or required == true then + v.validation.add_error(field, "Expected Bool got `null`") + return false + else + return true + end + end + if not val isa Bool then + v.validation.add_error(field, "Expected Bool got `{val.class_name}`") + return false + end + return true + end +end + # Check that a field is a JsonObject # # ~~~