From 4d664a098d92c34a2720d04f1624103aa245254c Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 27 Mar 2004 01:46:05 +0000 Subject: * (lib/pp.rb, lib/prettyprint.rb): define seplist in PP::PPMethods instead of PrettyPrint. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6032 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/pp.rb | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'lib/pp.rb') diff --git a/lib/pp.rb b/lib/pp.rb index 2279c984eb..6ddd4dd2eb 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -88,6 +88,32 @@ PP#pp to print the object. text ',' breakable +--- seplist(list[, separator_proc[, iter_method]]) {|elt| ... } + 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 + = Object --- pretty_print(pp) is a default pretty printing method for general objects. @@ -201,6 +227,19 @@ class PP < PrettyPrint breakable end + def seplist(list, sep=nil, iter_method=:each) + sep ||= lambda { comma_breakable } + first = true + list.__send__(iter_method) {|*v| + if first + first = false + else + sep.call + end + yield(*v) + } + end + def pp_object(obj) object_address_group(obj) { seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v| @@ -603,4 +642,11 @@ if __FILE__ == $0 end end end + + class PPSingleLineTest < Test::Unit::TestCase + def test_hash + assert_equal("{1=>1}", PP.singleline_pp({ 1 => 1}, '')) # [ruby-core:02699] + assert_equal("[1#{', 1'*99}]", PP.singleline_pp([1]*100, '')) + end + end end -- cgit v1.2.3