Module: Devise::Models
- Defined in:
- lib/devise/models.rb,
lib/devise/models/lockable.rb,
lib/devise/models/trackable.rb,
lib/devise/models/confirmable.rb,
lib/devise/models/recoverable.rb,
lib/devise/models/timeoutable.rb,
lib/devise/models/validatable.rb,
lib/devise/models/omniauthable.rb,
lib/devise/models/registerable.rb,
lib/devise/models/rememberable.rb,
lib/devise/models/authenticatable.rb,
lib/devise/models/token_authenticatable.rb,
lib/devise/models/database_authenticatable.rb
Defined Under Namespace
Modules: Authenticatable, Confirmable, DatabaseAuthenticatable, Lockable, Omniauthable, Recoverable, Registerable, Rememberable, Timeoutable, TokenAuthenticatable, Trackable, Validatable Classes: MissingAttribute
Class Method Summary collapse
- .check_fields!(klass) ⇒ Object
-
.config(mod, *accessors) ⇒ Object
Creates configuration values for Devise and for the given module.
Instance Method Summary collapse
-
#devise(*modules) ⇒ Object
Include the chosen devise modules in your model:.
-
#devise_modules_hook! ⇒ Object
The hook which is called inside devise.
Class Method Details
.check_fields!(klass) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/devise/models.rb', line 52 def self.check_fields!(klass) failed_attributes = [] instance = klass.new klass.devise_modules.each do |mod| constant = const_get(mod.to_s.classify) if constant.respond_to?(:required_fields) constant.required_fields(klass).each do |field| failed_attributes << field unless instance.respond_to?(field) end else ActiveSupport::Deprecation.warn "The module #{mod} doesn't implement self.required_fields(klass). " \ "Devise uses required_fields to warn developers of any missing fields in their models. " \ "Please implement #{mod}.required_fields(klass) that returns an array of symbols with the required fields." end end if failed_attributes.any? fail Devise::Models::MissingAttribute.new(failed_attributes) end end |
.config(mod, *accessors) ⇒ Object
Creates configuration values for Devise and for the given module.
Devise::Models.config(Devise::Authenticatable, :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.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/devise/models.rb', line 29 def self.config(mod, *accessors) #:nodoc: class << mod; attr_accessor :available_configs; end mod.available_configs = accessors accessors.each do |accessor| mod.class_eval <<-METHOD, __FILE__, __LINE__ + 1 def #{accessor} if defined?(@#{accessor}) @#{accessor} elsif superclass.respond_to?(:#{accessor}) superclass.#{accessor} else Devise.#{accessor} end end def #{accessor}=(value) @#{accessor} = value end METHOD end end |
Instance Method Details
#devise(*modules) ⇒ Object
Include the chosen devise modules in your model:
devise :database_authenticatable, :confirmable, :recoverable
You can also give any of the devise configuration values in form of a hash, with specific values for this model. Please check your Devise initializer for a complete description on those values.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/devise/models.rb', line 83 def devise(*modules) = modules..dup selected_modules = modules.map(&:to_sym).uniq.sort_by do |s| Devise::ALL.index(s) || -1 # follow Devise::ALL order end devise_modules_hook! do include Devise::Models::Authenticatable selected_modules.each do |m| if m == :encryptable && !(defined?(Devise::Models::Encryptable)) warn "[DEVISE] You're trying to include :encryptable in your model but it is not bundled with the Devise gem anymore. Please add `devise-encryptable` to your Gemfile to proceed.\n" end mod = Devise::Models.const_get(m.to_s.classify) if mod.const_defined?("ClassMethods") class_mod = mod.const_get("ClassMethods") extend class_mod if class_mod.respond_to?(:available_configs) available_configs = class_mod.available_configs available_configs.each do |config| next unless .key?(config) send(:"#{config}=", .delete(config)) end end end include mod end self.devise_modules |= selected_modules .each { |key, value| send(:"#{key}=", value) } end end |
#devise_modules_hook! ⇒ Object
The hook which is called inside devise. So your ORM can include devise compatibility stuff.
122 123 124 |
# File 'lib/devise/models.rb', line 122 def devise_modules_hook! yield end |