# module Devise::Schema

Holds devise schema information. To use it, just include its methods and overwrite the apply_schema method.

### Public Instance Methods

apply_devise_schema(name, type, options={}) click to toggle source

Overwrite with specific modification to create your own schema.

    # File lib/devise/schema.rb, line 105
    def apply_devise_schema(name, type, options={})
      raise NotImplementedError
    end

confirmable() click to toggle source

Creates confirmation_token, confirmed_at and confirmation_sent_at.

    # File lib/devise/schema.rb, line 37
    def confirmable
      apply_devise_schema :confirmation_token,   String
      apply_devise_schema :confirmed_at,         DateTime
      apply_devise_schema :confirmation_sent_at, DateTime
    end

database_authenticatable(options={}) click to toggle source

Creates encrypted_password, and email when it is used as an authentication key (default).

## Options

- :null - When true, allow columns to be null.

- :default - Set to “” when :null is false, unless overridden.

## Notes

For Datamapper compatibility, we explicitly hardcode the limit for the encrypter password field in 128 characters.

    # File lib/devise/schema.rb, line 16
    def database_authenticatable(options={})
      null    = options[:null] || false
      default = options.key?(:default) ? options[:default] : ("" if null == false)
      include_email = !respond_to?(:authentication_keys) || self.authentication_keys.include?(:email)

      apply_devise_schema :email,              String, :null => null, :default => default if include_email
      apply_devise_schema :encrypted_password, String, :null => null, :default => default, :limit => 128
    end

encryptable() click to toggle source

Creates password salt for encryption support when using encryptors other than the database_authenticable default of bcrypt.

    # File lib/devise/schema.rb, line 27
    def encryptable
      apply_devise_schema :password_salt, String
    end

lockable(options={}) click to toggle source

Creates failed_attempts, unlock_token and locked_at depending on the options given.

## Options

- :unlock_strategy - The strategy used for unlock. Can be :time, :email, :both (default), :none. If :email or :both, creates a unlock_token field.

- :lock_strategy - The strategy used for locking. Can be :failed_attempts (default) or :none.

    # File lib/devise/schema.rb, line 84
    def lockable(options={})
      unlock_strategy   = options[:unlock_strategy]
      unlock_strategy ||= self.unlock_strategy if respond_to?(:unlock_strategy)
      unlock_strategy ||= :both

      lock_strategy   = options[:lock_strategy]
      lock_strategy ||= self.lock_strategy if respond_to?(:lock_strategy)
      lock_strategy ||= :failed_attempts

      if lock_strategy == :failed_attempts
        apply_devise_schema :failed_attempts, Integer, :default => 0
      end

      if [:both, :email].include?(unlock_strategy)
        apply_devise_schema :unlock_token, String
      end

      apply_devise_schema :locked_at, DateTime
    end

reconfirmable() click to toggle source

Creates unconfirmed_email

    # File lib/devise/schema.rb, line 44
    def reconfirmable
      apply_devise_schema :unconfirmed_email,    String
    end

recoverable(options={}) click to toggle source

Creates reset_password_token and reset_password_sent_at.

## Options

- :reset_within - When true, adds a column that reset passwords within some date

    # File lib/devise/schema.rb, line 52
    def recoverable(options={})
      use_within = options.fetch(:reset_within, Devise.reset_password_within.present?)
      apply_devise_schema :reset_password_token, String
      apply_devise_schema :reset_password_sent_at, DateTime if use_within
    end

rememberable(options={}) click to toggle source

Creates remember_token and remember_created_at.

## Options

- :use_salt - When true, does not create a remember_token and use password_salt instead.

    # File lib/devise/schema.rb, line 62
    def rememberable(options={})
      use_salt = options.fetch(:use_salt, Devise.use_salt_as_remember_token)
      apply_devise_schema :remember_token,      String unless use_salt
      apply_devise_schema :remember_created_at, DateTime
    end

token_authenticatable() click to toggle source

Creates authentication_token.

    # File lib/devise/schema.rb, line 32
    def token_authenticatable
      apply_devise_schema :authentication_token, String
    end

trackable() click to toggle source

Creates sign_in_count, current_sign_in_at, last_sign_in_at, current_sign_in_ip, last_sign_in_ip.

    # File lib/devise/schema.rb, line 70
    def trackable
      apply_devise_schema :sign_in_count,      Integer, :default => 0
      apply_devise_schema :current_sign_in_at, DateTime
      apply_devise_schema :last_sign_in_at,    DateTime
      apply_devise_schema :current_sign_in_ip, String
      apply_devise_schema :last_sign_in_ip,    String
    end