Serialize Mail :: Сообщение для yaml, как и другие объекты - PullRequest
0 голосов
/ 06 мая 2011

Задача

Обычные объекты сериализуются в нечто вроде:

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

, тогда как Mail :: Message сериализуется в:

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

Вопрос

Как я могу сериализовать Mail :: Message так же, как другие объекты?

Фон

Версии самоцвета:

  • 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: <4dc418052be4a_16b62850c31ac91488@mbp.local.mail>\nsubject: \nContent-Type: text/plain\nDate: Fri, 06 May 2011 15:47:17 +0000\n"

Желаемый выход

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

Ответы [ 3 ]

1 голос
/ 04 июля 2011

Причиной был некорректный патч к самоцвету Почты. Подробности изложены здесь:

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

0 голосов
/ 04 декабря 2015

Используйте YAML напрямую вместо использования метода to_yaml.

YAML.dump(Mail::Message.new)
0 голосов
/ 06 мая 2011

Так как 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"
...