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)
-
(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)
def respond_to?(method, include_private = false) super || key?(method) end
def to_h
-
(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