class Middleman::CoreExtensions::Data::DataStoreController

The core logic behind the data extension.

def enhanced_data(k)

def enhanced_data(k)
  value = key(k)
  if @enhanced_cache.key?(k)
    cached_id, cached_value = @enhanced_cache[k]
    return cached_value if cached_id == value.object_id
    @enhanced_cache.delete(k)
  end
  enhanced = ::Middleman::Util.recursively_enhance(value)
  @enhanced_cache[k] = [value.object_id, enhanced]
  enhanced
end

def initialize(app, track_data_access)

def initialize(app, track_data_access)
  @data_collection_depth = app.config[:data_collection_depth]
  @track_data_access = track_data_access
  @local_file_data_store = Data::Stores::LocalFileDataStore.new(app)
  @in_memory_data_store = Data::Stores::InMemoryDataStore.new
  # Sorted in order of access precedence.
  @data_stores = [
    @local_file_data_store,
    @in_memory_data_store
  ]
  @enhanced_cache = {}
end

def key(k)

def key(k)
  source = @data_stores.find { |s| s.key?(k) }
  source[k] unless source.nil?
end

def key?(k)

def key?(k)
  @data_stores.any? { |s| s.key?(k) }
end

def method_missing(method)

Returns:
  • (Hash, nil) -

Parameters:
  • path (String) -- The namespace to search for
def method_missing(method)
  return proxied_data(method) if key?(method)
  super
end

def proxied_data(k, parent = nil)

def proxied_data(k, parent = nil)
  data = enhanced_data(k)
  return data unless @track_data_access
  if data.is_a? ::Middleman::Util::EnhancedHash
    Data::Proxies::HashProxy.new(k, data, @data_collection_depth, parent)
  elsif data.is_a? ::Array
    Data::Proxies::ArrayProxy.new(k, data, @data_collection_depth, parent)
  else
    raise 'Invalid data to wrap'
  end
end

def respond_to?(method, include_private = false)

Needed so that method_missing makes sense
def respond_to?(method, include_private = false)
  super || key?(method)
end

def to_h

Returns:
  • (Hash) -
def to_h
  @data_stores.reduce({}) do |sum, store|
    sum.merge(store.to_h)
  end
end

def vertices

def vertices
  @data_stores.reduce(::Hamster::Set.empty) do |sum, s|
    sum | s.vertices
  end
end