Sinatra::Extension
is a mixin that provides some syntactic
sugar for your extensions. It allows you to call directly inside your
extension module almost any Sinatra::Base
method. This means
you can use get
to define a route, before
to
define a before filter, set
to define a setting, a so on.
Is important to be aware that this mixin remembers the methods calls you
make, and then, when your extension is registered, replays them on the Sinatra application that has been extended. In
order to do that, it defines a registered
method, so, if your
extension defines one too, remember to call super
.
Just require the mixin and extend your extension with it:
require 'sinatra/extension' module MyExtension extend Sinatra::Extension # set some settings for development configure :development do set :reload_stuff, true end # define a route get '/' do 'Hello World' end # The rest of your extension code goes here... end
You can also create an extension with the new
method:
MyExtension = Sinatra::Extension.new do # Your extension code goes here... end
This is useful when you just want to pass a block to
Sinatra::Base.register
.
# File lib/sinatra/extension.rb, line 51 def self.new(&block) ext = Module.new.extend(self) ext.class_eval(&block) ext end
# File lib/sinatra/extension.rb, line 61 def configure(*args, &block) record(:configure, *args) { |c| c.instance_exec(c, &block) } end
# File lib/sinatra/extension.rb, line 65 def registered(base = nil, &block) base ? replay(base) : record(:class_eval, &block) end
# File lib/sinatra/extension.rb, line 57 def settings self end