    /**
     * @author Ed Spencer
     * @class Ext.data.validations
     * @extends Object
     *
     * <p>This singleton contains a set of validation functions that can be used to validate any type
     * of data. They are most often used in {@link Ext.data.Model Models}, where they are automatically
     * set up and executed.</p>
     */
    Ext.define('Ext.data.validations', {
        singleton: true,

        /**
         * The default error message used when a presence validation fails
         * @property presenceMessage
         * @type String
         */
        presenceMessage: 'must be present',

        /**
         * The default error message used when a length validation fails
         * @property lengthMessage
         * @type String
         */
        lengthMessage: 'is the wrong length',

        /**
         * The default error message used when a format validation fails
         * @property formatMessage
         * @type Boolean
         */
        formatMessage: 'is the wrong format',

        /**
         * The default error message used when an inclusion validation fails
         * @property inclusionMessage
         * @type String
         */
        inclusionMessage: 'is not included in the list of acceptable values',

        /**
         * The default error message used when an exclusion validation fails
         * @property exclusionMessage
         * @type String
         */
        exclusionMessage: 'is not an acceptable value',

        /**
         * Validates that the given value is present
         * @param {Object} config Optional config object
         * @param {Mixed} value The value to validate
         * @return {Boolean} True if validation passed
         */
        presence: function(config, value) {
            if (value === undefined) {
                value = config;
            }

            return !!value;
        },

        /**
         * Returns true if the given value is between the configured min and max values
         * @param {Object} config Optional config object
         * @param {String} value The value to validate
         * @return {Boolean} True if the value passes validation
         */
        length: function(config, value) {
            if (value === undefined) {
                return false;
            }

            var length = value.length,
                min    = config.min,
                max    = config.max;

            if ((min && length < min) || (max && length > max)) {
                return false;
            } else {
                return true;
            }
        },

        /**
         * Returns true if the given value passes validation against the configured {@link #matcher} regex
         * @param {Object} config Optional config object
         * @param {String} value The value to validate
         * @return {Boolean} True if the value passes the format validation
         */
        format: function(config, value) {
            return !!(config.matcher && config.matcher.test(value));
        },

        /**
         * Validates that the given value is present in the configured {@link #list}
         * @param {String} value The value to validate
         * @return {Boolean} True if the value is present in the list
         */
        inclusion: function(config, value) {
            return config.list && Ext.Array.indexOf(config.list,value) != -1;
        },

        /**
         * Validates that the given value is present in the configured {@link #list}
         * @param {Object} config Optional config object
         * @param {String} value The value to validate
         * @return {Boolean} True if the value is not present in the list
         */
        exclusion: function(config, value) {
            return config.list && Ext.Array.indexOf(config.list,value) == -1;
        }
    });