Revert "Merge pull request #7826 from sikachu/master-validators-kind"
This reverts commit4e9f53f973
, reversing changes made to6b802cdb4f
. Revert "Don't use tap in this case." This reverts commit454d820bf0
. Reason: Is not a good idea to add options to this method since we can do the same thing using method composition. Person.validators_on(:name).select { |v| v.kind == :presence } Also it avoids to change the method again to add more options.
This commit is contained in:
parent
454d820bf0
commit
86062005a7
|
@ -1,15 +1,5 @@
|
||||||
## Rails 4.0.0 (unreleased) ##
|
## Rails 4.0.0 (unreleased) ##
|
||||||
|
|
||||||
* `ActiveModel::Validators#validators_on` now accepts a `:kind` option which will filter out the
|
|
||||||
validators on a particular attribute based on its kind.
|
|
||||||
|
|
||||||
Person.validators_on(:name)
|
|
||||||
# => [#<ActiveModel::Validations::PresenceValidator:0x007fe604914e60 @attributes=[:name], @options={}>,
|
|
||||||
# #<ActiveModel::Validations::InclusionValidator:0x007fe603bb8780 @attributes=[:age], @options={:in=>0..99}>]
|
|
||||||
|
|
||||||
Person.validators_on(:name, kind: :presence)
|
|
||||||
# => [#<ActiveModel::Validations::PresenceValidator:0x007fe604914e60 @attributes=[:name], @options={}>]
|
|
||||||
|
|
||||||
* Add `ActiveModel::ForbiddenAttributesProtection`, a simple module to
|
* Add `ActiveModel::ForbiddenAttributesProtection`, a simple module to
|
||||||
protect attributes from mass assignment when non-permitted attributes are passed.
|
protect attributes from mass assignment when non-permitted attributes are passed.
|
||||||
|
|
||||||
|
|
|
@ -187,23 +187,10 @@ module ActiveModel
|
||||||
# # #<ActiveModel::Validations::PresenceValidator:0x007fe604914e60 @attributes=[:name], @options={}>,
|
# # #<ActiveModel::Validations::PresenceValidator:0x007fe604914e60 @attributes=[:name], @options={}>,
|
||||||
# # #<ActiveModel::Validations::InclusionValidator:0x007fe603bb8780 @attributes=[:age], @options={:in=>0..99}>
|
# # #<ActiveModel::Validations::InclusionValidator:0x007fe603bb8780 @attributes=[:age], @options={:in=>0..99}>
|
||||||
# # ]
|
# # ]
|
||||||
#
|
|
||||||
# You can also pass a +:kind+ option to filter the validators based on their kind.
|
|
||||||
#
|
|
||||||
# Person.validators_on(:name, kind: :presence)
|
|
||||||
# # => [#<ActiveModel::Validations::PresenceValidator:0x007fe604914e60 @attributes=[:name], @options={}>]
|
|
||||||
def validators_on(*attributes)
|
def validators_on(*attributes)
|
||||||
options = attributes.extract_options!
|
attributes.map do |attribute|
|
||||||
|
|
||||||
validators = attributes.map do |attribute|
|
|
||||||
_validators[attribute.to_sym]
|
_validators[attribute.to_sym]
|
||||||
end.flatten
|
end.flatten
|
||||||
|
|
||||||
if options[:kind]
|
|
||||||
validators.select! { |validator| validator.kind == options[:kind] }
|
|
||||||
else
|
|
||||||
validators
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns +true+ if +attribute+ is an attribute method, +false+ otherwise.
|
# Returns +true+ if +attribute+ is an attribute method, +false+ otherwise.
|
||||||
|
|
|
@ -287,14 +287,6 @@ class ValidationsTest < ActiveModel::TestCase
|
||||||
assert_equal [], Topic.validators_on(:author_name)
|
assert_equal [], Topic.validators_on(:author_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_list_of_validators_on_an_attribute_based_on_kind
|
|
||||||
Topic.validates_presence_of :title, :content
|
|
||||||
Topic.validates_length_of :title, :minimum => 2
|
|
||||||
|
|
||||||
assert_equal Topic.validators_on(:title).select { |v| v.kind == :presence },
|
|
||||||
Topic.validators_on(:title, kind: :presence)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_validations_on_the_instance_level
|
def test_validations_on_the_instance_level
|
||||||
auto = Automobile.new
|
auto = Automobile.new
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue