module Authlogic module Session # Handles authenticating via a traditional username and password. module Klass def self.included(klass) klass.class_eval do extend Config include InstanceMethods class << self attr_accessor :configured_klass_methods end end end module Config # Lets you change which model to use for authentication. # # * Default: inferred from the class name. UserSession would # automatically try User # * Accepts: an ActiveRecord class def authenticate_with(klass) @klass_name = klass.name @klass = klass end alias_method :authenticate_with=, :authenticate_with # The name of the class that this session is authenticating with. For # example, the UserSession class will authenticate with the User class # unless you specify otherwise in your configuration. See # authenticate_with for information on how to change this value. def klass @klass ||= klass_name ? klass_name.constantize : nil end # The string of the model name class guessed from the actual session class name. def klass_name return @klass_name if defined?(@klass_name) @klass_name = name.scan(/(.*)Session/)[0] @klass_name = klass_name ? klass_name[0] : nil end end module InstanceMethods # Creating an alias method for the "record" method based on the klass # name, so that we can do: # # session.user # # instead of: # # session.record def initialize(*args) unless self.class.configured_klass_methods self.class.send(:alias_method, klass_name.demodulize.underscore.to_sym, :record) self.class.configured_klass_methods = true end super end private def klass self.class.klass end def klass_name self.class.klass_name end end end end end