我正在尝试使用 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 似乎只返回对象。
我正在尝试使用 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 似乎只返回对象。
它似乎没有记录在 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\"> => </kbd><pre><kbd style=\"color:brown\">"b"</kbd></pre>\n}</pre>"
也就是说,输出格式可能没那么有用(html 版本添加了大量空白,非 html 版本具有奇怪的终端着色字符),并且作为一个未记录的功能,它很可能在没有警告的情况下中断未成年人版本更新。
kernel.rb
上面值得注意的另一件事是ap
andai
有别名:awesome_print
和awesome_inspect
.
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