2013-03-13 2 views
0

Я задаюсь возможно с помощью RABL для визуализации XML, как это (не прошу, почему я нужен такой хаотической структуры: D):Рабль - несколько узлов с таким же именем

<garbagebox> 
    <user><id>1</id></user> 
    <user><id>2</id></user> 
    <article><name>some name here</name></article> 
    <customer><rich>yes</rich></customer> 
    <article><name>some name here #2</name></article> 
</garbagebox> 

На данный момент выглядит Рабль forbilds множественным узлы с таким же именем в одной из родителей (с исключением коллекций - но в коллекции все узлы названы те же)

Например, если я чего-л, как это:

object :garbagebox 
child(Country.first) {attributes :id, :currency} 
child(Customer.last) {attributes :id, :name} 
child(Country.first) {attributes :id, :currency} 

я получаю только 2 ребенка вместо 3.

Может кто-нибудь, пожалуйста, дайте какие-либо советы, чтобы я мог визуализировать такой xml? Благодарю.

ответ

1

Вот немного хардкор-патчи. Используйте его на свой страх и риск.

Перед изменением:

object @user 
child(@user) { attribute :name } 
child(@user) { attribute :city } 
child(@user) { attribute :name } 

Результаты в:

<?xml version="1.0" encoding="UTF-8"?> 
<user> 
    <user> 
    <name>leo</name> 
    </user> 
</user> 

обезьяны патч:

module Rabl 
    module Helpers 
    alias_method :data_name_without_uniquify, :data_name 
    def data_name(data_token) 
     uniquify(data_name_without_uniquify(data_token)) 
    end 

    private 

    def uniquify(object) 
     Uniquificator.new(object) 
    end 

    class Uniquificator 
     def initialize(object) 
     @object = object 
     end 

     def ==(other) 
     false 
     end 

     def hash 
     @object.hash 
     end 

     def eql?(other) 
     false 
     end 

     def to_s 
     @object.to_s 
     end 

     def method_missing(*args, &block) 
     @object.__send__(*args, &block) 
     end 
    end 
    end 
end 

и результат после исправления:

<?xml version="1.0" encoding="UTF-8"?> 
<user> 
    <user> 
    <name>leo</name> 
    </user> 
    <user> 
    <city>LA</city> 
    </user> 
    <user> 
    <name>leo</name> 
    </user> 
</user> 
+0

Спасибо, посмотри, что ты сделал здесь;). Подождите некоторое время для решения, которое не является monkeypatch, если оно не появится - примет это как ответ. – bigoldbrute

Смежные вопросы