diff --git a/middleman-core/lib/middleman-core/core_extensions/data.rb b/middleman-core/lib/middleman-core/core_extensions/data.rb index 8fac7911..29bf3261 100644 --- a/middleman-core/lib/middleman-core/core_extensions/data.rb +++ b/middleman-core/lib/middleman-core/core_extensions/data.rb @@ -9,32 +9,32 @@ module Middleman # The regex which tells Middleman which files are for data MATCHER = /[\w-]+\.(yml|yaml|json)$/ + attr_reader :data_store + def initialize(app, options_hash={}, &block) super - app.config.define_setting :data_dir, 'data', 'The directory data files are stored in' - # Directly include the #data method instead of using helpers so that this is available immediately - app.send :include, InstanceMethods + @data_store = DataStore.new(app) end def before_configuration + app.config.define_setting :data_dir, 'data', 'The directory data files are stored in' + app.add_to_config_context :data, &method(:data_store) + # Setup data files before anything else so they are available when # parsing config.rb app.files.changed MATCHER do |file| - data.touch_file(file) if file.start_with?("#{config[:data_dir]}/") + extensions[:data].data_store.touch_file(file) if file.start_with?("#{config[:data_dir]}/") end app.files.deleted MATCHER do |file| - data.remove_file(file) if file.start_with?("#{config[:data_dir]}/") + extensions[:data].data_store.remove_file(file) if file.start_with?("#{config[:data_dir]}/") end end - module InstanceMethods - # The data object - # - # @return [DataStore] + helpers do def data - @_data ||= DataStore.new(self) + extensions[:data].data_store end end diff --git a/middleman-core/lib/middleman-core/renderers/liquid.rb b/middleman-core/lib/middleman-core/renderers/liquid.rb index 2085d939..e3d51417 100644 --- a/middleman-core/lib/middleman-core/renderers/liquid.rb +++ b/middleman-core/lib/middleman-core/renderers/liquid.rb @@ -11,11 +11,13 @@ module Middleman end def manipulate_resource_list(resources) + return resources unless app.extensions[:data] + resources.each do |resource| next unless resource.source_file =~ %r{\.liquid$} # Convert data object into a hash for liquid - resource.add_metadata locals: { data: app.data.to_h } + resource.add_metadata locals: { data: app.extensions[:data].data_store.to_h } end end end