Class: Sinatra::Asterisk::SinatraAgiScript

Inherits:
BaseAgiScript
  • Object
show all
Includes:
MappingStrategy
Defined in:
lib/sinatra/asterisk.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#agi_handlersObject

Returns the value of attribute agi_handlers.



21
22
23
# File 'lib/sinatra/asterisk.rb', line 21

def agi_handlers
  @agi_handlers
end

#sinatra_appObject

Returns the value of attribute sinatra_app.



21
22
23
# File 'lib/sinatra/asterisk.rb', line 21

def sinatra_app
  @sinatra_app
end

Instance Method Details

#determineScript(request) ⇒ Object

Implements MappingStrategy



24
25
26
# File 'lib/sinatra/asterisk.rb', line 24

def determineScript(request)
  self
end

#eval_in_sinatra(request, channel, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/sinatra/asterisk.rb', line 28

def eval_in_sinatra(request, channel, &block)
    sinatra = sinatra_app::new!
    sinatra_eigenclass = (class <<sinatra; self; end)
    sinatra_eigenclass.class_eval do
        # TODO: do this with a module ?
        define_method(:request) { request } 
        define_method(:channel) { channel } 
    end

    sinatra.instance_eval(&block)
end

#service(request, channel) ⇒ Object

Implements AgiScript



41
42
43
44
45
46
47
48
49
50
# File 'lib/sinatra/asterisk.rb', line 41

def service(request, channel)
  catch(:halt) do
    block = @agi_handlers.each do |script_pattern, conditions, block|
      catch :pass do
        throw :pass unless script_pattern.nil? || script_pattern.match(request.script)
        throw :halt, eval_in_sinatra(request, channel, &block) 
      end
    end
  end
end