Module: Sinatra::Extension

Includes:
Delegator
Defined in:
lib/sinatra/extension.rb

Defined Under Namespace

Classes: MethodRecorder

Constant Summary collapse

BasicObject =
Object

Instance Method Summary collapse

Methods included from Delegator

delegate

Instance Method Details

#configure(*args, &block) ⇒ Object



68
69
70
71
72
# File 'lib/sinatra/extension.rb', line 68

def configure(*args, &block)
  on_register do
    configure(*args) { |klass| klass.instance_yield block }
  end
end

#method_callsObject



32
33
34
# File 'lib/sinatra/extension.rb', line 32

def method_calls
  @method_calls ||= []
end

#on_disable(option, &block) ⇒ Object



56
57
58
# File 'lib/sinatra/extension.rb', line 56

def on_disable(option, &block)
  on_set(option, true) { instance_yield block unless __send__ option }
end

#on_enable(option, &block) ⇒ Object



60
61
62
# File 'lib/sinatra/extension.rb', line 60

def on_enable(option, &block)
  on_set(option, false) { instance_yield block if __send__ option }
end

#on_register(&block) ⇒ Object



40
41
42
# File 'lib/sinatra/extension.rb', line 40

def on_register(&block)
  register_hooks << block
end

#on_set(option, default_value = nil, &block) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/sinatra/extension.rb', line 44

def on_set(option, default_value = nil, &block)
  mod = Module.new
  mod.extend Sinatra::Extension
  define_method(option) { default_value }
  define_method("#{option}?") { !!__send__(option) }
  define_method("#{option}=") do |value|
    metadef(option) { value }
    metadef("#{option}?") { !!value }
    instance_yield block
  end
end

#register(*extensions) ⇒ Object



64
65
66
# File 'lib/sinatra/extension.rb', line 64

def register(*extensions)
  on_register { register(*extensions) }
end

#register_hooksObject



36
37
38
# File 'lib/sinatra/extension.rb', line 36

def register_hooks
  @register_hooks ||= []
end

#registered(klass) ⇒ Object



74
75
76
77
78
# File 'lib/sinatra/extension.rb', line 74

def registered(klass)
  register Sinatra::Sugar
  method_calls.each { |a,b| klass.__send__(*a, &b) }
  register_hooks.each { |hook| klass.instance_yield hook }
end

#sinatra_applicationObject



80
81
82
# File 'lib/sinatra/extension.rb', line 80

def sinatra_application
  @sinatra_application ||= MethodRecorder.new method_calls
end