mirror of
https://github.com/heartcombo/devise.git
synced 2026-01-09 23:08:05 -05:00
Rewrite model_config once again.
This commit is contained in:
@@ -10,22 +10,43 @@ module Devise
|
||||
|
||||
TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE'].freeze
|
||||
|
||||
MODEL_CONFIG = []
|
||||
|
||||
def self.model_config(klass, accessor, default=nil)
|
||||
# Create Devise accessor
|
||||
# Creates configuration values for Devise and for the given module.
|
||||
#
|
||||
# Devise.model_config(Devise::Authenticable, :stretches, 10)
|
||||
#
|
||||
# The line above creates:
|
||||
#
|
||||
# 1) An accessor called Devise.stretches, which value is used by default;
|
||||
#
|
||||
# 2) Some class methods for your model Model.stretches and Model.stretches=
|
||||
# which have higher priority than Devise.stretches;
|
||||
#
|
||||
# 3) And an instance method stretches.
|
||||
#
|
||||
# To add the class methods you need to have a module ClassMethods defined
|
||||
# inside the given class.
|
||||
#
|
||||
def self.model_config(mod, accessor, default=nil) #:nodoc:
|
||||
mattr_accessor accessor
|
||||
|
||||
# Set default value
|
||||
send(:"#{accessor}=", default)
|
||||
|
||||
# Store configuration method
|
||||
MODEL_CONFIG << accessor
|
||||
|
||||
# Set default value
|
||||
klass.class_eval <<-METHOD
|
||||
mod.class_eval <<-METHOD, __FILE__, __LINE__
|
||||
def #{accessor}
|
||||
Devise.#{accessor}
|
||||
self.class.#{accessor}
|
||||
end
|
||||
METHOD
|
||||
|
||||
mod.const_get(:ClassMethods).class_eval <<-METHOD, __FILE__, __LINE__
|
||||
def #{accessor}
|
||||
@#{accessor} || if superclass.respond_to?(:#{accessor})
|
||||
superclass.#{accessor}
|
||||
else
|
||||
Devise.#{accessor}
|
||||
end
|
||||
end
|
||||
|
||||
def #{accessor}=(value)
|
||||
@#{accessor} = value
|
||||
end
|
||||
METHOD
|
||||
end
|
||||
|
||||
@@ -48,10 +48,9 @@ module Devise
|
||||
#
|
||||
def devise(*modules)
|
||||
options = modules.extract_options!
|
||||
options.assert_valid_keys(:except, *Devise::MODEL_CONFIG)
|
||||
|
||||
modules = Devise::ALL if modules.include?(:all)
|
||||
modules -= Array(options.delete(:except)) if options.key?(:except)
|
||||
modules = Devise::ALL if modules.include?(:all)
|
||||
modules -= Array(options.delete(:except))
|
||||
modules |= [:authenticable]
|
||||
|
||||
modules.each do |m|
|
||||
@@ -60,21 +59,7 @@ module Devise
|
||||
end
|
||||
|
||||
# Convert new keys to methods which overwrites Devise defaults
|
||||
options.each do |key, value|
|
||||
case value
|
||||
when Proc
|
||||
define_method key, &value
|
||||
next
|
||||
when ActiveSupport::Duration
|
||||
value = value.to_i
|
||||
end
|
||||
|
||||
class_eval <<-END_EVAL, __FILE__, __LINE__
|
||||
def #{key}
|
||||
#{value.inspect}
|
||||
end
|
||||
END_EVAL
|
||||
end
|
||||
options.each { |key, value| send(:"#{key}=", value) }
|
||||
end
|
||||
|
||||
# Stores all modules included inside the model, so we are able to verify
|
||||
|
||||
@@ -24,9 +24,6 @@ module Devise
|
||||
# User.find(1).valid_password?('password123') # returns true/false
|
||||
#
|
||||
module Authenticable
|
||||
Devise.model_config(self, :pepper)
|
||||
Devise.model_config(self, :stretches, 10)
|
||||
|
||||
def self.included(base)
|
||||
base.class_eval do
|
||||
extend ClassMethods
|
||||
@@ -74,7 +71,6 @@ module Devise
|
||||
end
|
||||
|
||||
module ClassMethods
|
||||
|
||||
# Authenticate a user based on email and password. Returns the
|
||||
# authenticated user if it's valid or nil.
|
||||
# Attributes are :email and :password
|
||||
@@ -93,6 +89,9 @@ module Devise
|
||||
perishable
|
||||
end
|
||||
end
|
||||
|
||||
Devise.model_config(self, :pepper)
|
||||
Devise.model_config(self, :stretches, 10)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user