Sha256: ce272097a45d7b4acd43b2ebac0189c264fdaf3b2cf0d12e690bc32ab2e3a55b

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

require 'bcrypt'

module ModelMixin

  def self.included(base)
    base.send :extend, ClassMethods
  end

  module ClassMethods
    def authenticates
      send :include, InstanceMethodsOnActivation

      attr_reader    :password
      attr_protected :password_digest

      validates      :username,        :presence => true, :uniqueness => true
      validates      :password,        :on => :create, :presence => true
      validates      :password_digest, :presence => true

      instance_eval <<-END
        def authenticate(username, plain_text_password)
          user = where(:username => username).first
          if user && user.has_matching_password?(plain_text_password)
            user
          else
            nil
          end
        end
      END
    end
  end

  module InstanceMethodsOnActivation
    def password=(plain_text_password)
      @password = plain_text_password
      self.password_digest = BCrypt::Password.create plain_text_password
    end

    def has_matching_password?(plain_text_password)
      BCrypt::Password.new(password_digest) == plain_text_password
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
quo_vadis-1.0.1 app/models/model_mixin.rb
quo_vadis-1.0.0 app/models/model_mixin.rb