diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2018-08-28 17:23:48 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-28 17:23:48 +0900 |
commit | 37075aa7f5c2c779a981debd21aa8c468cce4d72 (patch) | |
tree | d84791f45de533765855ae6b556e3c1e6ea48ca6 /activemodel/test | |
parent | 1353610ff2ab4d16d022d5c31d5b4e5d908e05a8 (diff) | |
parent | 47a6d788ddbab08b2a04c72cd80352aac44090ab (diff) | |
download | rails-37075aa7f5c2c779a981debd21aa8c468cce4d72.tar.gz rails-37075aa7f5c2c779a981debd21aa8c468cce4d72.tar.bz2 rails-37075aa7f5c2c779a981debd21aa8c468cce4d72.zip |
Merge pull request #33654 from kamipo/fix_numericality_validator_2
Fix numericality validator to still use value before type cast except Active Record
Diffstat (limited to 'activemodel/test')
-rw-r--r-- | activemodel/test/cases/validations/numericality_validation_test.rb | 10 | ||||
-rw-r--r-- | activemodel/test/models/topic.rb | 14 |
2 files changed, 24 insertions, 0 deletions
diff --git a/activemodel/test/cases/validations/numericality_validation_test.rb b/activemodel/test/cases/validations/numericality_validation_test.rb index 01b78ae72e..ca3c3bc40d 100644 --- a/activemodel/test/cases/validations/numericality_validation_test.rb +++ b/activemodel/test/cases/validations/numericality_validation_test.rb @@ -262,6 +262,16 @@ class NumericalityValidationTest < ActiveModel::TestCase Person.clear_validators! end + def test_validates_numericality_using_value_before_type_cast_if_possible + Topic.validates_numericality_of :price + + topic = Topic.new(price: 50) + + assert_equal "$50.00", topic.price + assert_equal 50, topic.price_before_type_cast + assert_predicate topic, :valid? + end + def test_validates_numericality_with_exponent_number base = 10_000_000_000_000_000 Topic.validates_numericality_of :approved, less_than_or_equal_to: base diff --git a/activemodel/test/models/topic.rb b/activemodel/test/models/topic.rb index b0af00ee45..db3284f833 100644 --- a/activemodel/test/models/topic.rb +++ b/activemodel/test/models/topic.rb @@ -3,6 +3,11 @@ class Topic include ActiveModel::Validations include ActiveModel::Validations::Callbacks + include ActiveModel::AttributeMethods + include ActiveSupport::NumberHelper + + attribute_method_suffix "_before_type_cast" + define_attribute_method :price def self._validates_default_keys super | [ :message ] @@ -10,6 +15,7 @@ class Topic attr_accessor :title, :author_name, :content, :approved, :created_at attr_accessor :after_validation_performed + attr_writer :price after_validation :perform_after_validation @@ -38,4 +44,12 @@ class Topic def my_validation_with_arg(attr) errors.add attr, "is missing" unless send(attr) end + + def price + number_to_currency @price + end + + def attribute_before_type_cast(attr) + instance_variable_get(:"@#{attr}") + end end |