aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/test
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-08-28 17:23:48 +0900
committerGitHub <noreply@github.com>2018-08-28 17:23:48 +0900
commit37075aa7f5c2c779a981debd21aa8c468cce4d72 (patch)
treed84791f45de533765855ae6b556e3c1e6ea48ca6 /activemodel/test
parent1353610ff2ab4d16d022d5c31d5b4e5d908e05a8 (diff)
parent47a6d788ddbab08b2a04c72cd80352aac44090ab (diff)
downloadrails-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.rb10
-rw-r--r--activemodel/test/models/topic.rb14
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