@rubiiiは、Savonリクエストをカスタマイズできることを以前に示しました( Savon石鹸本体の問題)。
class SomeXML
def self.to_s
"<some>xml</some>"
end
end
client.request :some_action do
soap.body = SomeXML
end
しかし、なぜこのようなクラスメソッドを使用するのでしょうか。クラスのインスタンスに、それ自体をリクエスト本文のハッシュに変換するように依頼する可能性が高くなります。すなわち
@instance = SomeClass.new
client.request :some_action do
soap.body = @instance.to_soap
end
ただし、これを実行しようとすると、@instance変数がリクエストブロック内の「スコープ」にありません。そのため、nilでメソッドto_soapを呼び出すことができません。しかし、代わりにクラスメソッドを使用すると、それを機能させることができます。すなわち
class SomeClass
@@soap_hash = nil
def self.soap_hash=(hash)
@@soap_hash = hash
end
def self.soap_hash
@@soap_hash
end
end
SomeClass.soap_hash = @instance.to_soap
client.request :some_action do
soap.body = SomeClass.soap_hash
end
理解できません?