mirror of
https://github.com/heartcombo/devise.git
synced 2026-01-08 15:23:55 -05:00
Use proc to set password length validation so it's possible to override it dynamically.
Co-authored-by: Manoj M J <manojmj92@gmail.com>
This commit is contained in:
12
CHANGELOG.md
12
CHANGELOG.md
@@ -18,7 +18,19 @@
|
|||||||
* Removed deprecations warning output for `Devise::Models::Authenticatable::BLACKLIST_FOR_SERIALIZATION` (@soartec-lab)
|
* Removed deprecations warning output for `Devise::Models::Authenticatable::BLACKLIST_FOR_SERIALIZATION` (@soartec-lab)
|
||||||
* Add Rails 8 support.
|
* Add Rails 8 support.
|
||||||
- Routes are lazy-loaded by default in test and development environments now so Devise loads them before `Devise.mappings` call.
|
- Routes are lazy-loaded by default in test and development environments now so Devise loads them before `Devise.mappings` call.
|
||||||
|
* Password length validator is changed from
|
||||||
|
|
||||||
|
```
|
||||||
|
validates_length_of :password, within: password_length, allow_blank: true`
|
||||||
|
```
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
```
|
||||||
|
validates_length_of :password, minimum: proc { password_length.min }, maximum: proc { password_length.max }, allow_blank: true
|
||||||
|
```
|
||||||
|
|
||||||
|
so it's possible to override `password_length` at runtime. (@manojmj92)
|
||||||
* bug fixes
|
* bug fixes
|
||||||
* Make `Devise` work without `ActionMailer` when `Zeitwerk` autoloader is used.
|
* Make `Devise` work without `ActionMailer` when `Zeitwerk` autoloader is used.
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ module Devise
|
|||||||
# * +email_regexp+: the regular expression used to validate e-mails;
|
# * +email_regexp+: the regular expression used to validate e-mails;
|
||||||
# * +password_length+: a range expressing password length. Defaults to 6..128.
|
# * +password_length+: a range expressing password length. Defaults to 6..128.
|
||||||
#
|
#
|
||||||
|
# Since +password_length+ is applied in a proc within `validates_length_of` it can be overridden
|
||||||
|
# at runtime.
|
||||||
module Validatable
|
module Validatable
|
||||||
# All validations used by this module.
|
# All validations used by this module.
|
||||||
VALIDATIONS = [:validates_presence_of, :validates_uniqueness_of, :validates_format_of,
|
VALIDATIONS = [:validates_presence_of, :validates_uniqueness_of, :validates_format_of,
|
||||||
@@ -34,7 +36,7 @@ module Devise
|
|||||||
|
|
||||||
validates_presence_of :password, if: :password_required?
|
validates_presence_of :password, if: :password_required?
|
||||||
validates_confirmation_of :password, if: :password_required?
|
validates_confirmation_of :password, if: :password_required?
|
||||||
validates_length_of :password, within: password_length, allow_blank: true
|
validates_length_of :password, minimum: proc { password_length.min }, maximum: proc { password_length.max }, allow_blank: true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
|||||||
test 'validations options are not applied too late' do
|
test 'validations options are not applied too late' do
|
||||||
validators = WithValidation.validators_on :password
|
validators = WithValidation.validators_on :password
|
||||||
length = validators.find { |v| v.kind == :length }
|
length = validators.find { |v| v.kind == :length }
|
||||||
assert_equal 2, length.options[:minimum]
|
assert_equal 2, length.options[:minimum].call
|
||||||
assert_equal 6, length.options[:maximum]
|
assert_equal 6, length.options[:maximum].call
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'validations are applied just once' do
|
test 'validations are applied just once' do
|
||||||
|
|||||||
Reference in New Issue
Block a user