Module: Sinatra::Extension
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Defined in: | sinatra-contrib/lib/sinatra/extension.rb |
Overview
Sinatra::Extension is a mixin that provides some syntactic sugar
for your extensions. It allows you to call almost any
Sinatra::Base method directly inside your extension
module. This means you can use get
to define a route, before
to define a before filter, set
to define a setting and so on.
Is important to be aware that this mixin remembers the method 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
.
Usage
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.
Class Method Summary
Instance Method Summary
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) (private)
[ GitHub ]Class Method Details
.new(&block)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/extension.rb', line 51
def self.new(&block) ext = Module.new.extend(self) ext.class_eval(&block) ext end
Instance Method Details
#configure(*args, &block)
[ GitHub ]#record(method, *args, &block) (private)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/extension.rb', line 71
def record(method, *args, &block) recorded_methods << [method, args, block] end
#recorded_methods (private)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/extension.rb', line 79
def recorded_methods @recorded_methods ||= [] end
#registered(base = nil, &block)
[ GitHub ]#replay(object) (private)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/extension.rb', line 75
def replay(object) recorded_methods.each { |m, a, b| object.send(m, *a, &b) } end
#settings
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/extension.rb', line 57
def settings self end