Как отобразить простые свойства 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>&lt;Filter&gt;
       &lt;FilterName&gt;bla&lt;/FilterName&gt;
       &lt;FilterValues&gt;
         &lt;FilterValue&gt;test&lt;/FilterValue&gt;
       &lt;/FilterValues&gt;
     &lt;/Filter&gt;</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
Другие вопросы по тегам