Throw when trying to overwrite a template context value. Fixes #1884

This commit is contained in:
Thomas Reynolds 2016-04-19 10:36:49 -07:00
parent 6872e07d34
commit 09a7d89fd3
2 changed files with 38 additions and 0 deletions

View file

@ -0,0 +1,26 @@
Feature: Don't allow template locals to overwrite template helpers
Scenario: Normal Template
Given an empty app
And a file named "config.rb" with:
"""
class TestExt < ::Middleman::Extension
expose_to_template foo: :foo
def foo
"bar"
end
end
::Middleman::Extensions.register :test, TestExt
activate :test
page "/index.html", locals: { test: false }
"""
And a file named "source/index.erb" with:
"""
<%= foo %>
"""
Given a built app at "empty_app"
Then the exit status should be 1

View file

@ -34,6 +34,18 @@ module Middleman
@app = app
@locs = locs
@opts = opts
@locs.each do |k, _|
if self.respond_to?(k)
msg = "Template local `#{k}` tried to overwrite an existing context value. Please renamed the key when passing to `locals`"
if app.build?
throw msg
else
logger.error(msg)
end
end
end
end
# Return the current buffer to the caller and clear the value internally.