あなたが与えた例では、 ExtensionBar はどのアプリにも何もしません。また、アプリで使用する拡張機能に依存する拡張機能を登録する必要があります。モジュールの作成に関する指示では、 LinkBlocker before
DSL の例としてブロックが示されています。どちらも例を次のようにします。
# extension_foo.rb
require 'sinatra/base'
module Sinatra
module ExtensionFoo
def with_foo
warn "Calling with_foo"
s = yield
warn "s = #{s}"
s
end
end
register ExtensionFoo
end
# extension_bar.rb
require 'sinatra/base'
require_relative 'extension_foo.rb'
module Sinatra
module ExtensionBar
before do
warn "Calling with_foo in before"
with_foo do
"bar"
end
end
end
register ExtensionBar
end
# app.rb
require 'sinatra'
require_relative 'extension_bar.rb'
get "/" do
with_foo do
"blah"
end.inspect
end
これを実行してもエラーは発生せず、STDOUT に警告が表示されますが、出力は「何とか」です。
Calling with_foo in before
Calling with_foo
from /Volumes/RubyProjects/Test/extension_dependency/extension_foo.rb:6:in `with_foo'
s = bar
from /Volumes/RubyProjects/Test/extension_dependency/extension_foo.rb:8:in `with_foo'
Calling with_foo
from /Volumes/RubyProjects/Test/extension_dependency/extension_foo.rb:6:in `with_foo'
s = blah
from /Volumes/RubyProjects/Test/extension_dependency/extension_foo.rb:8:in `with_foo'