aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib
diff options
context:
space:
mode:
authorPrem Sichanugrist <s@sikac.hu>2012-10-02 21:45:09 -0400
committerPrem Sichanugrist <s@sikac.hu>2012-10-02 22:09:06 -0400
commit4f9b59dba0fe9d90f53417f0d4f1bc63679d556a (patch)
tree71490452c6ee41f9fd06ac90b5d4d3c8091c3073 /activemodel/lib
parent0a507925cfc54246dc7d329936f60f8f410c38b6 (diff)
downloadrails-4f9b59dba0fe9d90f53417f0d4f1bc63679d556a.tar.gz
rails-4f9b59dba0fe9d90f53417f0d4f1bc63679d556a.tar.bz2
rails-4f9b59dba0fe9d90f53417f0d4f1bc63679d556a.zip
Make `.validators_on` accept `:kind` option
This will filter out the validators on a particular attribute based on its kind.
Diffstat (limited to 'activemodel/lib')
-rw-r--r--activemodel/lib/active_model/validations.rb13
1 files changed, 12 insertions, 1 deletions
diff --git a/activemodel/lib/active_model/validations.rb b/activemodel/lib/active_model/validations.rb
index 4762f39044..5a3225a7e6 100644
--- a/activemodel/lib/active_model/validations.rb
+++ b/activemodel/lib/active_model/validations.rb
@@ -187,10 +187,21 @@ module ActiveModel
# # #<ActiveModel::Validations::PresenceValidator:0x007fe604914e60 @attributes=[:name], @options={}>,
# # #<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)
+ options = attributes.extract_options!
+
attributes.map do |attribute|
_validators[attribute.to_sym]
- end.flatten
+ end.flatten.tap do |validators|
+ if options[:kind]
+ validators.select! { |validator| validator.kind == options[:kind] }
+ end
+ end
end
# Returns +true+ if +attribute+ is an attribute method, +false+ otherwise.