A convenience method which is same as follows:
text ',' breakable
# File pp.rb, line 163
def comma_breakable
text ','
breakable
end
# File pp.rb, line 110
def guard_inspect_key
if Thread.current[InspectKey] == nil
Thread.current[InspectKey] = []
end
save = Thread.current[InspectKey]
begin
Thread.current[InspectKey] = []
yield
ensure
Thread.current[InspectKey] = save
end
end
# File pp.rb, line 153
def object_address_group(obj, &block)
id = "%x" % (obj.__id__ * 2)
id.sub!(/\Af(?=[[:xdigit:]]{2}+\z)/, '') if id.sub!(/\A\.\./, '')
group(1, "\#<#{obj.class}:0x#{id}", '>', &block)
end
A convenience method which is same as follows:
group(1, '#<' + obj.class.name, '>') { ... }
# File pp.rb, line 149
def object_group(obj, &block) # :yield:
group(1, '#<' + obj.class.name, '>', &block)
end
Adds obj to the pretty printing buffer using Object#pretty_print or Object#pretty_print_cycle.
Object#pretty_print_cycle
is used when obj is already printed, a.k.a the object
reference chain has a cycle.
# File pp.rb, line 130
def pp(obj)
id = obj.__id__
if Thread.current[InspectKey].include? id
group {obj.pretty_print_cycle self}
return
end
begin
Thread.current[InspectKey] << id
group {obj.pretty_print self}
ensure
Thread.current[InspectKey].pop unless PP.sharing_detection
end
end
# File pp.rb, line 220
def pp_hash(obj)
group(1, '{', '}') {
seplist(obj, nil, :each_pair) {|k, v|
group {
pp k
text '=>'
group(1) {
breakable ''
pp v
}
}
}
}
end
# File pp.rb, line 205
def pp_object(obj)
object_address_group(obj) {
seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v|
breakable
v = v.to_s if Symbol === v
text v
text '='
group(1) {
breakable ''
pp(obj.instance_eval(v))
}
}
}
end
Adds a separated list. The list is separated by comma with breakable space, by default.
seplist iterates the
list using iter_method. It yields each object to
the block given for seplist.
The procedure separator_proc is called between each yields.
If the iteration is zero times, separator_proc is not called
at all.
If separator_proc is nil or not given, +lambda { #comma_breakable }+ is
used. If iter_method is not given, :each is used.
For example, following 3 code fragments has similar effect.
q.seplist([1,2,3]) {|v| xxx v } q.seplist([1,2,3], lambda { comma_breakable }, :each) {|v| xxx v } xxx 1 q.comma_breakable xxx 2 q.comma_breakable xxx 3
# File pp.rb, line 192
def seplist(list, sep=nil, iter_method=:each) # :yield: element
sep ||= lambda { comma_breakable }
first = true
list.__send__(iter_method) {|*v|
if first
first = false
else
sep.call
end
yield(*v)
}
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.