File tree Expand file tree Collapse file tree 3 files changed +28
-2
lines changed
lib/active_support/message_pack Expand file tree Collapse file tree 3 files changed +28
-2
lines changed Original file line number Diff line number Diff line change
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
+
1
8
* Add ` default: ` support for ` ActiveSupport::CurrentAttributes.attribute `
2
9
3
10
``` ruby
Original file line number Diff line number Diff line change @@ -86,8 +86,9 @@ def install(registry)
86
86
unpacker : URI . method ( :parse )
87
87
88
88
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
91
92
92
93
registry . register_type 15 , Pathname ,
93
94
packer : :to_s ,
@@ -221,6 +222,18 @@ def read_set(unpacker)
221
222
Set . new ( unpacker . read )
222
223
end
223
224
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
+
224
237
def write_hash_with_indifferent_access ( hwia , packer )
225
238
packer . write ( hwia . to_h )
226
239
end
Original file line number Diff line number Diff line change @@ -127,6 +127,12 @@ module MessagePackSharedSerializerTests
127
127
128
128
test "roundtrips IPAddr" do
129
129
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
130
136
end
131
137
132
138
test "roundtrips Pathname" do
You can’t perform that action at this time.
0 commit comments