Руби Савон просит - PullRequest
       9

Руби Савон просит

1 голос
/ 21 октября 2011

@ 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 не находится в области видимости внутри блока запроса. Так что я получаю метод to_soap для вызова nil. Но если вместо этого я использую метод класса, я смогу заставить его работать. т.е.

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

Я не понимаю?

1 Ответ

1 голос
/ 21 октября 2011
  1. Пример метода класса был именно этим примером. Не стесняйтесь использовать любой объект, который отвечает на to_s.

  2. Блок обрабатывается с помощью instance_eval с делегированием , поэтому вы можете использовать только локальные переменные и методы внутри блока. Если вам нужно использовать переменные экземпляра, измените ваш блок, чтобы принимать аргументы. Савон заметит, что вы указали аргументы и получите эти значения вместо оценки блока.

Информацию о том, какие аргументы нужно указать, и все остальное, , пожалуйста, укажите в RTFM ;)

...