Я использую Builder для создания XML-сообщений, отправляемых на веб-сервис. Каждому из разных методов требуется разный xml, но у всех них есть набор общих элементов для запуска запроса (в основном это средства аутентификации учетной записи). Есть ли способ сделать это сухим способом? Вот мой код для построения запроса на изменение пароля:
# XML REQUEST SETUP
msg = Builder::XmlMarkup.new(:indent=>2)
query = {}
test_hsh = self.testmode ? {:Test => "YES"} : {}
# BUILD THE REQUEST
query[:changePassPhraseRequestXML] = msg.ChangePassPhraseRequest(test_hsh) do |asr|
asr.RequesterID APP_CONFIG[:endicia_partner_id].to_s
asr.RequestID "1"
asr.CertifiedIntermediary do |ci|
ci.AccountID APP_CONFIG[:endicia_account_number].to_s
ci.PassPhrase APP_CONFIG[:endicia_passphrase].to_s
end
asr.NewPassPhrase APP_CONFIG[:passphrase].to_s
end
Практически все элементы, кроме NewPassPhrase, являются общими для всех (или большинства) запросов. Сейчас я копирую один и тот же код снова и снова, но мне это совсем не нравится.
Какие-нибудь идеи по поводу сушки?