Merge pull request #18439 from mokhan/validates-acceptance-of-array

allow '1' or true for acceptance validation.
This commit is contained in:
Sean Griffin 2015-01-12 12:06:00 -07:00
commit 72570ea289
3 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,9 @@
* Change validates_acceptance_of to accept true by default.
The default for validates_acceptance_of is now "1" and true.
In the past, only "1" was the default and you were required to add
accept: true.
* Remove deprecated `ActiveModel::Dirty#reset_#{attribute}` and
`ActiveModel::Dirty#reset_changes`.

View File

@ -3,12 +3,12 @@ module ActiveModel
module Validations
class AcceptanceValidator < EachValidator # :nodoc:
def initialize(options)
super({ allow_nil: true, accept: "1" }.merge!(options))
super({ allow_nil: true, accept: ["1", true] }.merge!(options))
setup!(options[:class])
end
def validate_each(record, attribute, value)
unless value == options[:accept]
unless acceptable_option?(value)
record.errors.add(attribute, :accepted, options.except(:accept, :allow_nil))
end
end
@ -20,6 +20,10 @@ module ActiveModel
klass.send(:attr_reader, *attr_readers)
klass.send(:attr_writer, *attr_writers)
end
def acceptable_option?(value)
Array(options[:accept]).include?(value)
end
end
module HelperMethods

View File

@ -65,4 +65,10 @@ class AcceptanceValidationTest < ActiveModel::TestCase
ensure
Person.clear_validators!
end
def test_validates_acceptance_of_true
Topic.validates_acceptance_of(:terms_of_service)
assert Topic.new(terms_of_service: true).valid?
end
end