Steps should try passing unknown methods to config context before failing. Fixes #1879

This commit is contained in:
Thomas Reynolds 2016-04-14 11:26:33 -07:00
parent f2535f4fda
commit a01656df39
4 changed files with 40 additions and 6 deletions

View file

@ -1,6 +1,10 @@
master
===
# 4.1.8
* Let collection loops access ConfigContext for helpers. #1879
# 4.1.7
* Upgrade fastimage to 2.0

View file

@ -144,6 +144,33 @@ Feature: Collections
And I should see 'Article: Blog3 Another Article'
And I should see 'Article: Blog2 Yet Another Article'
Scenario: Work with local helpers
Given a fixture app "collections-app"
And a file named "config.rb" with:
"""
module TestHelper
def help_me
"ok"
end
end
include TestHelper
data.articles.each_with_index do |a, i|
proxy "/#{i}-#{help_me}.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-ok.html"
Then I should see 'Newer Article Content'
When I go to "1-ok.html"
Then I should see 'Another Article Content'
Scenario: Collected data update with file changes
Given a fixture app "collections-app"

View file

@ -90,7 +90,7 @@ module Middleman
pair[:root].realize!(dataset)
end
ctx = StepContext.new
ctx = StepContext.new(app)
StepContext.current = ctx
leaves = @leaves.dup

View file

@ -12,17 +12,20 @@ module Middleman
attr_reader :descriptors
def initialize
def initialize(app)
@app = app
@descriptors = []
end
def method_missing(name, *args, &block)
internal = :"_internal_#{name}"
return super unless respond_to?(internal)
send(internal, *args, &block).tap do |r|
@descriptors << r if r.respond_to?(:execute_descriptor)
if respond_to?(internal)
send(internal, *args, &block).tap do |r|
@descriptors << r if r.respond_to?(:execute_descriptor)
end
else
@app.config_context.send(name, *args, &block)
end
end
end