Skip to content

Commit 56d543f

Browse files
authored
Merge pull request rails#53503 from Shopify/gm/add-max_value-to-big-integer
Add back max_value to `ActiveModel::BigInteger`
2 parents 417ac4e + fca30d0 commit 56d543f

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

activemodel/lib/active_model/type/big_integer.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ def serialize_cast_value(value) # :nodoc:
4747
def serializable?(value, &_)
4848
true
4949
end
50+
51+
private
52+
def max_value
53+
::Float::INFINITY
54+
end
5055
end
5156
end
5257
end

activemodel/test/cases/type/big_integer_test.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
module ActiveModel
66
module Type
77
class BigIntegerTest < ActiveModel::TestCase
8+
class CustomNumber
9+
attr_reader :num
10+
11+
def initialize(num)
12+
@num = num
13+
end
14+
15+
alias_method :to_i, :num
16+
end
17+
818
def test_type_cast_big_integer
919
type = Type::BigInteger.new
1020
assert_equal 1, type.cast(1)
@@ -21,6 +31,13 @@ def test_large_values
2131
assert_equal 9999999999999999999999999999999, type.serialize(9999999999999999999999999999999)
2232
end
2333

34+
def test_integer_like_classes_that_are_greater_than_4_bytes_still_serialize
35+
type = Type::BigInteger.new
36+
large_number = 9999999999999999999999999999999
37+
38+
assert_equal large_number, type.serialize(CustomNumber.new(large_number))
39+
end
40+
2441
test "serialize_cast_value is equivalent to serialize after cast" do
2542
type = Type::BigInteger.new
2643
value = type.cast(9999999999999999999999999999999)

0 commit comments

Comments
 (0)