class Middleman::CoreExtensions::Collections::CollectionsExtension

def before_configuration

def before_configuration
  @leaves.clear
end

def collector_value(label)

def collector_value(label)
  @values_by_name[label]
end

def data_collector

def data_collector
  live_collector { |app, _| app.data }
end

def initialize(app, options_hash={}, &block)

def initialize(app, options_hash={}, &block)
  super
  @leaves = Set.new
  @collectors_by_name = {}
  @values_by_name = {}
  @collector_roots = []
end

def live_collector(&block)

def live_collector(&block)
  root = LazyCollectorRoot.new(self)
  @collector_roots << {
    root: root,
    block: block
  }
  root
end

def manipulate_resource_list(resources)

def manipulate_resource_list(resources)
  @collector_roots.each do |pair|
    dataset = pair[:block].call(app, resources)
    pair[:root].realize!(dataset)
  end
  ctx = StepContext.new
  leaves = @leaves.dup
  @collectors_by_name.each do |k, v|
    @values_by_name[k] = v.value(ctx)
    leaves.delete v
  end
  # Execute code paths
  leaves.each do |v|
    v.value(ctx)
  end
  # Inject descriptors
  ctx.descriptors.reduce(resources) do |sum, d|
    d.execute_descriptor(app, sum)
  end
end

def pagination

def pagination
  current_resource.data.pagination
end

def register_collector(label, endpoint)

def register_collector(label, endpoint)
  @collectors_by_name[label] = endpoint
end

def sitemap_collector

def sitemap_collector
  live_collector { |_, resources| resources }
end