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 ||= if klass_name klass_name.constantize else nil end end # Same as klass, just returns a string instead of the actual constant. def klass_name @klass_name ||= if guessed_name = name.scan(/(.*)Session/)[0] @klass_name = guessed_name[0] end 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) if !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