--- /dev/null
+/**
+ * @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;
+ }
+});
\ No newline at end of file