class Middleman::CoreExtensions::Collections::CollectionsExtension

def before_configuration

def before_configuration
  @leaves.clear
  app.add_to_config_context :resources, &method(:root_collector)
  app.add_to_config_context :collection, &method(:register_collector)
end

def collection(label)

def collection(label)
  extensions[:collections].collector_value(label)
end

def collector_value(label)

def collector_value(label)
  @values_by_name[label]
end

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

def initialize(app, options_hash={}, &block)
  super
  @leaves = Set.new
  @collectors_by_name = {}
  @values_by_name = {}
  @root_collector = LazyCollectorRoot.new(self)
end

def manipulate_resource_list(resources)

def manipulate_resource_list(resources)
  @root_collector.realize!(resources)
  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
  resources + ctx.descriptors.map { |d| d.to_resource(app) }
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