Method: Validator::Validator#validate!

Defined in:
lib/opennebula/flow/validator.rb

#validate!(body, schema, key = "") ⇒ Hash, ...

Note:

The parameter body will be modified

Note:

Schema options supported :extends :type => [:object, :array, :string, :null]

Recursively validate and modify a JSON body based on a schema.

Examples:

Validate a User

schema = {
    :type => :object,
    :properties => {
        'username' => {
            :type => :string
        }
    }
}

hash = {
    'username' => 'pepe'
}

Validator.validate!(hash, schema)
#=> {'username' => 'pepe'}

Parameters:

  • body (Hash, Array, String, nil)

    JSON represented as Ruby objects

  • schema (Hash)

    that will be used to validate

  • key (String) (defaults to: "")

    of the body that will be validated in this step

Returns:

  • (Hash, Array, String, nil)

    The modified body

Raises:

See Also:



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/opennebula/flow/validator.rb', line 115

def validate!(body, schema, key="")
    if schema[:extends]
        base_schema = schema.delete(:extends)
        schema      = base_schema.deep_merge(schema)
    end

    case schema[:type]
    when :object  then validate_object(body, schema, key)
    when :array   then validate_array(body, schema, key)
    when :string  then validate_string(body, schema, key)
    when :integer then validate_integer(body, schema, key)
    when :null    then validate_null(body, schema, key)
    when :boolean then validate_boolean(body, schema, key)
    else raise SchemaException, "type #{schema[:type]} is not a valid type"
    end
end