Module: Devise::Models::Validatable

Defined in:
lib/devise/models/validatable.rb

Overview

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 its format is valid. Also tests presence of password, confirmation and length.

Options

Validatable adds the following options to devise_for:

* +email_regexp+: the regular expression used to validate e-mails;
* +password_length+: a range expressing password length. Defaults to 8..72.

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VALIDATIONS =

All validations used by this module.

[:validates_presence_of, :validates_uniqueness_of, :validates_format_of,
:validates_confirmation_of, :validates_length_of].freeze

Class Method Summary collapse

Class Method Details

.assert_validations_api!(base) ⇒ Object

:nodoc:



49
50
51
52
53
54
55
56
# File 'lib/devise/models/validatable.rb', line 49

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

.included(base) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/devise/models/validatable.rb', line 24

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

  base.class_eval do
    validates_presence_of   :email, if: :email_required?
    validates_format_of     :email, with: email_regexp, allow_blank: true, if: :email_changed?

    if base == Gemgento::User
      validates_uniqueness_of :email, allow_blank: true, if: :email_changed?, scope: :deleted_at
    else
      validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
    end


    validates_presence_of     :password, if: :password_required?
    validates_confirmation_of :password, if: :password_required?
    validates_length_of       :password, within: password_length, allow_blank: true

    def unique_email_scope
      []
    end
  end
end

.required_fields(klass) ⇒ Object



20
21
22
# File 'lib/devise/models/validatable.rb', line 20

def self.required_fields(klass)
  []
end