1

我正在尝试使用 awesome_print 美化一个 Ruby 对象,以便我可以将此字符串放在电子邮件中并将其发送出去。所以就代码而言,(我知道这是错误的),但这是我想要实现的目标:

my_str = (ap error.object).to_str
# Do something with my_str, like stick it in a <pre> tag inside an html email.

如何将输出从 ap 转换为字符串?我问的原因是我注意到,ap 似乎只返回对象。

4

2 回答 2

3

它似乎没有记录在 README.md 中,但是如果您查看该库在此处所做的内核修改:https ://github.com/michaeldv/awesome_print/blob/master/lib/awesome_print/core_ext/kernel .rb

可以看到,除了ap方法之外,awesome_print gem 还ai为所有对象添加了方法。

1.9.3p392 :001 > require 'awesome_print'
 => true 
1.9.3p392 :002 > test = {a: "b"}
 => {:a=>"b"}
1.9.3p392 :003 > ap test
{
    :a => "b"
}
1.9.3p392 :006 > test.ai
 => "{\n    :a\e[0;37m => \e[0m\e[0;33m\"b\"\e[0m\n}" 
1.9.3p392 :007 > test.ai(html:true)
 => "<pre>{\n    <pre>:a</pre><kbd style=\"color:slategray\"> =&gt; </kbd><pre><kbd style=\"color:brown\">&quot;b&quot;</kbd></pre>\n}</pre>"

也就是说,输出格式可能没那么有用(html 版本添加了大量空白,非 html 版本具有奇怪的终端着色字符),并且作为一个未记录的功能,它很可能在没有警告的情况下中断未成年人版本更新。

kernel.rb上面值得注意的另一件事是apandai有别名:awesome_printawesome_inspect.

于 2013-08-29T14:45:13.560 回答
2

awesomeprint 用于打印 ASCII 颜色和东西,而不是 HTML。我使用的是 pygments gem:

# gem install pygments.rb
require 'pygments'

str = <<EOT
# This is an awesome comment on my rb script
a = 2
puts a
hsh = {asdf: 1, qwer: 2, uiop: 3}
EOT

Pygments.highlight str

https://github.com/tmm1/pygments.rb

于 2013-02-26T15:54:50.203 回答