class Middleman::CoreExtensions::Collections::CollectionsExtension

Attributes

leaves[RW]

Public Class Methods

new(app, options_hash={}, &block) click to toggle source
Calls superclass method
# File lib/middleman-core/core_extensions/collections.rb, line 37
def initialize(app, options_hash={}, &block)
  super

  @leaves = Set.new
  @collectors_by_name = {}
  @values_by_name = {}

  @collector_roots = []

  @lock = Monitor.new
end

Public Instance Methods

before_configuration() click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 49
def before_configuration
  @leaves.clear
end
collector_value(label) click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 81
def collector_value(label)
  @values_by_name[label]
end
data_collector() click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 64
def data_collector
  live_collector { |app, _| app.data }
end
live_collector(&block) click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 69
def live_collector(&block)
  root = LazyCollectorRoot.new(self)

  @collector_roots << {
    root: root,
    block: block
  }

  root
end
manipulate_resource_list(resources) click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 86
def manipulate_resource_list(resources)
  @lock.synchronize do
    @collector_roots.each do |pair|
      dataset = pair[:block].call(app, resources)
      pair[:root].realize!(dataset)
    end

    ctx = StepContext.new(app)
    StepContext.current = ctx

    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
    results = ctx.descriptors.reduce(resources) do |sum, d|
      d.execute_descriptor(app, sum)
    end

    StepContext.current = nil

    results
  end
end
pagination() click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 32
def pagination
  current_resource.data.pagination
end
register_collector(label, endpoint) click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 54
def register_collector(label, endpoint)
  @collectors_by_name[label] = endpoint
end
sitemap_collector() click to toggle source
# File lib/middleman-core/core_extensions/collections.rb, line 59
def sitemap_collector
  live_collector { |_, resources| resources }
end