class Punchblock::Translator::Asterisk::AGICommand

Constants

ARG_QUOTER

Attributes

id[R]

Public Class Methods

new(id, channel, command, *params) click to toggle source
# File lib/punchblock/translator/asterisk/agi_command.rb, line 14
def initialize(id, channel, command, *params)
  @id, @channel, @command, @params = id, channel, command, params
end

Public Instance Methods

execute(ami_client) click to toggle source

@raises RubyAMI::Error, ChannelGoneError

# File lib/punchblock/translator/asterisk/agi_command.rb, line 19
def execute(ami_client)
  AMIErrorConverter.convert { ami_client.send_action 'AGI', 'Channel' => @channel, 'Command' => agi_command, 'CommandID' => id }
end
parse_result(event) click to toggle source
# File lib/punchblock/translator/asterisk/agi_command.rb, line 23
def parse_result(event)
  parser = RubyAMI::AGIResultParser.new event['Result']
  {code: parser.code, result: parser.result, data: parser.data}
rescue ArgumentError => e
  pb_logger.warn "Illegal message received from Asterisk: #{e.message}"
  {code: -1, result: nil, data: nil}
end

Private Instance Methods

agi_command() click to toggle source
# File lib/punchblock/translator/asterisk/agi_command.rb, line 33
def agi_command
  "#{@command} #{@params.map { |arg| quote_arg(arg) }.join(' ')}".squish
end
quote_arg(arg) click to toggle source

Arguments surrounded by quotes; quotes backslash-escaped. See parse_args in asterisk/res/res_agi.c (Asterisk 1.4.21.1)

# File lib/punchblock/translator/asterisk/agi_command.rb, line 39
def quote_arg(arg)
  '"' + arg.to_s.gsub(ARG_QUOTER) { |m| "\\#{m}" } + '"'
end