class Middleman::CoreExtensions::Data::DataStore
The core logic behind the data extension.
def callbacks(name=nil, proc=nil)
-
(void)
-
Parameters:
-
proc
(Proc
) -- The callback which will return data -
name
(Symbol
) -- Name of the data, used for namespacing
def callbacks(name=nil, proc=nil) @_callback_sources ||= {} @_callback_sources[name.to_s] = proc unless name.nil? || proc.nil? @_callback_sources end
def data_for_path(path)
-
(Hash, nil)
-
Parameters:
-
path
(String, Symbol
) -- The name of the data namespace
def data_for_path(path) response = nil @@local_sources ||= {} @@callback_sources ||= {} if self.store.has_key?(path.to_s) response = self.store[path.to_s] elsif self.callbacks.has_key?(path.to_s) response = self.callbacks[path.to_s].call() end response end
def initialize(app)
-
app
(Middleman::Application
) -- The current instance of Middleman
def initialize(app) @app = app @local_data = {} end
def matcher
-
(Regexp)
-
def matcher %r{[\w-]+\.(yml|yaml|json)$} end
def method_missing(path)
-
(Hash, nil)
-
Parameters:
-
path
(String
) -- The namespace to search for
def method_missing(path) if @local_data.has_key?(path.to_s) return @local_data[path.to_s] else result = data_for_path(path) if result return ::Middleman::Util.recursively_enhance(result) end end super end
def remove_file(file)
-
(void)
-
Parameters:
-
file
(String
) -- The file to be cleared
def remove_file(file) extension = File.extname(file) basename = File.basename(file, extension) @local_data.delete(basename) if @local_data.has_key?(basename) end
def store(name=nil, content=nil)
-
(void)
-
Parameters:
-
content
(Hash
) -- The content for this data -
name
(Symbol
) -- Name of the data, used for namespacing
def store(name=nil, content=nil) @_local_sources ||= {} @_local_sources[name.to_s] = content unless name.nil? || content.nil? @_local_sources end
def to_h
-
(Hash)
-
def to_h data = {} self.store.each do |k, v| data[k] = data_for_path(k) end self.callbacks.each do |k, v| data[k] = data_for_path(k) end (@local_data || {}).each do |k, v| data[k] = v end data end
def touch_file(file)
-
(void)
-
Parameters:
-
file
(String
) -- The file to be re-parsed
def touch_file(file) file = File.expand_path(file, @app.root) extension = File.extname(file) basename = File.basename(file, extension) if %w(.yaml .yml).include?(extension) data = YAML.load_file(file) elsif extension == ".json" data = ActiveSupport::JSON.decode(File.read(file)) else return end @local_data[basename] = ::Middleman::Util.recursively_enhance(data) end