From b5d60e928122e18f87f736c5e8237cc89ab33d69 Mon Sep 17 00:00:00 2001 From: Takashi SAKAGUCHI Date: Fri, 26 Dec 2025 03:05:19 +0900 Subject: [PATCH 1/2] Support private instance_variables_to_inspect in pp Ruby supports calling instance_variables_to_inspect even when it is defined as a private method (ruby/ruby#13555). This change aligns pp with Ruby's behavior. --- lib/pp.rb | 2 +- test/test_pp.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/pp.rb b/lib/pp.rb index fcd33ba..f1e9842 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -388,7 +388,7 @@ def pretty_print_cycle(q) # This method should return an array of names of instance variables as symbols or strings as: # +[:@a, :@b]+. def pretty_print_instance_variables - ivars = respond_to?(:instance_variables_to_inspect) ? instance_variables_to_inspect : instance_variables + ivars = respond_to?(:instance_variables_to_inspect, true) ? instance_variables_to_inspect : instance_variables ivars.sort end diff --git a/test/test_pp.rb b/test/test_pp.rb index 4a273e6..922ed37 100644 --- a/test/test_pp.rb +++ b/test/test_pp.rb @@ -146,7 +146,9 @@ def a.pretty_print_instance_variables() [:@b] end def test_iv_hiding_via_ruby a = Object.new - def a.instance_variables_to_inspect() [:@b] end + a.singleton_class.class_eval do + private def instance_variables_to_inspect() [:@b] end + end a.instance_eval { @a = "aaa"; @b = "bbb" } assert_match(/\A#\n\z/, PP.pp(a, ''.dup)) end From 764bb89d4ec7e94eb75349afb121d0db7855afae Mon Sep 17 00:00:00 2001 From: Takashi SAKAGUCHI Date: Fri, 26 Dec 2025 12:30:42 +0900 Subject: [PATCH 2/2] Fall back to instance_variables when instance_variables_to_inspect is nil --- lib/pp.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pp.rb b/lib/pp.rb index f1e9842..5fd29a3 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -388,7 +388,7 @@ def pretty_print_cycle(q) # This method should return an array of names of instance variables as symbols or strings as: # +[:@a, :@b]+. def pretty_print_instance_variables - ivars = respond_to?(:instance_variables_to_inspect, true) ? instance_variables_to_inspect : instance_variables + ivars = respond_to?(:instance_variables_to_inspect, true) ? instance_variables_to_inspect || instance_variables : instance_variables ivars.sort end