Skip to content

Commit 3815171

Browse files
Fix IPAddr prefix information missing when write to cache in msgpack serializer
* Save cache size by omit the prefix if unnecessary * rename to straightforward naming. * check the prefix directly instead of inspect * Remove unused helper method * add to changelog Co-authored-by: Jonathan Hefner <[email protected]>
1 parent 0ecfbe2 commit 3815171

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

activesupport/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
* Include `IPAddr#prefix` when serializing an `IPAddr` using the
2+
`ActiveSupport::MessagePack` serializer. This change is backward and forward
3+
compatible — old payloads can still be read, and new payloads will be
4+
readable by older versions of Rails.
5+
6+
*Taiki Komaba*
7+
18
* Add `default:` support for `ActiveSupport::CurrentAttributes.attribute`
29

310
```ruby

activesupport/lib/active_support/message_pack/extensions.rb

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,9 @@ def install(registry)
8686
unpacker: URI.method(:parse)
8787

8888
registry.register_type 14, IPAddr,
89-
packer: :to_s,
90-
unpacker: :new
89+
packer: method(:write_ipaddr),
90+
unpacker: method(:read_ipaddr),
91+
recursive: true
9192

9293
registry.register_type 15, Pathname,
9394
packer: :to_s,
@@ -221,6 +222,18 @@ def read_set(unpacker)
221222
Set.new(unpacker.read)
222223
end
223224

225+
def write_ipaddr(ipaddr, packer)
226+
if ipaddr.prefix < 32 || (ipaddr.ipv6? && ipaddr.prefix < 128)
227+
packer.write("#{ipaddr}/#{ipaddr.prefix}")
228+
else
229+
packer.write(ipaddr.to_s)
230+
end
231+
end
232+
233+
def read_ipaddr(unpacker)
234+
IPAddr.new(unpacker.read)
235+
end
236+
224237
def write_hash_with_indifferent_access(hwia, packer)
225238
packer.write(hwia.to_h)
226239
end

activesupport/test/message_pack/shared_serializer_tests.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,12 @@ module MessagePackSharedSerializerTests
127127

128128
test "roundtrips IPAddr" do
129129
assert_roundtrip IPAddr.new("127.0.0.1")
130+
assert_roundtrip IPAddr.new("1.1.1.1/16")
131+
assert_equal 16, load(dump(IPAddr.new("1.1.1.1/16"))).prefix
132+
133+
assert_roundtrip IPAddr.new("::1")
134+
assert_roundtrip IPAddr.new("1:1:1:1:1:1:1:1/64")
135+
assert_equal 64, load(dump(IPAddr.new("1:1:1:1:1:1:1:1/64"))).prefix
130136
end
131137

132138
test "roundtrips Pathname" do

0 commit comments

Comments
 (0)