Expand collection laziness to data
This commit is contained in:
parent
b127283040
commit
33cb9b3ba9
|
@ -143,3 +143,53 @@ Feature: Collections
|
||||||
When I go to "index.html"
|
When I go to "index.html"
|
||||||
And I should see 'Article: Blog3 Another Article'
|
And I should see 'Article: Blog3 Another Article'
|
||||||
And I should see 'Article: Blog2 Yet Another Article'
|
And I should see 'Article: Blog2 Yet Another Article'
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Collected data update with file changes
|
||||||
|
Given a fixture app "collections-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
data.articles.each_with_index do |a, i|
|
||||||
|
proxy "/#{i}.html", a
|
||||||
|
end
|
||||||
|
"""
|
||||||
|
And a file named "data/articles.yaml" with:
|
||||||
|
"""
|
||||||
|
---
|
||||||
|
- "/blog1/2011-01-01-new-article.html"
|
||||||
|
- "/blog2/2011-01-02-another-article.html"
|
||||||
|
"""
|
||||||
|
Given the Server is running at "collections-app"
|
||||||
|
When I go to "0.html"
|
||||||
|
Then I should see 'Newer Article Content'
|
||||||
|
When I go to "1.html"
|
||||||
|
Then I should see 'Another Article Content'
|
||||||
|
When I go to "2.html"
|
||||||
|
Then I should see 'Not Found'
|
||||||
|
|
||||||
|
When the file "data/articles.yaml" has the contents
|
||||||
|
"""
|
||||||
|
---
|
||||||
|
- "/blog1/2011-01-01-new-article.html"
|
||||||
|
"""
|
||||||
|
When I go to "0.html"
|
||||||
|
Then I should see 'Newer Article Content'
|
||||||
|
When I go to "1.html"
|
||||||
|
Then I should see 'Not Found'
|
||||||
|
When I go to "2.html"
|
||||||
|
Then I should see 'Not Found'
|
||||||
|
|
||||||
|
When the file "data/articles.yaml" has the contents
|
||||||
|
"""
|
||||||
|
---
|
||||||
|
- "/blog2/2011-01-02-another-article.html"
|
||||||
|
- "/blog1/2011-01-01-new-article.html"
|
||||||
|
- "/blog2/2011-01-01-new-article.html"
|
||||||
|
"""
|
||||||
|
When I go to "0.html"
|
||||||
|
Then I should see 'Another Article Content'
|
||||||
|
When I go to "1.html"
|
||||||
|
Then I should see 'Newer Article Content'
|
||||||
|
When I go to "2.html"
|
||||||
|
Then I should see 'Again'
|
||||||
|
|
|
@ -5,3 +5,5 @@ tags: foo, bar
|
||||||
---
|
---
|
||||||
|
|
||||||
Newer Article Content
|
Newer Article Content
|
||||||
|
|
||||||
|
Again
|
|
@ -7,7 +7,7 @@ module Middleman
|
||||||
attr_reader :app
|
attr_reader :app
|
||||||
|
|
||||||
# Whitelist methods that can reach out.
|
# Whitelist methods that can reach out.
|
||||||
def_delegators :@app, :config, :logger, :use, :map, :mime_type, :data, :files, :root, :build?, :server?, :environment?
|
def_delegators :@app, :config, :logger, :use, :map, :mime_type, :files, :root, :build?, :server?, :environment?
|
||||||
def_delegator :"@app.extensions", :activate
|
def_delegator :"@app.extensions", :activate
|
||||||
|
|
||||||
def initialize(app, template_context_class)
|
def initialize(app, template_context_class)
|
||||||
|
|
|
@ -16,7 +16,7 @@ module Middleman
|
||||||
# gets a chance to modify any new resources that get added.
|
# gets a chance to modify any new resources that get added.
|
||||||
self.resource_list_manipulator_priority = 110
|
self.resource_list_manipulator_priority = 110
|
||||||
|
|
||||||
attr_accessor :root_collector, :leaves
|
attr_accessor :sitemap_collector, :data_collector, :leaves
|
||||||
|
|
||||||
def initialize(app, options_hash={}, &block)
|
def initialize(app, options_hash={}, &block)
|
||||||
super
|
super
|
||||||
|
@ -25,14 +25,16 @@ module Middleman
|
||||||
@collectors_by_name = {}
|
@collectors_by_name = {}
|
||||||
@values_by_name = {}
|
@values_by_name = {}
|
||||||
|
|
||||||
@root_collector = LazyCollectorRoot.new(self)
|
@sitemap_collector = LazyCollectorRoot.new(self)
|
||||||
|
@data_collector = LazyCollectorRoot.new(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
Contract Any
|
Contract Any
|
||||||
def before_configuration
|
def before_configuration
|
||||||
@leaves.clear
|
@leaves.clear
|
||||||
|
|
||||||
app.add_to_config_context :resources, &method(:root_collector)
|
app.add_to_config_context :resources, &method(:sitemap_collector)
|
||||||
|
app.add_to_config_context :data, &method(:data_collector)
|
||||||
app.add_to_config_context :collection, &method(:register_collector)
|
app.add_to_config_context :collection, &method(:register_collector)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -48,7 +50,8 @@ module Middleman
|
||||||
|
|
||||||
Contract ResourceList => ResourceList
|
Contract ResourceList => ResourceList
|
||||||
def manipulate_resource_list(resources)
|
def manipulate_resource_list(resources)
|
||||||
@root_collector.realize!(resources)
|
@sitemap_collector.realize!(resources)
|
||||||
|
@data_collector.realize!(app.data)
|
||||||
|
|
||||||
ctx = StepContext.new
|
ctx = StepContext.new
|
||||||
leaves = @leaves.dup
|
leaves = @leaves.dup
|
||||||
|
|
|
@ -14,11 +14,11 @@ module Middleman
|
||||||
|
|
||||||
def initialize(app, config={}, &block)
|
def initialize(app, config={}, &block)
|
||||||
super
|
super
|
||||||
|
|
||||||
@data_store = DataStore.new(app, DATA_FILE_MATCHER)
|
@data_store = DataStore.new(app, DATA_FILE_MATCHER)
|
||||||
app.config.define_setting :data_dir, 'data', 'The directory data files are stored in'
|
app.config.define_setting :data_dir, 'data', 'The directory data files are stored in'
|
||||||
|
|
||||||
app.add_to_instance(:data, &method(:data_store))
|
app.add_to_instance(:data, &method(:data_store))
|
||||||
app.add_to_config_context(:data, &method(:data_store))
|
|
||||||
|
|
||||||
start_watching(app.config[:data_dir])
|
start_watching(app.config[:data_dir])
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,6 +24,7 @@ module Middleman
|
||||||
super
|
super
|
||||||
|
|
||||||
# Setup Slim options to work with partials
|
# Setup Slim options to work with partials
|
||||||
|
::Slim::Engine.disable_option_validator!
|
||||||
::Slim::Engine.set_options(
|
::Slim::Engine.set_options(
|
||||||
buffer: '@_out_buf',
|
buffer: '@_out_buf',
|
||||||
use_html_safe: true,
|
use_html_safe: true,
|
||||||
|
|
Loading…
Reference in a new issue