Sha256: 0dca4d654c52522a0896170a859f6d613bc7188e40717ef1029598825bca113a

Contents?: true

Size: 1.88 KB

Versions: 20

Compression:

Stored size: 1.88 KB

Contents

module Devise
  module Models

    # Validatable creates all needed validations for a user email and password.
    # It's optional, given you may want to create the validations by yourself.
    # Automatically validate if the email is present, unique and it's format is
    # valid. Also tests presence of password, confirmation and length
    module Validatable
      # All validations used by this module.
      VALIDATIONS = [ :validates_presence_of, :validates_uniqueness_of, :validates_format_of,
                      :validates_confirmation_of, :validates_length_of ].freeze

      def self.included(base)
        assert_validations_api!(base)

        base.class_eval do
          validates_presence_of   :email
          validates_uniqueness_of :email, :scope => authentication_keys[1..-1], :allow_blank => true
          validates_format_of     :email, :with  => EMAIL_REGEX, :allow_blank => true

          with_options :if => :password_required? do |v|
            v.validates_presence_of     :password
            v.validates_confirmation_of :password
            v.validates_length_of       :password, :within => 6..20, :allow_blank => true
          end
        end
      end

      def self.assert_validations_api!(base) #:nodoc:
        unavailable_validations = VALIDATIONS.select { |v| !base.respond_to?(v) }

        unless unavailable_validations.empty?
          raise "Could not use :validatable module since #{base} does not respond " <<
                "to the following methods: #{unavailable_validations.to_sentence}."
        end
      end

      protected

        # Checks whether a password is needed or not. For validations only.
        # Passwords are always required if it's a new record, or if the password
        # or confirmation are being set somewhere.
        def password_required?
          new_record? || !password.nil? || !password_confirmation.nil?
        end
    end
  end
end

Version data entries

20 entries across 20 versions & 3 rubygems

Version Path
mongoid-devise-1.0.1 lib/devise/models/validatable.rb
devise-1.0.4 lib/devise/models/validatable.rb
devise-1.1.pre4 lib/devise/models/validatable.rb
devise-1.1.pre3 lib/devise/models/validatable.rb
devise-1.0.3 lib/devise/models/validatable.rb
devise-1.1.pre2 lib/devise/models/validatable.rb
glennr-devise-1.0.1.1 lib/devise/models/validatable.rb
glennr-devise-1.0.1 lib/devise/models/validatable.rb
devise-1.0.2 lib/devise/models/validatable.rb
devise-1.1.pre lib/devise/models/validatable.rb
devise-1.0.1 lib/devise/models/validatable.rb
devise-1.0.0 lib/devise/models/validatable.rb
devise-0.9.2 lib/devise/models/validatable.rb
devise-0.9.1 lib/devise/models/validatable.rb
devise-0.9.0 lib/devise/models/validatable.rb
devise-0.8.2 lib/devise/models/validatable.rb
devise-0.8.1 lib/devise/models/validatable.rb
devise-0.8.0 lib/devise/models/validatable.rb
devise-0.7.5 lib/devise/models/validatable.rb
devise-0.7.4 lib/devise/models/validatable.rb