lib/contentful_middleman/mappers/base.rb in contentful_middleman-1.1.0 vs lib/contentful_middleman/mappers/base.rb in contentful_middleman-1.1.1
- old
+ new
@@ -5,15 +5,23 @@
class Base
attr_reader :entries
def initialize(entries)
@entries = entries
+ @children = {}
end
def map(context, entry)
- context.id = entry.id
- entry.fields.each {|k, v| map_field context, k, v}
+ @children = {
+ :queue => [{ :context => context, :entry => entry }],
+ :discovered => [entry.id] }
+ while !@children[:queue].first.nil? do
+ nxt = @children[:queue].pop
+ context = nxt[:context]
+ entry = nxt[:entry]
+ map_entry_full(entry, context)
+ end
end
private
def map_field(context, field_name, field_value)
@@ -44,14 +52,21 @@
context.url = asset.file.url
context
end
- def map_entry(entry)
- context = Context.new
+ def map_entry_full(entry, context)
context.id = entry.id
entry.fields.each {|k, v| map_field context, k, v}
+ end
+ def map_entry(entry)
+ context = Context.new
+ context.id = entry.id
+ if !@children[:discovered].include?(entry.id)
+ @children[:queue].push({ :context => context, :entry => entry})
+ @children[:discovered].push(entry.id)
+ end
context
end
def map_location(location)
location.properties