像其他对象一样将 Mail::Message 序列化到 yaml

发布于 2024-11-05 16:31:38 字数 1018 浏览 3 评论 0原文

问题

普通对象序列化为:

"--- !ruby/object {}\n\n"

而 Mail::Message 序列化为:

"--- \nMime-Version: \"1.0\"\nbody: \"\"\nContent-Transfer-Encoding:[…]"

问题

如何像其他对象一样序列化 Mail::Message? em>

后台

Gem 版本:

  • YAML:“0.60”
  • 邮件:“2.2.19”

代码

Object.new.to_yaml #gives
"--- !ruby/object {}\n\n"

Mail::Message.new.to_yaml #gives
"--- \nMime-Version: \"1.0\"\nbody: \"\"\nContent-Transfer-Encoding: 7bit\nMessage-ID: <[email protected]>\nsubject: \nContent-Type: text/plain\nDate: Fri, 06 May 2011 15:47:17 +0000\n"

所需输出

"--- !ruby/object:Mail::Message {}\n\n"

Problem

Normal objects serialize to something like:

"--- !ruby/object {}\n\n"

whereas Mail::Message serialize to:

"--- \nMime-Version: \"1.0\"\nbody: \"\"\nContent-Transfer-Encoding:[…]"

Question

How can I have Mail::Message serialized just like other objects?

Background

Gem Versions:

  • YAML: "0.60"
  • Mail: "2.2.19"

Code

Object.new.to_yaml #gives
"--- !ruby/object {}\n\n"

Mail::Message.new.to_yaml #gives
"--- \nMime-Version: \"1.0\"\nbody: \"\"\nContent-Transfer-Encoding: 7bit\nMessage-ID: <[email protected]>\nsubject: \nContent-Type: text/plain\nDate: Fri, 06 May 2011 15:47:17 +0000\n"

Desired output

"--- !ruby/object:Mail::Message {}\n\n"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不知在何时 2024-11-12 16:31:38

原因是邮件宝石的补丁有缺陷。详细信息如下:

https://github.com/mikel/mail/pull/237

The reason was a flawed patch to the Mail gem. Details are outlined here:

https://github.com/mikel/mail/pull/237

滥情空心 2024-11-12 16:31:38

由于 Mail::Message 有自己的 to_yaml 方法 - https://github.com/mikel/mail/blob/master/lib/mail/message.rb#L1714 - 我认为没有猴子补丁是不可能的

module Mail
  class Message
    def to_yaml
      self.class.name.to_yaml
    end
  end
end

irb(main):011:0> Mail::Message.new.to_yaml
=> "--- Mail::Message\n...\n"

Since Mail::Message has the own to_yaml method - https://github.com/mikel/mail/blob/master/lib/mail/message.rb#L1714 - I think it's impossible without monkey-patching like

module Mail
  class Message
    def to_yaml
      self.class.name.to_yaml
    end
  end
end

irb(main):011:0> Mail::Message.new.to_yaml
=> "--- Mail::Message\n...\n"
無心 2024-11-12 16:31:38

直接使用 YAML 而不是通过 to_yaml 方法。

YAML.dump(Mail::Message.new)

Use YAML directly instead of going through to_yaml method.

YAML.dump(Mail::Message.new)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文