Как отобразить простые свойства XML с помощью Roar::Decorator
Я пытаюсь сделать простой вывод XML в Roar::Decorator. По какой-то причине невозможно получить неэкранированный вывод.
У меня есть этот класс:
class GetShopProductsRequest < OpenStruct
def data_filter
xml_s = []
xml_s << "<Filter>"
xml_s << " <FilterName>#{self.filter_name}</FilterName>"
xml_s << " <FilterValues>"
xml_s << " <FilterValue>#{self.filter_value}</FilterValue>"
xml_s << " </FilterValues>"
xml_s << "</Filter>"
xml_s.join("\n")
end
end
и следующий представитель:
class GetShopProductsRequestRepresenter < RequestRepresenter
property :data_filter, as: :DataFilter
end
который наследует от Roar::Decorator
и включает в себя Roar::XML
Тем не менее, когда я создаю свой экземпляр представитель с
GetShopProductsRequestRepresenter.new(GetShopProductsRequest.new(:filter_value => 123, :filter_name => "test"))
и создать вывод XML .to_xml
выход
<DataFilter><Filter>
<FilterName>bla</FilterName>
<FilterValues>
<FilterValue>test</FilterValue>
</FilterValues>
</Filter></DataFilter>
Я пытался использовать html_safe
в нескольких местах кода, но результат ничего не изменил.
1 ответ
Я бы предложил использовать что-то вроде https://github.com/jimweirich/builder
Это позволяет вам делать:
require 'builder'
def filter_xml
xml = Builder::XmlMarkup.new( :indent => 2 )
xml.instruct! :xml, :encoding => "ASCII"
xml.Filter do
xml.FilterName do
self.filter_name
end
end
end
puts filter_xml