Fixed extension method delegation [#172]
This commit is contained in:
parent
0e6becf09d
commit
c9b2f6b74c
|
@ -1011,9 +1011,9 @@ module Sinatra
|
|||
methods.each do |method_name|
|
||||
eval <<-RUBY, binding, '(__DELEGATE__)', 1
|
||||
def #{method_name}(*args, &b)
|
||||
::Sinatra::Application.#{method_name}(*args, &b)
|
||||
::Sinatra::Application.send(#{method_name.inspect}, *args, &b)
|
||||
end
|
||||
private :#{method_name}
|
||||
private #{method_name.inspect}
|
||||
RUBY
|
||||
end
|
||||
end
|
||||
|
|
|
@ -25,6 +25,12 @@ describe 'Registering extensions' do
|
|||
end
|
||||
end
|
||||
|
||||
module PainExtensions
|
||||
def foo=(name); end
|
||||
def bar?(name); end
|
||||
def fizz!(name); end
|
||||
end
|
||||
|
||||
it 'will add the methods to the DSL for the class in which you register them and its subclasses' do
|
||||
Sinatra::Base.register FooExtensions
|
||||
assert Sinatra::Base.respond_to?(:foo)
|
||||
|
@ -50,6 +56,16 @@ describe 'Registering extensions' do
|
|||
map { |m| m.to_sym }.include?(:im_hiding_in_ur_foos)
|
||||
end
|
||||
|
||||
it 'will handle special method names' do
|
||||
Sinatra::Default.register PainExtensions
|
||||
assert Sinatra::Delegator.private_instance_methods.
|
||||
map { |m| m.to_sym }.include?(:foo=)
|
||||
assert Sinatra::Delegator.private_instance_methods.
|
||||
map { |m| m.to_sym }.include?(:bar?)
|
||||
assert Sinatra::Delegator.private_instance_methods.
|
||||
map { |m| m.to_sym }.include?(:fizz!)
|
||||
end
|
||||
|
||||
it 'will not delegate methods on Base#register' do
|
||||
Sinatra::Base.register QuuxExtensions
|
||||
assert !Sinatra::Delegator.private_instance_methods.include?("quux")
|
||||
|
|
Loading…
Reference in New Issue