Add back app.set, but mark as deprecated

This commit is contained in:
Thomas Reynolds 2015-10-12 12:37:07 -07:00
parent eb82f402a0
commit 6357f4f5b8
5 changed files with 40 additions and 0 deletions

View file

@ -0,0 +1,10 @@
Feature: Extension author could use some hooks
Scenario: When build
Given a fixture app "extension-api-deprecations-app"
When I run `middleman build`
Then the exit status should be 0
And the output should contain "`set :layout` is deprecated"
And the file "build/index.html" should contain "In Index"
And the file "build/index.html" should not contain "In Layout"

View file

@ -0,0 +1,11 @@
class LayoutDisabler < Middleman::Extension
def initialize(app, options_hash = {}, &block)
super
app.set :layout, false
end
end
::Middleman::Extensions.register(:layout_disabler, LayoutDisabler)
activate :layout_disabler

View file

@ -0,0 +1,3 @@
In Layout
<%= yield %>

View file

@ -391,6 +391,21 @@ module Middleman
execute_callbacks(:before_shutdown)
end
# Set attributes (global variables)
#
# @deprecated Prefer accessing settings through "config".
#
# @param [Symbol] key Name of the attribue
# @param value Attribute value
# @return [void]
def set(key, value=nil, &block)
logger.warn "Warning: `set :#{key}` is deprecated. Use `config[:#{key}] =` instead."
value = block if block_given?
config[key] = value
end
# Work around this bug: http://bugs.ruby-lang.org/issues/4521
# where Ruby will call to_s/inspect while printing exception
# messages, which can take a long time (minutes at full CPU)