Revert "Merge pull request #7826 from sikachu/master-validators-kind"

This reverts commit 4e9f53f973, reversing
changes made to 6b802cdb4f.

Revert "Don't use tap in this case."

This reverts commit 454d820bf0.

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:
Rafael Mendonça França 2012-10-02 23:56:12 -03:00
parent 454d820bf0
commit 86062005a7
3 changed files with 1 additions and 32 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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