A pretty-printer for Ruby objects.
PP
Does¶ ↑Standard output by p
returns this:
#<PP:0x81fedf0 @genspace=#<Proc:0x81feda0>, @group_queue=#<PrettyPrint::GroupQueue:0x81fed3c @queue=[[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], []]>, @buffer=[], @newline="\n", @group_stack=[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#<IO:0x8114ee4>>
Pretty-printed output returns this:
#<PP:0x81fedf0 @buffer=[], @buffer_width=0, @genspace=#<Proc:0x81feda0>, @group_queue= #<PrettyPrint::GroupQueue:0x81fed3c @queue= [[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], []]>, @group_stack= [#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], @indent=0, @maxwidth=79, @newline="\n", @output=#<IO:0x8114ee4>, @output_width=2>
pp(obj) #=> obj pp obj #=> obj pp(obj1, obj2, ...) #=> [obj1, obj2, ...] pp() #=> nil
Output obj(s)
to $>
in pretty printed format.
It returns obj(s)
.
To define a customized pretty printing function for your classes, redefine method #pretty_print(pp)
in the class.
#pretty_print
takes the pp
argument, which is an instance of the PP
class. The method uses text
, breakable
, nest
, group
and pp
to print the object.
JSON
¶ ↑To pretty-print JSON
refer to JSON#pretty_generate
.
Tanaka Akira <akr@fsij.org>
Outputs obj
to out
in pretty printed format of width
columns in width.
If out
is omitted, $>
is assumed. If width
is omitted, the width of out
is assumed (see width_for
).
PP.pp
returns out
.
# File ruby-3.1.2/lib/pp.rb, line 91 def PP.pp(obj, out=$>, width=width_for(out)) q = PP.new(out, width) q.guard_inspect_key {q.pp obj} q.flush #$pp = q out << "\n" end
Outputs obj
to out
like PP.pp
but with no indent and newline.
PP.singleline_pp
returns out
.
# File ruby-3.1.2/lib/pp.rb, line 103 def PP.singleline_pp(obj, out=$>) q = SingleLine.new(out) q.guard_inspect_key {q.pp obj} q.flush out end
Returns the usable width for out
. As the width of out
:
If out
is assigned to a tty device, its width is used.
Otherwise, or it could not get the value, the COLUMN
environment variable is assumed to be set to the width.
If COLUMN
is not set to a non-zero number, 80 is assumed.
And finally, returns the above width value - 1.
This -1 is for Windows command prompt, which moves the cursor to the next line if it reaches the last column.
# File ruby-3.1.2/lib/pp.rb, line 74 def PP.width_for(out) begin require 'io/console' _, width = out.winsize rescue LoadError, NoMethodError, SystemCallError end (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1 end