Sha256: d776eb64d462a17373f0b2db113b4dc63543b29fd7fa7939823ec8ed7b6c3126

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

module Authenticate
  module Model

    # Use :username as the identifier for the user. Username must be unique.
    #
    # = Columns
    # * username - the username of your user
    #
    # = Validations
    # * :username requires username is set, ensure it is unique
    #
    # = class methods
    # * credentials(params) - return the credentials required for authorization by username
    # * authenticate(credentials) - find user with given username, validate their password, return the user if authenticated
    # * find_by_credentials(credentials) - find and return the user with the username in the credentials
    #
    module Username
      extend ActiveSupport::Concern

      def self.required_fields(klass)
        [:username]
      end

      included do
        # before_validation :normalize_username
        validates :username,
                  presence: true,
                  uniqueness: { allow_blank: true }
      end

      module ClassMethods
        def credentials(params)
          [params[:session][:username], params[:session][:password]]
        end

        def authenticate(credentials)
          user = find_by_credentials(credentials)
          user && user.password_match?(credentials[1]) ? user : nil
        end

        def find_by_credentials(credentials)
          username = credentials[0]
          find_by_username username
        end

        # def normalize_username(username)
        #   username.to_s.downcase.gsub(/\s+/, '')
        # end
      end

      # def normalize_username
      #   self.username = self.class.normalize_username(username)
      # end

    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
authenticate-0.2.0 lib/authenticate/model/username.rb