popcorn :: ArrayValidator :: defaultinit
# Check a JsonArray
# ~~~
# var validator = new ArrayValidator
# assert not validator.validate("""{}""")
# assert validator.validate("""[]""")
# assert validator.validate("""[ "id", 10, {} ]""")
#
# validator = new ArrayValidator(allow_empty=false)
# assert not validator.validate("""[]""")
# assert validator.validate("""[ "id", 10, {} ]""")
#
# validator = new ArrayValidator(length=3)
# assert not validator.validate("""[]""")
# assert validator.validate("""[ "id", 10, {} ]""")
# ~~~
class ArrayValidator
super DocumentValidator
# Allow empty arrays (default: true)
var allow_empty: nullable Bool
# Check array length (default: no check)
var length: nullable Int
redef fun validate(document) do
super
var json = document.parse_json
if json == null then
validation.add_error("document", "Expected JsonArray got `null`")
return false
end
return validate_json(json)
end
# Validate a Serializable input
fun validate_json(json: Serializable): Bool do
if not json isa JsonArray then
validation.add_error("document", "Expected JsonArray got `{json.class_name}`")
return false
end
validation.array = json
var allow_empty = self.allow_empty
if json.is_empty and (allow_empty != null and not allow_empty) then
validation.add_error("document", "Cannot be empty")
return false
end
var length = self.length
if length != null and json.length != length then
validation.add_error("document", "Array length must be exactly `{length}`")
return false
end
return true
end
end
lib/popcorn/pop_validation.nit:214,1--268,3