In the current sprint I am in at work (we try to follow the Scrum guidelines of Agile Programming at Leapfrog Online), I needed to compute a tax report. In Georgia, taxes need to be broken down by County and Tax Type (city, state, educational, MARTA, etc.); and we need to report on how much tax we collected and refunded. So, I run a couple of database queries to get raw numbers back, and I compute cell, row, and column totals in Ruby, saving the values in a hash that I need to format for HTML and CSV.
Now, as I am building the HTML, I want to have the raw hash output at the top of my page so I can ensure I am walking the hash properly. So I use <%= h @results.inspect %> to give me an HTML-encoded string representation of the hash. The output looks something like this:
{"IL"=>{"returns"=>5, "orders"=>80, "COUNTY"=>{"refunded"=>{"TAX_TYPE"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>, ... }, "collected"=>{"TAX_TYPE"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>, ... } "total"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>}},"totals"=>{"refunded"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>, "collected"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>, "TAX_TYPE"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>, ... }}}, ... }
…a long run-on string nightmare.
What I wanted was something that had structure to it. What I wanted was the structure of pp (PrettyPrint), but in web format. What I ended up with was this: <%= h PP.pp( @results, "" ) %>. When wrapped in a pre tag, the output becomes manageable:
{"IL"=>
{"returns"=>5,
"orders"=>80,
"COUNTY"=>
{"refunded"=>
{"TAX_TYPE"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>,
... },
"collected"=>
{"TAX_TYPE"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>,
... }
"total"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>}},
"totals"=>
{"refunded"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>,
"collected"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>,
"TAX_TYPE"=>#<BigDecimal:XXXXXX,'0.1998E1',8(12)>,
... }}},
... }