Sha256: 1f0c3ab9ece5271c2d5fca684a6cffc20b7330eb6cc2fafa588ef0bf61938a16

Contents?: true

Size: 1.07 KB

Versions: 5

Compression:

Stored size: 1.07 KB

Contents

# encoding: utf-8

require 'active_support/core_ext/string/filters'

module Punchblock
  module Translator
    class Asterisk
      class AGICommand
        ARG_QUOTER = /["\\]/.freeze

        attr_reader :id

        def initialize(id, channel, command, *params)
          @id, @channel, @command, @params = id, channel, command, params
        end

        def execute(ami_client)
          ami_client.send_action 'AGI', 'Channel' => @channel, 'Command' => agi_command, 'CommandID' => id
        end

        def parse_result(event)
          parser = RubyAMI::AGIResultParser.new event['Result']
          {code: parser.code, result: parser.result, data: parser.data}
        end

        private

        def agi_command
          "#{@command} #{@params.map { |arg| quote_arg(arg) }.join(' ')}".squish
        end

        # Arguments surrounded by quotes; quotes backslash-escaped.
        # See parse_args in asterisk/res/res_agi.c (Asterisk 1.4.21.1)
        def quote_arg(arg)
          '"' + arg.to_s.gsub(ARG_QUOTER) { |m| "\\#{m}" } + '"'
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
punchblock-1.9.4 lib/punchblock/translator/asterisk/agi_command.rb
punchblock-1.9.3 lib/punchblock/translator/asterisk/agi_command.rb
punchblock-1.9.2 lib/punchblock/translator/asterisk/agi_command.rb
punchblock-1.9.1 lib/punchblock/translator/asterisk/agi_command.rb
punchblock-1.9.0 lib/punchblock/translator/asterisk/agi_command.rb