aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/pp.rb20
-rw-r--r--test/test_pp.rb9
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/pp.rb b/lib/pp.rb
index f43356a3df..81551aa116 100644
--- a/lib/pp.rb
+++ b/lib/pp.rb
@@ -416,6 +416,26 @@ class Struct # :nodoc:
end
end
+class Data # :nodoc:
+ def pretty_print(q) # :nodoc:
+ q.group(1, sprintf("#<data %s", PP.mcall(self, Kernel, :class).name), '>') {
+ q.seplist(PP.mcall(self, Data, :members), lambda { q.text "," }) {|member|
+ q.breakable
+ q.text member.to_s
+ q.text '='
+ q.group(1) {
+ q.breakable ''
+ q.pp public_send(member)
+ }
+ }
+ }
+ end
+
+ def pretty_print_cycle(q) # :nodoc:
+ q.text sprintf("#<data %s:...>", PP.mcall(self, Kernel, :class).name)
+ end
+end if "3.2" <= RUBY_VERSION
+
class Range # :nodoc:
def pretty_print(q) # :nodoc:
q.pp self.begin
diff --git a/test/test_pp.rb b/test/test_pp.rb
index 9cef555d79..4fcb8df4b0 100644
--- a/test/test_pp.rb
+++ b/test/test_pp.rb
@@ -152,6 +152,15 @@ class PPCycleTest < Test::Unit::TestCase
assert_equal("#{a.inspect}\n", PP.pp(a, ''.dup))
end
+ if "3.2" <= RUBY_VERSION
+ D = Data.define(:aaa, :bbb)
+ def test_data
+ a = D.new("aaa", "bbb")
+ assert_equal("#<data PPTestModule::PPCycleTest::D\n aaa=\"aaa\",\n bbb=\"bbb\">\n", PP.pp(a, ''.dup, 20))
+ assert_equal("#{a.inspect}\n", PP.pp(a, ''.dup))
+ end
+ end
+
def test_object
a = Object.new
a.instance_eval {@a = a}