PrettyPrint to a web page?


#1

This is gonna sound like a dumb question to you Ruby veterans, but: How
do you dump pretty_print contents to a web page from within a Rails app?

I’ve tried this and a few other things from a view:

Session Info

<% require 'pp' %> <%= pp(session) %>

#2

Mario T. Lanza wrote:

This is gonna sound like a dumb question to you Ruby veterans, but: How
do you dump pretty_print contents to a web page from within a Rails app?

I’ve tried this and a few other things from a view:

Session Info

<% require 'pp' %> <%= pp(session) %>

I don’t know with PP, but I’m using this sometimes

<%=h session.inspect %>

Stefan


#3

On May 18, 2007, at 6:40 PM, Mario T. Lanza wrote:

This is gonna sound like a dumb question to you Ruby veterans, but:
How
do you dump pretty_print contents to a web page from within a Rails
app?

I’ve tried this and a few other things from a view:

Session Info

<% require 'pp' %> <%= pp(session) %>

Change that last line to:

<%= PP.pp(session, String.new) %>

pp() accepts a second argument to specify where to put the output.
This just defaults to $> ($stdout). If we specify a String, the
output is collected there instead:

require “pp”
=> false

Contact = Struct.new(:name, :city, :state, :email)
=> Contact

james = Contact.new(“James Edward G. II”, “Edmond”, “Oklahoma”,
“removed_email_address@domain.invalid”)
=> #<struct Contact name=“James Edward G. II”, city=“Edmond”,
state=“Oklahoma”, email=“removed_email_address@domain.invalid”>

pp_james = String.new
=> “”

PP.pp(james, pp_james)
=> “#<struct Contact\n name=“James Edward G. II”,\n city=“Edmond”,
\n state=“Oklahoma”,\n email=“removed_email_address@domain.invalid”>\n”

puts pp_james
#<struct Contact
name=“James Edward G. II”,
city=“Edmond”,
state=“Oklahoma”,
email=“removed_email_address@domain.invalid”>
=> nil

James Edward G. II


#4

Both of these work, thanks.

<%=h session.inspect %>
<%= PP.pp(session, String.new) %>

They both have their advantages. The first includes additional
information I want and the second is easier to read.

How would we merging the two results?


#5

Duh! Nevermind that last question.

This produced the best results:

<%=h PP.pp(session, String.new) %>

#6

James Edward G. II wrote:

Change that last line to:

<%= PP.pp(session, String.new) %>

Using <%=h something %> is better in this case, as #SomeClass:0x...
will be escaped (the angle brackets) during template processing.

pp() accepts a second argument to specify where to put the output. This
just defaults to $> ($stdout). If we specify a String, the output is
collected there instead:

Only when specifying PP as receiver for ‘pp’.

irb(main):001:0> require “pp”
=> true
irb(main):002:0> output = “”
=> “”
irb(main):003:0> data = self.class.constants.select {|x| x.length < 5}
=> [“IRB”, “ARGF”, “ENV”, “SLex”, “IO”, “Proc”, “GC”, “Hash”, “TRUE”,
“File”, “NIL”, “PP”, “Time”, “Data”, “Dir”, “ARGV”, “Math”]
irb(main):004:0> pp(data, output)
[“IRB”,
“ARGF”,
“ENV”,
“SLex”,
“IO”,
“Proc”,
“GC”,
“Hash”,
“TRUE”,
“File”,
“NIL”,
“PP”,
“Time”,
“Data”,
“Dir”,
“ARGV”,
“Math”]
“”
=> nil
irb(main):005:0> output
=> “”

Well, good to see a working version, thanks James Edward.

Stefan