def auto_generate_validations(property)
        return unless ((property.autovalidation_check != true) && self.auto_validation)
        return if (property.options && (property.options.has_key?(:auto_validation) && !property.options[:auto_validation]) || property.read_only)
        
        opts = {}
        opts[:context] = property.options[:validates] if property.options.has_key?(:validates)
        
        if opts[:allow_nil] == false
          
          validates_present property.name, options_with_message(opts, property, :presence)
        end
        
        if property.type == "String"
          
          
          len = property.options.fetch(:length, property.options.fetch(:size, 52))
          if len.is_a?(Range)
            opts[:within] = len
          else
            opts[:maximum] = len
          end
          
          validates_length property.name, options_with_message(opts, property, :length)
        end
        
        if property.options.has_key?(:format)
          opts[:with] = property.options[:format]
          
          validates_format property.name, options_with_message(opts, property, :format)
        end
        
        if property.options.has_key?(:unique)
          value = property.options[:unique]
          if value.is_a?(Array) || value.is_a?(Symbol)
            
            validates_is_unique property.name, options_with_message({:scope => Array(value)}, property, :is_unique)
          elsif value.is_a?(TrueClass)
            
            validates_is_unique property.name, options_with_message({}, property, :is_unique)
          end
        end
        
        if property.options.has_key?(:set)
          validates_within property.name, options_with_message({:set => property.options[:set]}, property, :within)
        end
        
        if "Integer" == property.type
          opts[:integer_only] = true
          
          validates_is_number property.name, options_with_message(opts, property, :is_number)
        elsif Float == property.type
          opts[:precision] = property.precision
          opts[:scale]     = property.scale
          
          validates_is_number property.name, options_with_message(opts, property, :is_number)
        end
        
        
        property.autovalidation_check = true
        
      end