diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 2d5a6fff..87a1b861 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -695,7 +695,7 @@ module Sinatra public def helpers(*extensions, &block) - extensions << Module.new(&block) if block + class_eval(&block) if block_given? include *extensions end diff --git a/test/helpers_test.rb b/test/helpers_test.rb index d9815926..acc3a699 100644 --- a/test/helpers_test.rb +++ b/test/helpers_test.rb @@ -384,7 +384,7 @@ module HelperOne; def one; '1'; end; end module HelperTwo; def two; '2'; end; end describe 'Adding new helpers' do - it 'should allow passing a list of modules' do + it 'takes a list of modules to mix into the app' do mock_app { helpers HelperOne, HelperTwo @@ -404,7 +404,7 @@ describe 'Adding new helpers' do assert_equal '2', body end - it 'should take a block and mix it into the app' do + it 'takes a block to mix into the app' do mock_app { helpers do def foo @@ -420,4 +420,20 @@ describe 'Adding new helpers' do get '/' assert_equal 'foo', body end + + it 'evaluates the block in class context so that methods can be aliased' do + mock_app { + helpers do + alias_method :h, :escape_html + end + + get '/' do + h('42 < 43') + end + } + + get '/' + assert ok? + assert_equal '42 < 43', body + end end